1 // Copyright 2023 gRPC authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // This file is autogenerated: see 16 // tools/codegen/core/gen_huffman_decompressor.cc 17 18 #ifndef GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_8_14_8_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_8_14_8_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_8_14_8 { 26 class HuffDecoderCommon { 27 protected: GetOp2(size_t i)28 static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; } GetEmit2(size_t,size_t emit)29 static inline uint64_t GetEmit2(size_t, size_t emit) { 30 return table2_0_emit_[emit]; 31 } GetOp3(size_t i)32 static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; } GetEmit3(size_t,size_t emit)33 static inline uint64_t GetEmit3(size_t, size_t emit) { 34 return table3_0_emit_[emit]; 35 } GetOp4(size_t i)36 static inline uint64_t GetOp4(size_t i) { 37 return table4_ops_[i >> 6][i & 0x3f]; 38 } GetEmit4(size_t i,size_t emit)39 static inline uint64_t GetEmit4(size_t i, size_t emit) { 40 return table4_emit_[i >> 6][emit]; 41 } GetOp1(size_t i)42 static inline uint64_t GetOp1(size_t i) { 43 return table1_0_inner_[table1_0_outer_[i]]; 44 } GetEmit1(size_t,size_t emit)45 static inline uint64_t GetEmit1(size_t, size_t emit) { 46 return table1_0_emit_[emit]; 47 } GetOp5(size_t i)48 static inline uint64_t GetOp5(size_t i) { 49 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 50 } GetEmit5(size_t,size_t emit)51 static inline uint64_t GetEmit5(size_t, size_t emit) { 52 return (emit < 2 ? (emit + 33) : ((emit - 2) + 40)); 53 } GetOp7(size_t i)54 static inline uint64_t GetOp7(size_t i) { 55 return (i < 2 ? (i) : ((i - 2) + 1)); 56 } GetEmit7(size_t,size_t emit)57 static inline uint64_t GetEmit7(size_t, size_t emit) { 58 return ((void)emit, 63); 59 } GetOp8(size_t i)60 static inline uint64_t GetOp8(size_t i) { 61 return table8_0_inner_[table8_0_outer_[i]]; 62 } GetEmit8(size_t,size_t emit)63 static inline uint64_t GetEmit8(size_t, size_t emit) { 64 return (emit < 2 ? (emit ? 39 : 63) : ((emit - 2) ? 124 : 43)); 65 } GetOp9(size_t i)66 static inline uint64_t GetOp9(size_t i) { 67 return table9_0_inner_[table9_0_outer_[i]]; 68 } GetEmit9(size_t,size_t emit)69 static inline uint64_t GetEmit9(size_t, size_t emit) { 70 return table9_0_emit_[emit]; 71 } GetOp10(size_t i)72 static inline uint64_t GetOp10(size_t i) { return table10_0_ops_[i]; } GetEmit10(size_t,size_t emit)73 static inline uint64_t GetEmit10(size_t, size_t emit) { 74 return table10_0_emit_[emit]; 75 } GetOp11(size_t i)76 static inline uint64_t GetOp11(size_t i) { return table11_0_ops_[i]; } GetEmit11(size_t,size_t emit)77 static inline uint64_t GetEmit11(size_t, size_t emit) { 78 return table11_0_emit_[emit]; 79 } GetOp12(size_t i)80 static inline uint64_t GetOp12(size_t i) { return table12_0_ops_[i]; } GetEmit12(size_t,size_t emit)81 static inline uint64_t GetEmit12(size_t, size_t emit) { 82 return table12_0_emit_[emit]; 83 } GetOp13(size_t i)84 static inline uint64_t GetOp13(size_t i) { 85 return table13_ops_[i >> 5][i & 0x1f]; 86 } GetEmit13(size_t i,size_t emit)87 static inline uint64_t GetEmit13(size_t i, size_t emit) { 88 return table13_emit_[i >> 5][emit]; 89 } GetOp14(size_t i)90 static inline uint64_t GetOp14(size_t i) { 91 return table14_ops_[i >> 5][i & 0x1f]; 92 } GetEmit14(size_t i,size_t emit)93 static inline uint64_t GetEmit14(size_t i, size_t emit) { 94 return table14_emit_[i >> 5][emit]; 95 } GetOp15(size_t i)96 static inline uint64_t GetOp15(size_t i) { 97 return table15_ops_[i >> 6][i & 0x3f]; 98 } GetEmit15(size_t i,size_t emit)99 static inline uint64_t GetEmit15(size_t i, size_t emit) { 100 return table15_emit_[i >> 6][emit]; 101 } GetOp16(size_t i)102 static inline uint64_t GetOp16(size_t i) { 103 return table16_ops_[i >> 6][i & 0x3f]; 104 } GetEmit16(size_t i,size_t emit)105 static inline uint64_t GetEmit16(size_t i, size_t emit) { 106 return table16_emit_[i >> 6][emit]; 107 } GetOp17(size_t i)108 static inline uint64_t GetOp17(size_t i) { 109 return table17_ops_[i >> 6][i & 0x3f]; 110 } GetEmit17(size_t i,size_t emit)111 static inline uint64_t GetEmit17(size_t i, size_t emit) { 112 return table17_emit_[i >> 6][emit]; 113 } GetOp18(size_t i)114 static inline uint64_t GetOp18(size_t i) { 115 return table18_ops_[i >> 6][i & 0x3f]; 116 } GetEmit18(size_t i,size_t emit)117 static inline uint64_t GetEmit18(size_t i, size_t emit) { 118 return table18_emit_[i >> 6][emit]; 119 } GetOp6(size_t i)120 static inline uint64_t GetOp6(size_t i) { 121 return table6_ops_[i >> 8][i & 0xff]; 122 } GetEmit6(size_t i,size_t emit)123 static inline uint64_t GetEmit6(size_t i, size_t emit) { 124 return table6_emit_[i >> 8][emit]; 125 } GetOp19(size_t i)126 static inline uint64_t GetOp19(size_t i) { return i ? 3 : 1; } GetEmit19(size_t,size_t emit)127 static inline uint64_t GetEmit19(size_t, size_t emit) { 128 return emit ? 135 : 1; 129 } GetOp20(size_t i)130 static inline uint64_t GetOp20(size_t i) { return i ? 3 : 1; } GetEmit20(size_t,size_t emit)131 static inline uint64_t GetEmit20(size_t, size_t emit) { return emit + 137; } GetOp21(size_t i)132 static inline uint64_t GetOp21(size_t i) { return i ? 3 : 1; } GetEmit21(size_t,size_t emit)133 static inline uint64_t GetEmit21(size_t, size_t emit) { return emit + 139; } GetOp22(size_t i)134 static inline uint64_t GetOp22(size_t i) { return i ? 3 : 1; } GetEmit22(size_t,size_t emit)135 static inline uint64_t GetEmit22(size_t, size_t emit) { 136 return emit ? 143 : 141; 137 } GetOp23(size_t i)138 static inline uint64_t GetOp23(size_t i) { return i ? 3 : 1; } GetEmit23(size_t,size_t emit)139 static inline uint64_t GetEmit23(size_t, size_t emit) { 140 return emit ? 149 : 147; 141 } GetOp24(size_t i)142 static inline uint64_t GetOp24(size_t i) { return i ? 3 : 1; } GetEmit24(size_t,size_t emit)143 static inline uint64_t GetEmit24(size_t, size_t emit) { return emit + 150; } GetOp25(size_t i)144 static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; } GetEmit25(size_t,size_t emit)145 static inline uint64_t GetEmit25(size_t, size_t emit) { 146 return emit ? 155 : 152; 147 } GetOp26(size_t i)148 static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; } GetEmit26(size_t,size_t emit)149 static inline uint64_t GetEmit26(size_t, size_t emit) { return emit + 157; } GetOp27(size_t i)150 static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; } GetEmit27(size_t,size_t emit)151 static inline uint64_t GetEmit27(size_t, size_t emit) { return emit + 165; } GetOp28(size_t i)152 static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; } GetEmit28(size_t,size_t emit)153 static inline uint64_t GetEmit28(size_t, size_t emit) { 154 return emit ? 174 : 168; 155 } GetOp29(size_t i)156 static inline uint64_t GetOp29(size_t i) { return i ? 3 : 1; } GetEmit29(size_t,size_t emit)157 static inline uint64_t GetEmit29(size_t, size_t emit) { 158 return emit ? 180 : 175; 159 } GetOp30(size_t i)160 static inline uint64_t GetOp30(size_t i) { return i ? 3 : 1; } GetEmit30(size_t,size_t emit)161 static inline uint64_t GetEmit30(size_t, size_t emit) { return emit + 182; } GetOp31(size_t i)162 static inline uint64_t GetOp31(size_t i) { return i ? 3 : 1; } GetEmit31(size_t,size_t emit)163 static inline uint64_t GetEmit31(size_t, size_t emit) { 164 return emit ? 191 : 188; 165 } GetOp32(size_t i)166 static inline uint64_t GetOp32(size_t i) { return i ? 3 : 1; } GetEmit32(size_t,size_t emit)167 static inline uint64_t GetEmit32(size_t, size_t emit) { 168 return emit ? 231 : 197; 169 } GetOp33(size_t i)170 static inline uint64_t GetOp33(size_t i) { 171 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 172 } GetEmit33(size_t,size_t emit)173 static inline uint64_t GetEmit33(size_t, size_t emit) { 174 return (emit < 2 ? (emit + 144) : ((emit - 2) ? 159 : 148)); 175 } GetOp34(size_t i)176 static inline uint64_t GetOp34(size_t i) { 177 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 178 } GetEmit34(size_t,size_t emit)179 static inline uint64_t GetEmit34(size_t, size_t emit) { 180 return (emit < 2 ? (emit ? 206 : 171) : ((emit - 2) ? 225 : 215)); 181 } GetOp36(size_t i)182 static inline uint64_t GetOp36(size_t i) { return table36_0_inner_[i]; } GetEmit36(size_t,size_t emit)183 static inline uint64_t GetEmit36(size_t, size_t emit) { 184 return table36_0_emit_[emit]; 185 } GetOp35(size_t i)186 static inline uint64_t GetOp35(size_t i) { return table35_0_ops_[i]; } GetEmit35(size_t,size_t emit)187 static inline uint64_t GetEmit35(size_t, size_t emit) { 188 return table35_0_emit_[emit]; 189 } GetOp38(size_t i)190 static inline uint64_t GetOp38(size_t i) { return i; } GetEmit38(size_t,size_t emit)191 static inline uint64_t GetEmit38(size_t, size_t emit) { 192 return ((void)emit, 239); 193 } GetOp37(size_t i)194 static inline uint64_t GetOp37(size_t i) { 195 return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1 196 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1)) 197 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6)); 198 } GetEmit37(size_t,size_t emit)199 static inline uint64_t GetEmit37(size_t, size_t emit) { 200 return (emit < 1 ? (((void)emit, 239)) : ((emit - 1) ? 142 : 9)); 201 } GetOp40(size_t i)202 static inline uint64_t GetOp40(size_t i) { 203 return ((i < 2 ? (i) : (((void)(i - 2), 2))) < 1 204 ? (((void)(i < 2 ? (i) : (((void)(i - 2), 2))), 0)) 205 : (((i < 2 ? (i) : (((void)(i - 2), 2))) - 1) ? 1 : 2)); 206 } GetEmit40(size_t,size_t emit)207 static inline uint64_t GetEmit40(size_t, size_t emit) { return emit + 236; } GetOp39(size_t i)208 static inline uint64_t GetOp39(size_t i) { 209 return table39_0_inner_[(i < 3 ? (i / 2 + 0) : ((i - 3) + 1))]; 210 } GetEmit39(size_t,size_t emit)211 static inline uint64_t GetEmit39(size_t, size_t emit) { 212 return table39_0_emit_[emit]; 213 } GetOp42(size_t i)214 static inline uint64_t GetOp42(size_t i) { return table42_0_ops_[i]; } GetEmit42(size_t,size_t emit)215 static inline uint64_t GetEmit42(size_t, size_t emit) { 216 return table42_0_emit_[emit]; 217 } GetOp43(size_t i)218 static inline uint64_t GetOp43(size_t i) { return table43_0_ops_[i]; } GetEmit43(size_t,size_t emit)219 static inline uint64_t GetEmit43(size_t, size_t emit) { 220 return table43_0_emit_[emit]; 221 } GetOp44(size_t i)222 static inline uint64_t GetOp44(size_t i) { return table44_0_ops_[i]; } GetEmit44(size_t,size_t emit)223 static inline uint64_t GetEmit44(size_t, size_t emit) { 224 return table43_0_emit_[emit]; 225 } GetOp41(size_t i)226 static inline uint64_t GetOp41(size_t i) { 227 return table41_ops_[i >> 5][i & 0x1f]; 228 } GetEmit41(size_t i,size_t emit)229 static inline uint64_t GetEmit41(size_t i, size_t emit) { 230 return table41_emit_[i >> 5][emit]; 231 } 232 233 private: 234 static const uint8_t table2_0_emit_[10]; 235 static const uint8_t table2_0_ops_[32]; 236 static const uint8_t table3_0_emit_[36]; 237 static const uint8_t table3_0_ops_[64]; 238 static const uint8_t table4_0_emit_[22]; 239 static const uint8_t table4_0_ops_[64]; 240 static const uint8_t table4_1_emit_[46]; 241 static const uint8_t table4_1_ops_[64]; 242 static const uint8_t* const table4_emit_[2]; 243 static const uint8_t* const table4_ops_[2]; 244 static const uint8_t table1_0_emit_[74]; 245 static const uint16_t table1_0_inner_[76]; 246 static const uint8_t table1_0_outer_[256]; 247 static const uint8_t table8_0_inner_[6]; 248 static const uint8_t table8_0_outer_[8]; 249 static const uint8_t table9_0_emit_[6]; 250 static const uint8_t table9_0_inner_[8]; 251 static const uint8_t table9_0_outer_[16]; 252 static const uint8_t table10_0_emit_[12]; 253 static const uint8_t table10_0_ops_[32]; 254 static const uint8_t table11_0_emit_[14]; 255 static const uint8_t table11_0_ops_[64]; 256 static const uint8_t table12_0_emit_[36]; 257 static const uint8_t table12_0_ops_[128]; 258 static const uint8_t table13_0_emit_[44]; 259 static const uint8_t table13_0_ops_[32]; 260 static const uint8_t table13_1_emit_[28]; 261 static const uint8_t table13_1_ops_[32]; 262 static const uint8_t table13_2_emit_[20]; 263 static const uint8_t table13_2_ops_[32]; 264 static const uint8_t table13_3_emit_[20]; 265 static const uint8_t table13_4_emit_[20]; 266 static const uint8_t table13_5_emit_[2]; 267 static const uint8_t table13_5_ops_[32]; 268 static const uint8_t table13_6_emit_[4]; 269 static const uint8_t table13_6_ops_[32]; 270 static const uint8_t table13_7_emit_[7]; 271 static const uint8_t table13_7_ops_[32]; 272 static const uint8_t* const table13_emit_[8]; 273 static const uint8_t* const table13_ops_[8]; 274 static const uint8_t table14_0_emit_[16]; 275 static const uint8_t table14_0_ops_[32]; 276 static const uint8_t table14_1_emit_[28]; 277 static const uint8_t table14_1_ops_[32]; 278 static const uint8_t table14_2_emit_[36]; 279 static const uint8_t table14_2_ops_[32]; 280 static const uint8_t table14_3_emit_[56]; 281 static const uint8_t table14_3_ops_[32]; 282 static const uint8_t table14_4_emit_[44]; 283 static const uint8_t table14_5_emit_[28]; 284 static const uint8_t table14_6_emit_[44]; 285 static const uint8_t table14_7_emit_[28]; 286 static const uint8_t table14_8_emit_[44]; 287 static const uint8_t table14_9_emit_[28]; 288 static const uint8_t table14_10_emit_[20]; 289 static const uint8_t table14_11_emit_[20]; 290 static const uint8_t table14_12_emit_[2]; 291 static const uint8_t table14_13_emit_[2]; 292 static const uint8_t table14_14_emit_[2]; 293 static const uint8_t table14_15_emit_[5]; 294 static const uint8_t table14_15_ops_[32]; 295 static const uint8_t* const table14_emit_[16]; 296 static const uint8_t* const table14_ops_[16]; 297 static const uint16_t table15_0_ops_[64]; 298 static const uint16_t table15_1_ops_[64]; 299 static const uint16_t table15_2_ops_[64]; 300 static const uint8_t table15_3_emit_[68]; 301 static const uint16_t table15_3_ops_[64]; 302 static const uint16_t table15_4_ops_[64]; 303 static const uint8_t table15_5_emit_[92]; 304 static const uint16_t table15_5_ops_[64]; 305 static const uint8_t table15_7_emit_[92]; 306 static const uint8_t table15_9_emit_[92]; 307 static const uint8_t table15_10_emit_[72]; 308 static const uint16_t table15_10_ops_[64]; 309 static const uint8_t table15_11_emit_[72]; 310 static const uint8_t table15_12_emit_[40]; 311 static const uint16_t table15_12_ops_[64]; 312 static const uint8_t table15_13_emit_[40]; 313 static const uint8_t table15_14_emit_[40]; 314 static const uint16_t table15_15_ops_[64]; 315 static const uint8_t* const table15_emit_[16]; 316 static const uint16_t* const table15_ops_[16]; 317 static const uint8_t table16_0_emit_[8]; 318 static const uint16_t table16_0_ops_[64]; 319 static const uint8_t table16_1_emit_[8]; 320 static const uint8_t table16_2_emit_[12]; 321 static const uint16_t table16_2_ops_[64]; 322 static const uint8_t table16_3_emit_[16]; 323 static const uint8_t table16_4_emit_[16]; 324 static const uint8_t table16_5_emit_[20]; 325 static const uint16_t table16_5_ops_[64]; 326 static const uint8_t table16_6_emit_[32]; 327 static const uint16_t table16_6_ops_[64]; 328 static const uint8_t table16_7_emit_[36]; 329 static const uint16_t table16_7_ops_[64]; 330 static const uint8_t table16_8_emit_[16]; 331 static const uint8_t table16_9_emit_[28]; 332 static const uint8_t table16_10_emit_[36]; 333 static const uint8_t table16_11_emit_[68]; 334 static const uint8_t table16_12_emit_[16]; 335 static const uint8_t table16_13_emit_[28]; 336 static const uint8_t table16_14_emit_[36]; 337 static const uint8_t table16_15_emit_[68]; 338 static const uint8_t table16_16_emit_[16]; 339 static const uint8_t table16_17_emit_[28]; 340 static const uint8_t table16_18_emit_[36]; 341 static const uint8_t table16_19_emit_[68]; 342 static const uint8_t table16_20_emit_[44]; 343 static const uint8_t table16_21_emit_[92]; 344 static const uint8_t table16_22_emit_[44]; 345 static const uint8_t table16_23_emit_[92]; 346 static const uint8_t table16_24_emit_[72]; 347 static const uint8_t table16_25_emit_[72]; 348 static const uint8_t table16_26_emit_[72]; 349 static const uint8_t table16_27_emit_[72]; 350 static const uint8_t table16_28_emit_[72]; 351 static const uint8_t table16_29_emit_[72]; 352 static const uint8_t table16_30_emit_[40]; 353 static const uint8_t table16_31_emit_[6]; 354 static const uint16_t table16_31_ops_[64]; 355 static const uint8_t* const table16_emit_[32]; 356 static const uint16_t* const table16_ops_[32]; 357 static const uint8_t table17_0_emit_[60]; 358 static const uint16_t table17_0_ops_[64]; 359 static const uint8_t table17_1_emit_[60]; 360 static const uint8_t table17_2_emit_[60]; 361 static const uint8_t table17_3_emit_[60]; 362 static const uint8_t table17_4_emit_[60]; 363 static const uint8_t table17_5_emit_[8]; 364 static const uint16_t table17_5_ops_[64]; 365 static const uint8_t table17_6_emit_[8]; 366 static const uint8_t table17_7_emit_[8]; 367 static const uint8_t table17_8_emit_[8]; 368 static const uint8_t table17_9_emit_[8]; 369 static const uint8_t table17_10_emit_[8]; 370 static const uint8_t table17_11_emit_[12]; 371 static const uint16_t table17_11_ops_[64]; 372 static const uint8_t table17_12_emit_[16]; 373 static const uint16_t table17_12_ops_[64]; 374 static const uint8_t table17_13_emit_[16]; 375 static const uint8_t table17_14_emit_[16]; 376 static const uint8_t table17_15_emit_[30]; 377 static const uint16_t table17_15_ops_[64]; 378 static const uint8_t table17_16_emit_[8]; 379 static const uint8_t table17_17_emit_[8]; 380 static const uint8_t table17_18_emit_[12]; 381 static const uint8_t table17_19_emit_[16]; 382 static const uint8_t table17_20_emit_[16]; 383 static const uint8_t table17_21_emit_[20]; 384 static const uint16_t table17_21_ops_[64]; 385 static const uint8_t table17_22_emit_[32]; 386 static const uint16_t table17_22_ops_[64]; 387 static const uint8_t table17_23_emit_[36]; 388 static const uint16_t table17_23_ops_[64]; 389 static const uint8_t table17_24_emit_[8]; 390 static const uint8_t table17_25_emit_[8]; 391 static const uint8_t table17_26_emit_[12]; 392 static const uint8_t table17_27_emit_[16]; 393 static const uint8_t table17_28_emit_[16]; 394 static const uint8_t table17_29_emit_[20]; 395 static const uint8_t table17_30_emit_[32]; 396 static const uint8_t table17_31_emit_[36]; 397 static const uint8_t table17_32_emit_[8]; 398 static const uint8_t table17_33_emit_[8]; 399 static const uint8_t table17_34_emit_[12]; 400 static const uint8_t table17_35_emit_[16]; 401 static const uint8_t table17_36_emit_[16]; 402 static const uint8_t table17_37_emit_[20]; 403 static const uint8_t table17_38_emit_[32]; 404 static const uint8_t table17_39_emit_[36]; 405 static const uint8_t table17_40_emit_[16]; 406 static const uint8_t table17_41_emit_[28]; 407 static const uint16_t table17_41_ops_[64]; 408 static const uint8_t table17_42_emit_[36]; 409 static const uint16_t table17_42_ops_[64]; 410 static const uint8_t table17_43_emit_[68]; 411 static const uint16_t table17_43_ops_[64]; 412 static const uint8_t table17_44_emit_[16]; 413 static const uint8_t table17_45_emit_[28]; 414 static const uint8_t table17_46_emit_[36]; 415 static const uint8_t table17_47_emit_[68]; 416 static const uint8_t table17_48_emit_[44]; 417 static const uint16_t table17_48_ops_[64]; 418 static const uint8_t table17_49_emit_[92]; 419 static const uint16_t table17_49_ops_[64]; 420 static const uint8_t table17_50_emit_[44]; 421 static const uint8_t table17_51_emit_[92]; 422 static const uint8_t table17_52_emit_[44]; 423 static const uint8_t table17_53_emit_[92]; 424 static const uint8_t table17_54_emit_[44]; 425 static const uint8_t table17_55_emit_[92]; 426 static const uint8_t table17_56_emit_[44]; 427 static const uint8_t table17_57_emit_[92]; 428 static const uint8_t table17_58_emit_[44]; 429 static const uint8_t table17_59_emit_[92]; 430 static const uint8_t table17_60_emit_[72]; 431 static const uint16_t table17_60_ops_[64]; 432 static const uint8_t table17_61_emit_[72]; 433 static const uint8_t table17_62_emit_[40]; 434 static const uint16_t table17_62_ops_[64]; 435 static const uint8_t table17_63_emit_[31]; 436 static const uint16_t table17_63_ops_[64]; 437 static const uint8_t* const table17_emit_[64]; 438 static const uint16_t* const table17_ops_[64]; 439 static const uint8_t table18_0_emit_[108]; 440 static const uint16_t table18_0_ops_[64]; 441 static const uint8_t table18_1_emit_[108]; 442 static const uint8_t table18_2_emit_[108]; 443 static const uint8_t table18_3_emit_[108]; 444 static const uint8_t table18_4_emit_[108]; 445 static const uint8_t table18_5_emit_[108]; 446 static const uint8_t table18_6_emit_[108]; 447 static const uint8_t table18_7_emit_[108]; 448 static const uint8_t table18_8_emit_[108]; 449 static const uint8_t table18_9_emit_[108]; 450 static const uint8_t table18_10_emit_[60]; 451 static const uint16_t table18_10_ops_[64]; 452 static const uint8_t table18_11_emit_[60]; 453 static const uint8_t table18_12_emit_[60]; 454 static const uint8_t table18_13_emit_[60]; 455 static const uint8_t table18_14_emit_[60]; 456 static const uint8_t table18_15_emit_[60]; 457 static const uint8_t table18_16_emit_[60]; 458 static const uint8_t table18_17_emit_[60]; 459 static const uint8_t table18_18_emit_[60]; 460 static const uint8_t table18_19_emit_[60]; 461 static const uint8_t table18_20_emit_[60]; 462 static const uint8_t table18_21_emit_[60]; 463 static const uint8_t table18_22_emit_[60]; 464 static const uint8_t table18_23_emit_[8]; 465 static const uint16_t table18_23_ops_[64]; 466 static const uint8_t table18_24_emit_[8]; 467 static const uint8_t table18_25_emit_[8]; 468 static const uint8_t table18_26_emit_[8]; 469 static const uint8_t table18_27_emit_[8]; 470 static const uint8_t table18_28_emit_[8]; 471 static const uint8_t table18_29_emit_[8]; 472 static const uint8_t table18_30_emit_[8]; 473 static const uint8_t table18_31_emit_[27]; 474 static const uint16_t table18_31_ops_[64]; 475 static const uint8_t table18_32_emit_[60]; 476 static const uint8_t table18_33_emit_[60]; 477 static const uint8_t table18_34_emit_[60]; 478 static const uint8_t table18_35_emit_[60]; 479 static const uint8_t table18_36_emit_[60]; 480 static const uint8_t table18_37_emit_[8]; 481 static const uint8_t table18_38_emit_[8]; 482 static const uint8_t table18_39_emit_[8]; 483 static const uint8_t table18_40_emit_[8]; 484 static const uint8_t table18_41_emit_[8]; 485 static const uint8_t table18_42_emit_[8]; 486 static const uint8_t table18_43_emit_[12]; 487 static const uint16_t table18_43_ops_[64]; 488 static const uint8_t table18_44_emit_[16]; 489 static const uint16_t table18_44_ops_[64]; 490 static const uint8_t table18_45_emit_[16]; 491 static const uint8_t table18_46_emit_[16]; 492 static const uint8_t table18_47_emit_[30]; 493 static const uint16_t table18_47_ops_[64]; 494 static const uint8_t table18_48_emit_[60]; 495 static const uint8_t table18_49_emit_[60]; 496 static const uint8_t table18_50_emit_[60]; 497 static const uint8_t table18_51_emit_[60]; 498 static const uint8_t table18_52_emit_[60]; 499 static const uint8_t table18_53_emit_[8]; 500 static const uint8_t table18_54_emit_[8]; 501 static const uint8_t table18_55_emit_[8]; 502 static const uint8_t table18_56_emit_[8]; 503 static const uint8_t table18_57_emit_[8]; 504 static const uint8_t table18_58_emit_[8]; 505 static const uint8_t table18_59_emit_[12]; 506 static const uint8_t table18_60_emit_[16]; 507 static const uint8_t table18_61_emit_[16]; 508 static const uint8_t table18_62_emit_[16]; 509 static const uint8_t table18_63_emit_[30]; 510 static const uint8_t table18_64_emit_[60]; 511 static const uint8_t table18_65_emit_[60]; 512 static const uint8_t table18_66_emit_[60]; 513 static const uint8_t table18_67_emit_[60]; 514 static const uint8_t table18_68_emit_[60]; 515 static const uint8_t table18_69_emit_[8]; 516 static const uint8_t table18_70_emit_[8]; 517 static const uint8_t table18_71_emit_[8]; 518 static const uint8_t table18_72_emit_[8]; 519 static const uint8_t table18_73_emit_[8]; 520 static const uint8_t table18_74_emit_[8]; 521 static const uint8_t table18_75_emit_[12]; 522 static const uint8_t table18_76_emit_[16]; 523 static const uint8_t table18_77_emit_[16]; 524 static const uint8_t table18_78_emit_[16]; 525 static const uint8_t table18_79_emit_[30]; 526 static const uint8_t table18_80_emit_[8]; 527 static const uint8_t table18_81_emit_[8]; 528 static const uint8_t table18_82_emit_[12]; 529 static const uint8_t table18_83_emit_[16]; 530 static const uint8_t table18_84_emit_[16]; 531 static const uint8_t table18_85_emit_[20]; 532 static const uint16_t table18_85_ops_[64]; 533 static const uint8_t table18_86_emit_[32]; 534 static const uint16_t table18_86_ops_[64]; 535 static const uint8_t table18_87_emit_[36]; 536 static const uint16_t table18_87_ops_[64]; 537 static const uint8_t table18_88_emit_[8]; 538 static const uint8_t table18_89_emit_[8]; 539 static const uint8_t table18_90_emit_[12]; 540 static const uint8_t table18_91_emit_[16]; 541 static const uint8_t table18_92_emit_[16]; 542 static const uint8_t table18_93_emit_[20]; 543 static const uint8_t table18_94_emit_[32]; 544 static const uint8_t table18_95_emit_[36]; 545 static const uint8_t table18_96_emit_[16]; 546 static const uint8_t table18_97_emit_[28]; 547 static const uint16_t table18_97_ops_[64]; 548 static const uint8_t table18_98_emit_[36]; 549 static const uint16_t table18_98_ops_[64]; 550 static const uint8_t table18_99_emit_[68]; 551 static const uint16_t table18_99_ops_[64]; 552 static const uint8_t table18_100_emit_[16]; 553 static const uint8_t table18_101_emit_[28]; 554 static const uint8_t table18_102_emit_[36]; 555 static const uint8_t table18_103_emit_[68]; 556 static const uint8_t table18_104_emit_[16]; 557 static const uint8_t table18_105_emit_[28]; 558 static const uint8_t table18_106_emit_[36]; 559 static const uint8_t table18_107_emit_[68]; 560 static const uint8_t table18_108_emit_[16]; 561 static const uint8_t table18_109_emit_[28]; 562 static const uint8_t table18_110_emit_[36]; 563 static const uint8_t table18_111_emit_[68]; 564 static const uint8_t table18_112_emit_[16]; 565 static const uint8_t table18_113_emit_[28]; 566 static const uint8_t table18_114_emit_[36]; 567 static const uint8_t table18_115_emit_[68]; 568 static const uint8_t table18_116_emit_[16]; 569 static const uint8_t table18_117_emit_[28]; 570 static const uint8_t table18_118_emit_[36]; 571 static const uint8_t table18_119_emit_[68]; 572 static const uint8_t table18_120_emit_[44]; 573 static const uint16_t table18_120_ops_[64]; 574 static const uint8_t table18_121_emit_[92]; 575 static const uint16_t table18_121_ops_[64]; 576 static const uint8_t table18_122_emit_[44]; 577 static const uint8_t table18_123_emit_[92]; 578 static const uint8_t table18_124_emit_[72]; 579 static const uint16_t table18_124_ops_[64]; 580 static const uint8_t table18_125_emit_[72]; 581 static const uint8_t table18_126_emit_[72]; 582 static const uint8_t table18_127_emit_[24]; 583 static const uint16_t table18_127_ops_[64]; 584 static const uint8_t* const table18_emit_[128]; 585 static const uint16_t* const table18_ops_[128]; 586 static const uint8_t table6_0_emit_[1]; 587 static const uint16_t table6_0_ops_[256]; 588 static const uint8_t table6_16_emit_[1]; 589 static const uint16_t table6_16_ops_[256]; 590 static const uint8_t table6_24_emit_[1]; 591 static const uint8_t table6_32_emit_[1]; 592 static const uint8_t table6_40_emit_[1]; 593 static const uint16_t table6_40_ops_[256]; 594 static const uint8_t table6_44_emit_[1]; 595 static const uint8_t table6_48_emit_[1]; 596 static const uint16_t table6_48_ops_[256]; 597 static const uint8_t table6_50_emit_[1]; 598 static const uint8_t table6_52_emit_[1]; 599 static const uint8_t table6_54_emit_[1]; 600 static const uint8_t table6_56_emit_[1]; 601 static const uint8_t table6_58_emit_[1]; 602 static const uint8_t table6_60_emit_[1]; 603 static const uint16_t table6_60_ops_[256]; 604 static const uint8_t table6_61_emit_[1]; 605 static const uint8_t table6_62_emit_[2]; 606 static const uint16_t table6_62_ops_[256]; 607 static const uint8_t table6_63_emit_[51]; 608 static const uint16_t table6_63_ops_[256]; 609 static const uint8_t* const table6_emit_[64]; 610 static const uint16_t* const table6_ops_[64]; 611 static const uint8_t table36_0_emit_[15]; 612 static const uint8_t table36_0_inner_[16]; 613 static const uint8_t table35_0_emit_[17]; 614 static const uint8_t table35_0_ops_[32]; 615 static const uint8_t table39_0_emit_[6]; 616 static const uint8_t table39_0_inner_[6]; 617 static const uint8_t table42_0_emit_[17]; 618 static const uint8_t table42_0_ops_[32]; 619 static const uint8_t table43_0_emit_[46]; 620 static const uint8_t table43_0_ops_[64]; 621 static const uint8_t table44_0_ops_[128]; 622 static const uint8_t table41_0_emit_[4]; 623 static const uint16_t table41_0_ops_[32]; 624 static const uint8_t table41_1_emit_[4]; 625 static const uint8_t table41_2_emit_[4]; 626 static const uint8_t table41_3_emit_[4]; 627 static const uint8_t table41_4_emit_[7]; 628 static const uint16_t table41_4_ops_[32]; 629 static const uint8_t table41_5_emit_[8]; 630 static const uint16_t table41_5_ops_[32]; 631 static const uint8_t table41_6_emit_[8]; 632 static const uint8_t table41_7_emit_[10]; 633 static const uint16_t table41_7_ops_[32]; 634 static const uint8_t* const table41_emit_[8]; 635 static const uint16_t* const table41_ops_[8]; 636 }; 637 template <typename F> 638 class HuffDecoder : public HuffDecoderCommon { 639 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)640 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 641 : sink_(sink), begin_(begin), end_(end) {} Run()642 bool Run() { 643 while (!done_) { 644 if (!RefillTo8()) { 645 Done0(); 646 break; 647 } 648 const auto index = (buffer_ >> (buffer_len_ - 8)) & 0xff; 649 const auto op = GetOp1(index); 650 const int consumed = op & 15; 651 buffer_len_ -= consumed; 652 const auto emit_ofs = op >> 6; 653 switch ((op >> 4) & 3) { 654 case 0: { 655 sink_(GetEmit1(index, emit_ofs + 0)); 656 break; 657 } 658 case 1: { 659 DecodeStep0(); 660 break; 661 } 662 case 2: { 663 DecodeStep1(); 664 break; 665 } 666 } 667 } 668 return ok_; 669 } 670 671 private: RefillTo8()672 bool RefillTo8() { 673 switch (buffer_len_) { 674 case 0: { 675 return Read1to8Bytes(); 676 } 677 case 1: 678 case 2: 679 case 3: 680 case 4: 681 case 5: 682 case 6: 683 case 7: { 684 return Read1to7Bytes(); 685 } 686 } 687 return true; 688 } Read1to8Bytes()689 bool Read1to8Bytes() { 690 switch (end_ - begin_) { 691 case 0: { 692 return false; 693 } 694 case 1: { 695 Fill1(); 696 return true; 697 } 698 case 2: { 699 Fill2(); 700 return true; 701 } 702 case 3: { 703 Fill3(); 704 return true; 705 } 706 case 4: { 707 Fill4(); 708 return true; 709 } 710 case 5: { 711 Fill5(); 712 return true; 713 } 714 case 6: { 715 Fill6(); 716 return true; 717 } 718 case 7: { 719 Fill7(); 720 return true; 721 } 722 default: { 723 Fill8(); 724 return true; 725 } 726 } 727 } Fill1()728 void Fill1() { 729 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 730 begin_ += 1; 731 buffer_len_ += 8; 732 } Fill2()733 void Fill2() { 734 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 735 (static_cast<uint64_t>(begin_[1]) << 0); 736 begin_ += 2; 737 buffer_len_ += 16; 738 } Fill3()739 void Fill3() { 740 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 741 (static_cast<uint64_t>(begin_[1]) << 8) | 742 (static_cast<uint64_t>(begin_[2]) << 0); 743 begin_ += 3; 744 buffer_len_ += 24; 745 } Fill4()746 void Fill4() { 747 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 748 (static_cast<uint64_t>(begin_[1]) << 16) | 749 (static_cast<uint64_t>(begin_[2]) << 8) | 750 (static_cast<uint64_t>(begin_[3]) << 0); 751 begin_ += 4; 752 buffer_len_ += 32; 753 } Fill5()754 void Fill5() { 755 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 756 (static_cast<uint64_t>(begin_[1]) << 24) | 757 (static_cast<uint64_t>(begin_[2]) << 16) | 758 (static_cast<uint64_t>(begin_[3]) << 8) | 759 (static_cast<uint64_t>(begin_[4]) << 0); 760 begin_ += 5; 761 buffer_len_ += 40; 762 } Fill6()763 void Fill6() { 764 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 765 (static_cast<uint64_t>(begin_[1]) << 32) | 766 (static_cast<uint64_t>(begin_[2]) << 24) | 767 (static_cast<uint64_t>(begin_[3]) << 16) | 768 (static_cast<uint64_t>(begin_[4]) << 8) | 769 (static_cast<uint64_t>(begin_[5]) << 0); 770 begin_ += 6; 771 buffer_len_ += 48; 772 } Fill7()773 void Fill7() { 774 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 775 (static_cast<uint64_t>(begin_[1]) << 40) | 776 (static_cast<uint64_t>(begin_[2]) << 32) | 777 (static_cast<uint64_t>(begin_[3]) << 24) | 778 (static_cast<uint64_t>(begin_[4]) << 16) | 779 (static_cast<uint64_t>(begin_[5]) << 8) | 780 (static_cast<uint64_t>(begin_[6]) << 0); 781 begin_ += 7; 782 buffer_len_ += 56; 783 } Fill8()784 void Fill8() { 785 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 786 (static_cast<uint64_t>(begin_[1]) << 48) | 787 (static_cast<uint64_t>(begin_[2]) << 40) | 788 (static_cast<uint64_t>(begin_[3]) << 32) | 789 (static_cast<uint64_t>(begin_[4]) << 24) | 790 (static_cast<uint64_t>(begin_[5]) << 16) | 791 (static_cast<uint64_t>(begin_[6]) << 8) | 792 (static_cast<uint64_t>(begin_[7]) << 0); 793 begin_ += 8; 794 buffer_len_ += 64; 795 } Read1to7Bytes()796 bool Read1to7Bytes() { 797 switch (end_ - begin_) { 798 case 0: { 799 return false; 800 } 801 case 1: { 802 Fill1(); 803 return true; 804 } 805 case 2: { 806 Fill2(); 807 return true; 808 } 809 case 3: { 810 Fill3(); 811 return true; 812 } 813 case 4: { 814 Fill4(); 815 return true; 816 } 817 case 5: { 818 Fill5(); 819 return true; 820 } 821 case 6: { 822 Fill6(); 823 return true; 824 } 825 default: { 826 Fill7(); 827 return true; 828 } 829 } 830 } Done0()831 void Done0() { 832 done_ = true; 833 switch (end_ - begin_) {} 834 switch (buffer_len_) { 835 case 1: 836 case 2: 837 case 3: 838 case 4: { 839 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 840 return; 841 } 842 case 5: { 843 const auto index = buffer_ & 31; 844 const auto op = GetOp2(index); 845 switch (op & 3) { 846 case 0: { 847 sink_(GetEmit2(index, (op >> 2) + 0)); 848 break; 849 } 850 case 1: { 851 ok_ = false; 852 break; 853 } 854 } 855 return; 856 } 857 case 6: { 858 const auto index = buffer_ & 63; 859 const auto op = GetOp3(index); 860 switch (op & 3) { 861 case 0: { 862 ok_ = false; 863 break; 864 } 865 case 1: { 866 sink_(GetEmit3(index, (op >> 2) + 0)); 867 break; 868 } 869 } 870 return; 871 } 872 case 7: { 873 const auto index = buffer_ & 127; 874 const auto op = GetOp4(index); 875 switch (op & 3) { 876 case 0: { 877 ok_ = false; 878 break; 879 } 880 case 1: { 881 sink_(GetEmit4(index, (op >> 2) + 0)); 882 break; 883 } 884 } 885 return; 886 } 887 case 0: { 888 return; 889 } 890 } 891 } DecodeStep0()892 void DecodeStep0() { 893 if (!RefillTo2()) { 894 Done1(); 895 return; 896 } 897 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 898 const auto op = GetOp5(index); 899 const int consumed = op & 3; 900 buffer_len_ -= consumed; 901 const auto emit_ofs = op >> 2; 902 sink_(GetEmit5(index, emit_ofs + 0)); 903 } RefillTo2()904 bool RefillTo2() { 905 switch (buffer_len_) { 906 case 0: { 907 return Read1to8Bytes(); 908 } 909 case 1: { 910 return Read1to7Bytes(); 911 } 912 } 913 return true; 914 } Done1()915 void Done1() { 916 done_ = true; 917 switch (buffer_len_) { 918 case 1: 919 case 0: { 920 ok_ = false; 921 return; 922 } 923 } 924 } DecodeStep1()925 void DecodeStep1() { 926 if (!RefillTo14()) { 927 Done2(); 928 return; 929 } 930 const auto index = (buffer_ >> (buffer_len_ - 14)) & 0x3fff; 931 const auto op = GetOp6(index); 932 const int consumed = op & 15; 933 buffer_len_ -= consumed; 934 const auto emit_ofs = op >> 9; 935 switch ((op >> 4) & 31) { 936 case 0: { 937 sink_(GetEmit6(index, emit_ofs + 0)); 938 break; 939 } 940 case 1: { 941 DecodeStep2(); 942 break; 943 } 944 case 2: { 945 DecodeStep3(); 946 break; 947 } 948 case 3: { 949 DecodeStep4(); 950 break; 951 } 952 case 4: { 953 DecodeStep5(); 954 break; 955 } 956 case 5: { 957 DecodeStep6(); 958 break; 959 } 960 case 6: { 961 DecodeStep7(); 962 break; 963 } 964 case 7: { 965 DecodeStep8(); 966 break; 967 } 968 case 8: { 969 DecodeStep9(); 970 break; 971 } 972 case 9: { 973 DecodeStep10(); 974 break; 975 } 976 case 10: { 977 DecodeStep11(); 978 break; 979 } 980 case 11: { 981 DecodeStep12(); 982 break; 983 } 984 case 12: { 985 DecodeStep13(); 986 break; 987 } 988 case 13: { 989 DecodeStep14(); 990 break; 991 } 992 case 14: { 993 DecodeStep15(); 994 break; 995 } 996 case 15: { 997 DecodeStep19(); 998 break; 999 } 1000 case 16: { 1001 DecodeStep16(); 1002 break; 1003 } 1004 case 17: { 1005 DecodeStep17(); 1006 break; 1007 } 1008 case 18: { 1009 DecodeStep20(); 1010 break; 1011 } 1012 case 19: { 1013 DecodeStep18(); 1014 break; 1015 } 1016 case 20: { 1017 DecodeStep21(); 1018 break; 1019 } 1020 } 1021 } RefillTo14()1022 bool RefillTo14() { 1023 switch (buffer_len_) { 1024 case 0: { 1025 return Read2to8Bytes(); 1026 } 1027 case 1: 1028 case 2: 1029 case 3: 1030 case 4: 1031 case 5: { 1032 return Read2to7Bytes(); 1033 } 1034 case 6: 1035 case 7: 1036 case 8: { 1037 return Read1to7Bytes(); 1038 } 1039 case 9: 1040 case 10: 1041 case 11: 1042 case 12: 1043 case 13: { 1044 return Read1to6Bytes(); 1045 } 1046 } 1047 return true; 1048 } Read2to8Bytes()1049 bool Read2to8Bytes() { 1050 switch (end_ - begin_) { 1051 case 0: 1052 case 1: { 1053 return false; 1054 } 1055 case 2: { 1056 Fill2(); 1057 return true; 1058 } 1059 case 3: { 1060 Fill3(); 1061 return true; 1062 } 1063 case 4: { 1064 Fill4(); 1065 return true; 1066 } 1067 case 5: { 1068 Fill5(); 1069 return true; 1070 } 1071 case 6: { 1072 Fill6(); 1073 return true; 1074 } 1075 case 7: { 1076 Fill7(); 1077 return true; 1078 } 1079 default: { 1080 Fill8(); 1081 return true; 1082 } 1083 } 1084 } Read2to7Bytes()1085 bool Read2to7Bytes() { 1086 switch (end_ - begin_) { 1087 case 0: 1088 case 1: { 1089 return false; 1090 } 1091 case 2: { 1092 Fill2(); 1093 return true; 1094 } 1095 case 3: { 1096 Fill3(); 1097 return true; 1098 } 1099 case 4: { 1100 Fill4(); 1101 return true; 1102 } 1103 case 5: { 1104 Fill5(); 1105 return true; 1106 } 1107 case 6: { 1108 Fill6(); 1109 return true; 1110 } 1111 default: { 1112 Fill7(); 1113 return true; 1114 } 1115 } 1116 } Read1to6Bytes()1117 bool Read1to6Bytes() { 1118 switch (end_ - begin_) { 1119 case 0: { 1120 return false; 1121 } 1122 case 1: { 1123 Fill1(); 1124 return true; 1125 } 1126 case 2: { 1127 Fill2(); 1128 return true; 1129 } 1130 case 3: { 1131 Fill3(); 1132 return true; 1133 } 1134 case 4: { 1135 Fill4(); 1136 return true; 1137 } 1138 case 5: { 1139 Fill5(); 1140 return true; 1141 } 1142 default: { 1143 Fill6(); 1144 return true; 1145 } 1146 } 1147 } Done2()1148 void Done2() { 1149 done_ = true; 1150 switch (end_ - begin_) { 1151 case 1: { 1152 Fill1(); 1153 break; 1154 } 1155 } 1156 switch (buffer_len_) { 1157 case 1: { 1158 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1159 return; 1160 } 1161 case 2: { 1162 const auto index = buffer_ & 3; 1163 const auto op = GetOp7(index); 1164 switch (op & 3) { 1165 case 0: { 1166 sink_(GetEmit7(index, (op >> 2) + 0)); 1167 break; 1168 } 1169 case 1: { 1170 ok_ = false; 1171 break; 1172 } 1173 } 1174 return; 1175 } 1176 case 3: { 1177 const auto index = buffer_ & 7; 1178 const auto op = GetOp8(index); 1179 switch (op & 3) { 1180 case 0: { 1181 ok_ = false; 1182 break; 1183 } 1184 case 1: { 1185 sink_(GetEmit8(index, (op >> 2) + 0)); 1186 break; 1187 } 1188 } 1189 return; 1190 } 1191 case 4: { 1192 const auto index = buffer_ & 15; 1193 const auto op = GetOp9(index); 1194 switch (op & 3) { 1195 case 0: { 1196 ok_ = false; 1197 break; 1198 } 1199 case 1: { 1200 sink_(GetEmit9(index, (op >> 2) + 0)); 1201 break; 1202 } 1203 } 1204 return; 1205 } 1206 case 5: { 1207 const auto index = buffer_ & 31; 1208 const auto op = GetOp10(index); 1209 switch (op & 3) { 1210 case 0: { 1211 ok_ = false; 1212 break; 1213 } 1214 case 1: { 1215 sink_(GetEmit10(index, (op >> 2) + 0)); 1216 break; 1217 } 1218 } 1219 return; 1220 } 1221 case 6: { 1222 const auto index = buffer_ & 63; 1223 const auto op = GetOp11(index); 1224 switch (op & 3) { 1225 case 0: { 1226 ok_ = false; 1227 break; 1228 } 1229 case 1: { 1230 sink_(GetEmit11(index, (op >> 2) + 0)); 1231 break; 1232 } 1233 } 1234 return; 1235 } 1236 case 7: { 1237 const auto index = buffer_ & 127; 1238 const auto op = GetOp12(index); 1239 switch (op & 3) { 1240 case 0: { 1241 sink_(GetEmit12(index, (op >> 2) + 0)); 1242 sink_(GetEmit12(index, (op >> 2) + 1)); 1243 break; 1244 } 1245 case 1: { 1246 ok_ = false; 1247 break; 1248 } 1249 case 2: { 1250 sink_(GetEmit12(index, (op >> 2) + 0)); 1251 break; 1252 } 1253 } 1254 return; 1255 } 1256 case 8: { 1257 const auto index = buffer_ & 255; 1258 const auto op = GetOp13(index); 1259 switch (op & 3) { 1260 case 0: { 1261 ok_ = false; 1262 break; 1263 } 1264 case 1: { 1265 sink_(GetEmit13(index, (op >> 2) + 0)); 1266 sink_(GetEmit13(index, (op >> 2) + 1)); 1267 break; 1268 } 1269 case 2: { 1270 sink_(GetEmit13(index, (op >> 2) + 0)); 1271 break; 1272 } 1273 } 1274 return; 1275 } 1276 case 9: { 1277 const auto index = buffer_ & 511; 1278 const auto op = GetOp14(index); 1279 switch (op & 3) { 1280 case 0: { 1281 ok_ = false; 1282 break; 1283 } 1284 case 1: { 1285 sink_(GetEmit14(index, (op >> 2) + 0)); 1286 sink_(GetEmit14(index, (op >> 2) + 1)); 1287 break; 1288 } 1289 case 2: { 1290 sink_(GetEmit14(index, (op >> 2) + 0)); 1291 break; 1292 } 1293 } 1294 return; 1295 } 1296 case 10: { 1297 const auto index = buffer_ & 1023; 1298 const auto op = GetOp15(index); 1299 switch (op & 3) { 1300 case 0: { 1301 ok_ = false; 1302 break; 1303 } 1304 case 1: { 1305 sink_(GetEmit15(index, (op >> 2) + 0)); 1306 sink_(GetEmit15(index, (op >> 2) + 1)); 1307 break; 1308 } 1309 case 2: { 1310 sink_(GetEmit15(index, (op >> 2) + 0)); 1311 break; 1312 } 1313 } 1314 return; 1315 } 1316 case 11: { 1317 const auto index = buffer_ & 2047; 1318 const auto op = GetOp16(index); 1319 switch (op & 3) { 1320 case 0: { 1321 ok_ = false; 1322 break; 1323 } 1324 case 1: { 1325 sink_(GetEmit16(index, (op >> 2) + 0)); 1326 sink_(GetEmit16(index, (op >> 2) + 1)); 1327 break; 1328 } 1329 case 2: { 1330 sink_(GetEmit16(index, (op >> 2) + 0)); 1331 break; 1332 } 1333 } 1334 return; 1335 } 1336 case 12: { 1337 const auto index = buffer_ & 4095; 1338 const auto op = GetOp17(index); 1339 switch (op & 7) { 1340 case 0: { 1341 sink_(GetEmit17(index, (op >> 3) + 0)); 1342 sink_(GetEmit17(index, (op >> 3) + 1)); 1343 sink_(GetEmit17(index, (op >> 3) + 2)); 1344 break; 1345 } 1346 case 1: { 1347 ok_ = false; 1348 break; 1349 } 1350 case 2: { 1351 sink_(GetEmit17(index, (op >> 3) + 0)); 1352 sink_(GetEmit17(index, (op >> 3) + 1)); 1353 break; 1354 } 1355 case 3: { 1356 sink_(GetEmit17(index, (op >> 3) + 0)); 1357 break; 1358 } 1359 } 1360 return; 1361 } 1362 case 13: { 1363 const auto index = buffer_ & 8191; 1364 const auto op = GetOp18(index); 1365 switch (op & 7) { 1366 case 0: { 1367 ok_ = false; 1368 break; 1369 } 1370 case 1: { 1371 sink_(GetEmit18(index, (op >> 3) + 0)); 1372 sink_(GetEmit18(index, (op >> 3) + 1)); 1373 sink_(GetEmit18(index, (op >> 3) + 2)); 1374 break; 1375 } 1376 case 2: { 1377 sink_(GetEmit18(index, (op >> 3) + 0)); 1378 sink_(GetEmit18(index, (op >> 3) + 1)); 1379 break; 1380 } 1381 case 3: { 1382 sink_(GetEmit18(index, (op >> 3) + 0)); 1383 break; 1384 } 1385 } 1386 return; 1387 } 1388 case 0: { 1389 return; 1390 } 1391 } 1392 } DecodeStep2()1393 void DecodeStep2() { 1394 if (!RefillTo1()) { 1395 Done3(); 1396 return; 1397 } 1398 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1399 const auto op = GetOp19(index); 1400 const int consumed = op & 1; 1401 buffer_len_ -= consumed; 1402 const auto emit_ofs = op >> 1; 1403 sink_(GetEmit19(index, emit_ofs + 0)); 1404 } RefillTo1()1405 bool RefillTo1() { 1406 switch (buffer_len_) { 1407 case 0: { 1408 return Read1to8Bytes(); 1409 } 1410 } 1411 return true; 1412 } Done3()1413 void Done3() { 1414 done_ = true; 1415 ok_ = false; 1416 } DecodeStep3()1417 void DecodeStep3() { 1418 if (!RefillTo1()) { 1419 Done4(); 1420 return; 1421 } 1422 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1423 const auto op = GetOp20(index); 1424 const int consumed = op & 1; 1425 buffer_len_ -= consumed; 1426 const auto emit_ofs = op >> 1; 1427 sink_(GetEmit20(index, emit_ofs + 0)); 1428 } Done4()1429 void Done4() { 1430 done_ = true; 1431 ok_ = false; 1432 } DecodeStep4()1433 void DecodeStep4() { 1434 if (!RefillTo1()) { 1435 Done5(); 1436 return; 1437 } 1438 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1439 const auto op = GetOp21(index); 1440 const int consumed = op & 1; 1441 buffer_len_ -= consumed; 1442 const auto emit_ofs = op >> 1; 1443 sink_(GetEmit21(index, emit_ofs + 0)); 1444 } Done5()1445 void Done5() { 1446 done_ = true; 1447 ok_ = false; 1448 } DecodeStep5()1449 void DecodeStep5() { 1450 if (!RefillTo1()) { 1451 Done6(); 1452 return; 1453 } 1454 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1455 const auto op = GetOp22(index); 1456 const int consumed = op & 1; 1457 buffer_len_ -= consumed; 1458 const auto emit_ofs = op >> 1; 1459 sink_(GetEmit22(index, emit_ofs + 0)); 1460 } Done6()1461 void Done6() { 1462 done_ = true; 1463 ok_ = false; 1464 } DecodeStep6()1465 void DecodeStep6() { 1466 if (!RefillTo1()) { 1467 Done7(); 1468 return; 1469 } 1470 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1471 const auto op = GetOp23(index); 1472 const int consumed = op & 1; 1473 buffer_len_ -= consumed; 1474 const auto emit_ofs = op >> 1; 1475 sink_(GetEmit23(index, emit_ofs + 0)); 1476 } Done7()1477 void Done7() { 1478 done_ = true; 1479 ok_ = false; 1480 } DecodeStep7()1481 void DecodeStep7() { 1482 if (!RefillTo1()) { 1483 Done8(); 1484 return; 1485 } 1486 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1487 const auto op = GetOp24(index); 1488 const int consumed = op & 1; 1489 buffer_len_ -= consumed; 1490 const auto emit_ofs = op >> 1; 1491 sink_(GetEmit24(index, emit_ofs + 0)); 1492 } Done8()1493 void Done8() { 1494 done_ = true; 1495 ok_ = false; 1496 } DecodeStep8()1497 void DecodeStep8() { 1498 if (!RefillTo1()) { 1499 Done9(); 1500 return; 1501 } 1502 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1503 const auto op = GetOp25(index); 1504 const int consumed = op & 1; 1505 buffer_len_ -= consumed; 1506 const auto emit_ofs = op >> 1; 1507 sink_(GetEmit25(index, emit_ofs + 0)); 1508 } Done9()1509 void Done9() { 1510 done_ = true; 1511 ok_ = false; 1512 } DecodeStep9()1513 void DecodeStep9() { 1514 if (!RefillTo1()) { 1515 Done10(); 1516 return; 1517 } 1518 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1519 const auto op = GetOp26(index); 1520 const int consumed = op & 1; 1521 buffer_len_ -= consumed; 1522 const auto emit_ofs = op >> 1; 1523 sink_(GetEmit26(index, emit_ofs + 0)); 1524 } Done10()1525 void Done10() { 1526 done_ = true; 1527 ok_ = false; 1528 } DecodeStep10()1529 void DecodeStep10() { 1530 if (!RefillTo1()) { 1531 Done11(); 1532 return; 1533 } 1534 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1535 const auto op = GetOp27(index); 1536 const int consumed = op & 1; 1537 buffer_len_ -= consumed; 1538 const auto emit_ofs = op >> 1; 1539 sink_(GetEmit27(index, emit_ofs + 0)); 1540 } Done11()1541 void Done11() { 1542 done_ = true; 1543 ok_ = false; 1544 } DecodeStep11()1545 void DecodeStep11() { 1546 if (!RefillTo1()) { 1547 Done12(); 1548 return; 1549 } 1550 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1551 const auto op = GetOp28(index); 1552 const int consumed = op & 1; 1553 buffer_len_ -= consumed; 1554 const auto emit_ofs = op >> 1; 1555 sink_(GetEmit28(index, emit_ofs + 0)); 1556 } Done12()1557 void Done12() { 1558 done_ = true; 1559 ok_ = false; 1560 } DecodeStep12()1561 void DecodeStep12() { 1562 if (!RefillTo1()) { 1563 Done13(); 1564 return; 1565 } 1566 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1567 const auto op = GetOp29(index); 1568 const int consumed = op & 1; 1569 buffer_len_ -= consumed; 1570 const auto emit_ofs = op >> 1; 1571 sink_(GetEmit29(index, emit_ofs + 0)); 1572 } Done13()1573 void Done13() { 1574 done_ = true; 1575 ok_ = false; 1576 } DecodeStep13()1577 void DecodeStep13() { 1578 if (!RefillTo1()) { 1579 Done14(); 1580 return; 1581 } 1582 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1583 const auto op = GetOp30(index); 1584 const int consumed = op & 1; 1585 buffer_len_ -= consumed; 1586 const auto emit_ofs = op >> 1; 1587 sink_(GetEmit30(index, emit_ofs + 0)); 1588 } Done14()1589 void Done14() { 1590 done_ = true; 1591 ok_ = false; 1592 } DecodeStep14()1593 void DecodeStep14() { 1594 if (!RefillTo1()) { 1595 Done15(); 1596 return; 1597 } 1598 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1599 const auto op = GetOp31(index); 1600 const int consumed = op & 1; 1601 buffer_len_ -= consumed; 1602 const auto emit_ofs = op >> 1; 1603 sink_(GetEmit31(index, emit_ofs + 0)); 1604 } Done15()1605 void Done15() { 1606 done_ = true; 1607 ok_ = false; 1608 } DecodeStep15()1609 void DecodeStep15() { 1610 if (!RefillTo1()) { 1611 Done16(); 1612 return; 1613 } 1614 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1615 const auto op = GetOp32(index); 1616 const int consumed = op & 1; 1617 buffer_len_ -= consumed; 1618 const auto emit_ofs = op >> 1; 1619 sink_(GetEmit32(index, emit_ofs + 0)); 1620 } Done16()1621 void Done16() { 1622 done_ = true; 1623 ok_ = false; 1624 } DecodeStep16()1625 void DecodeStep16() { 1626 if (!RefillTo2()) { 1627 Done17(); 1628 return; 1629 } 1630 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1631 const auto op = GetOp33(index); 1632 const int consumed = op & 3; 1633 buffer_len_ -= consumed; 1634 const auto emit_ofs = op >> 2; 1635 sink_(GetEmit33(index, emit_ofs + 0)); 1636 } Done17()1637 void Done17() { 1638 done_ = true; 1639 switch (buffer_len_) { 1640 case 1: 1641 case 0: { 1642 ok_ = false; 1643 return; 1644 } 1645 } 1646 } DecodeStep17()1647 void DecodeStep17() { 1648 if (!RefillTo2()) { 1649 Done18(); 1650 return; 1651 } 1652 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1653 const auto op = GetOp34(index); 1654 const int consumed = op & 3; 1655 buffer_len_ -= consumed; 1656 const auto emit_ofs = op >> 2; 1657 sink_(GetEmit34(index, emit_ofs + 0)); 1658 } Done18()1659 void Done18() { 1660 done_ = true; 1661 switch (buffer_len_) { 1662 case 1: 1663 case 0: { 1664 ok_ = false; 1665 return; 1666 } 1667 } 1668 } DecodeStep18()1669 void DecodeStep18() { 1670 if (!RefillTo5()) { 1671 Done19(); 1672 return; 1673 } 1674 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 1675 const auto op = GetOp35(index); 1676 const int consumed = op & 7; 1677 buffer_len_ -= consumed; 1678 const auto emit_ofs = op >> 3; 1679 sink_(GetEmit35(index, emit_ofs + 0)); 1680 } RefillTo5()1681 bool RefillTo5() { 1682 switch (buffer_len_) { 1683 case 0: { 1684 return Read1to8Bytes(); 1685 } 1686 case 1: 1687 case 2: 1688 case 3: 1689 case 4: { 1690 return Read1to7Bytes(); 1691 } 1692 } 1693 return true; 1694 } Done19()1695 void Done19() { 1696 done_ = true; 1697 switch (buffer_len_) { 1698 case 1: 1699 case 2: 1700 case 3: 1701 case 0: { 1702 ok_ = false; 1703 return; 1704 } 1705 case 4: { 1706 const auto index = buffer_ & 15; 1707 const auto op = GetOp36(index); 1708 switch (op & 1) { 1709 case 0: { 1710 sink_(GetEmit36(index, (op >> 1) + 0)); 1711 break; 1712 } 1713 case 1: { 1714 ok_ = false; 1715 break; 1716 } 1717 } 1718 return; 1719 } 1720 } 1721 } DecodeStep19()1722 void DecodeStep19() { 1723 if (!RefillTo2()) { 1724 Done20(); 1725 return; 1726 } 1727 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1728 const auto op = GetOp37(index); 1729 const int consumed = op & 3; 1730 buffer_len_ -= consumed; 1731 const auto emit_ofs = op >> 2; 1732 sink_(GetEmit37(index, emit_ofs + 0)); 1733 } Done20()1734 void Done20() { 1735 done_ = true; 1736 switch (buffer_len_) { 1737 case 1: { 1738 const auto index = buffer_ & 1; 1739 const auto op = GetOp38(index); 1740 switch (op & 1) { 1741 case 0: { 1742 sink_(GetEmit38(index, (op >> 1) + 0)); 1743 break; 1744 } 1745 case 1: { 1746 ok_ = false; 1747 break; 1748 } 1749 } 1750 return; 1751 } 1752 case 0: { 1753 ok_ = false; 1754 return; 1755 } 1756 } 1757 } DecodeStep20()1758 void DecodeStep20() { 1759 if (!RefillTo3()) { 1760 Done21(); 1761 return; 1762 } 1763 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1764 const auto op = GetOp39(index); 1765 const int consumed = op & 3; 1766 buffer_len_ -= consumed; 1767 const auto emit_ofs = op >> 2; 1768 sink_(GetEmit39(index, emit_ofs + 0)); 1769 } RefillTo3()1770 bool RefillTo3() { 1771 switch (buffer_len_) { 1772 case 0: { 1773 return Read1to8Bytes(); 1774 } 1775 case 1: 1776 case 2: { 1777 return Read1to7Bytes(); 1778 } 1779 } 1780 return true; 1781 } Done21()1782 void Done21() { 1783 done_ = true; 1784 switch (buffer_len_) { 1785 case 1: 1786 case 0: { 1787 ok_ = false; 1788 return; 1789 } 1790 case 2: { 1791 const auto index = buffer_ & 3; 1792 const auto op = GetOp40(index); 1793 switch (op & 1) { 1794 case 0: { 1795 sink_(GetEmit40(index, (op >> 1) + 0)); 1796 break; 1797 } 1798 case 1: { 1799 ok_ = false; 1800 break; 1801 } 1802 } 1803 return; 1804 } 1805 } 1806 } DecodeStep21()1807 void DecodeStep21() { 1808 if (!RefillTo8()) { 1809 Done22(); 1810 return; 1811 } 1812 const auto index = (buffer_ >> (buffer_len_ - 8)) & 0xff; 1813 const auto op = GetOp41(index); 1814 const int consumed = op & 15; 1815 buffer_len_ -= consumed; 1816 const auto emit_ofs = op >> 5; 1817 switch ((op >> 4) & 1) { 1818 case 0: { 1819 sink_(GetEmit41(index, emit_ofs + 0)); 1820 break; 1821 } 1822 case 1: { 1823 begin_ = end_; 1824 buffer_len_ = 0; 1825 break; 1826 } 1827 } 1828 } Done22()1829 void Done22() { 1830 done_ = true; 1831 switch (end_ - begin_) {} 1832 switch (buffer_len_) { 1833 case 1: 1834 case 2: 1835 case 3: 1836 case 4: { 1837 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1838 return; 1839 } 1840 case 5: { 1841 const auto index = buffer_ & 31; 1842 const auto op = GetOp42(index); 1843 switch (op & 3) { 1844 case 0: { 1845 sink_(GetEmit42(index, (op >> 2) + 0)); 1846 break; 1847 } 1848 case 1: { 1849 ok_ = false; 1850 break; 1851 } 1852 } 1853 return; 1854 } 1855 case 6: { 1856 const auto index = buffer_ & 63; 1857 const auto op = GetOp43(index); 1858 switch (op & 3) { 1859 case 0: { 1860 ok_ = false; 1861 break; 1862 } 1863 case 1: { 1864 sink_(GetEmit43(index, (op >> 2) + 0)); 1865 break; 1866 } 1867 } 1868 return; 1869 } 1870 case 7: { 1871 const auto index = buffer_ & 127; 1872 const auto op = GetOp44(index); 1873 switch (op & 3) { 1874 case 0: { 1875 ok_ = false; 1876 break; 1877 } 1878 case 1: { 1879 sink_(GetEmit44(index, (op >> 2) + 0)); 1880 break; 1881 } 1882 } 1883 return; 1884 } 1885 case 0: { 1886 return; 1887 } 1888 } 1889 } 1890 F sink_; 1891 const uint8_t* begin_; 1892 const uint8_t* const end_; 1893 uint64_t buffer_ = 0; 1894 int buffer_len_ = 0; 1895 bool ok_ = true; 1896 bool done_ = false; 1897 }; 1898 } // namespace geometry_8_14_8 1899 } // namespace grpc_core 1900 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_8_14_8_H 1901