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_9_14_7_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_14_7_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_9_14_7 { 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 } GetOp5(size_t i)42 static inline uint64_t GetOp5(size_t i) { 43 return table5_ops_[i >> 7][i & 0x7f]; 44 } GetEmit5(size_t i,size_t emit)45 static inline uint64_t GetEmit5(size_t i, size_t emit) { 46 return table5_emit_[i >> 7][emit]; 47 } GetOp1(size_t i)48 static inline uint64_t GetOp1(size_t i) { 49 return table1_ops_[i >> 5][i & 0x1f]; 50 } GetEmit1(size_t i,size_t emit)51 static inline uint64_t GetEmit1(size_t i, size_t emit) { 52 return table1_emit_[i >> 5][emit]; 53 } GetOp6(size_t i)54 static inline uint64_t GetOp6(size_t i) { return i ? 3 : 1; } GetEmit6(size_t,size_t emit)55 static inline uint64_t GetEmit6(size_t, size_t emit) { return emit + 33; } GetOp7(size_t i)56 static inline uint64_t GetOp7(size_t i) { return i ? 3 : 1; } GetEmit7(size_t,size_t emit)57 static inline uint64_t GetEmit7(size_t, size_t emit) { return emit + 40; } GetOp9(size_t i)58 static inline uint64_t GetOp9(size_t i) { return i; } GetEmit9(size_t,size_t emit)59 static inline uint64_t GetEmit9(size_t, size_t emit) { 60 return ((void)emit, 63); 61 } GetOp8(size_t i)62 static inline uint64_t GetOp8(size_t i) { 63 return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1 64 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1)) 65 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6)); 66 } GetEmit8(size_t,size_t emit)67 static inline uint64_t GetEmit8(size_t, size_t emit) { 68 return (emit < 1 ? (((void)emit, 63)) : ((emit - 1) ? 43 : 39)); 69 } GetOp11(size_t i)70 static inline uint64_t GetOp11(size_t i) { 71 return (i < 2 ? (i) : ((i - 2) + 1)); 72 } GetEmit11(size_t,size_t emit)73 static inline uint64_t GetEmit11(size_t, size_t emit) { 74 return ((void)emit, 124); 75 } GetOp12(size_t i)76 static inline uint64_t GetOp12(size_t i) { 77 return table12_0_inner_[table12_0_outer_[i]]; 78 } GetEmit12(size_t,size_t emit)79 static inline uint64_t GetEmit12(size_t, size_t emit) { 80 return (emit < 1 ? (((void)emit, 124)) : ((emit - 1) ? 62 : 35)); 81 } GetOp13(size_t i)82 static inline uint64_t GetOp13(size_t i) { 83 return table13_0_inner_[table13_0_outer_[i]]; 84 } GetEmit13(size_t,size_t emit)85 static inline uint64_t GetEmit13(size_t, size_t emit) { 86 return table13_0_emit_[emit]; 87 } GetOp14(size_t i)88 static inline uint64_t GetOp14(size_t i) { return table14_0_ops_[i]; } GetEmit14(size_t,size_t emit)89 static inline uint64_t GetEmit14(size_t, size_t emit) { 90 return table14_0_emit_[emit]; 91 } GetOp15(size_t i)92 static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; } GetEmit15(size_t,size_t emit)93 static inline uint64_t GetEmit15(size_t, size_t emit) { 94 return table15_0_emit_[emit]; 95 } GetOp16(size_t i)96 static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; } GetEmit16(size_t,size_t emit)97 static inline uint64_t GetEmit16(size_t, size_t emit) { 98 return table16_0_emit_[emit]; 99 } GetOp17(size_t i)100 static inline uint64_t GetOp17(size_t i) { 101 return table17_ops_[i >> 5][i & 0x1f]; 102 } GetEmit17(size_t i,size_t emit)103 static inline uint64_t GetEmit17(size_t i, size_t emit) { 104 return table17_emit_[i >> 5][emit]; 105 } GetOp18(size_t i)106 static inline uint64_t GetOp18(size_t i) { 107 return table18_ops_[i >> 6][i & 0x3f]; 108 } GetEmit18(size_t i,size_t emit)109 static inline uint64_t GetEmit18(size_t i, size_t emit) { 110 return table18_emit_[i >> 6][emit]; 111 } GetOp19(size_t i)112 static inline uint64_t GetOp19(size_t i) { 113 return table19_ops_[i >> 6][i & 0x3f]; 114 } GetEmit19(size_t i,size_t emit)115 static inline uint64_t GetEmit19(size_t i, size_t emit) { 116 return table19_emit_[i >> 6][emit]; 117 } GetOp20(size_t i)118 static inline uint64_t GetOp20(size_t i) { 119 return table20_ops_[i >> 6][i & 0x3f]; 120 } GetEmit20(size_t i,size_t emit)121 static inline uint64_t GetEmit20(size_t i, size_t emit) { 122 return table20_emit_[i >> 6][emit]; 123 } GetOp21(size_t i)124 static inline uint64_t GetOp21(size_t i) { 125 return table21_ops_[i >> 6][i & 0x3f]; 126 } GetEmit21(size_t i,size_t emit)127 static inline uint64_t GetEmit21(size_t i, size_t emit) { 128 return table21_emit_[i >> 6][emit]; 129 } GetOp22(size_t i)130 static inline uint64_t GetOp22(size_t i) { 131 return table22_ops_[i >> 6][i & 0x3f]; 132 } GetEmit22(size_t i,size_t emit)133 static inline uint64_t GetEmit22(size_t i, size_t emit) { 134 return table22_emit_[i >> 6][emit]; 135 } GetOp10(size_t i)136 static inline uint64_t GetOp10(size_t i) { 137 return table10_ops_[i >> 8][i & 0xff]; 138 } GetEmit10(size_t i,size_t emit)139 static inline uint64_t GetEmit10(size_t i, size_t emit) { 140 return table10_emit_[i >> 8][emit]; 141 } GetOp23(size_t i)142 static inline uint64_t GetOp23(size_t i) { return i ? 3 : 1; } GetEmit23(size_t,size_t emit)143 static inline uint64_t GetEmit23(size_t, size_t emit) { 144 return emit ? 142 : 9; 145 } GetOp24(size_t i)146 static inline uint64_t GetOp24(size_t i) { return i ? 3 : 1; } GetEmit24(size_t,size_t emit)147 static inline uint64_t GetEmit24(size_t, size_t emit) { return emit + 144; } GetOp25(size_t i)148 static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; } GetEmit25(size_t,size_t emit)149 static inline uint64_t GetEmit25(size_t, size_t emit) { 150 return emit ? 159 : 148; 151 } GetOp26(size_t i)152 static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; } GetEmit26(size_t,size_t emit)153 static inline uint64_t GetEmit26(size_t, size_t emit) { 154 return emit ? 206 : 171; 155 } GetOp27(size_t i)156 static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; } GetEmit27(size_t,size_t emit)157 static inline uint64_t GetEmit27(size_t, size_t emit) { 158 return emit ? 225 : 215; 159 } GetOp28(size_t i)160 static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; } GetEmit28(size_t,size_t emit)161 static inline uint64_t GetEmit28(size_t, size_t emit) { return emit + 236; } GetOp29(size_t i)162 static inline uint64_t GetOp29(size_t i) { 163 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 164 } GetEmit29(size_t,size_t emit)165 static inline uint64_t GetEmit29(size_t, size_t emit) { 166 return (emit < 2 ? (emit ? 207 : 199) : ((emit - 2) + 234)); 167 } GetOp30(size_t i)168 static inline uint64_t GetOp30(size_t i) { return table30_0_inner_[i]; } GetEmit30(size_t,size_t emit)169 static inline uint64_t GetEmit30(size_t, size_t emit) { 170 return table30_0_emit_[emit]; 171 } GetOp31(size_t i)172 static inline uint64_t GetOp31(size_t i) { return table31_0_inner_[i]; } GetEmit31(size_t,size_t emit)173 static inline uint64_t GetEmit31(size_t, size_t emit) { 174 return table31_0_emit_[emit]; 175 } GetOp33(size_t i)176 static inline uint64_t GetOp33(size_t i) { 177 return (i < 1 ? (((void)i, 0)) : ((i - 1) / 14 + 1)); 178 } GetEmit33(size_t,size_t emit)179 static inline uint64_t GetEmit33(size_t, size_t emit) { 180 return ((void)emit, 254); 181 } GetOp34(size_t i)182 static inline uint64_t GetOp34(size_t i) { return table34_0_ops_[i]; } GetEmit34(size_t,size_t emit)183 static inline uint64_t GetEmit34(size_t, size_t emit) { 184 return table34_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 table34_0_emit_[emit]; 189 } GetOp32(size_t i)190 static inline uint64_t GetOp32(size_t i) { 191 return table32_ops_[i >> 5][i & 0x1f]; 192 } GetEmit32(size_t i,size_t emit)193 static inline uint64_t GetEmit32(size_t i, size_t emit) { 194 return table32_emit_[i >> 5][emit]; 195 } GetOp37(size_t i)196 static inline uint64_t GetOp37(size_t i) { return table37_0_inner_[i]; } GetEmit37(size_t,size_t emit)197 static inline uint64_t GetEmit37(size_t, size_t emit) { 198 return table37_0_emit_[emit]; 199 } GetOp36(size_t i)200 static inline uint64_t GetOp36(size_t i) { 201 return table36_0_inner_[(i < 13 ? (i / 2 + 0) : ((i - 13) + 6))]; 202 } GetEmit36(size_t,size_t emit)203 static inline uint64_t GetEmit36(size_t, size_t emit) { 204 return table36_0_emit_[emit]; 205 } 206 207 private: 208 static const uint8_t table2_0_emit_[10]; 209 static const uint8_t table2_0_ops_[32]; 210 static const uint8_t table3_0_emit_[36]; 211 static const uint8_t table3_0_ops_[64]; 212 static const uint8_t table4_0_emit_[22]; 213 static const uint8_t table4_0_ops_[64]; 214 static const uint8_t table4_1_emit_[46]; 215 static const uint8_t table4_1_ops_[64]; 216 static const uint8_t* const table4_emit_[2]; 217 static const uint8_t* const table4_ops_[2]; 218 static const uint8_t table5_0_ops_[128]; 219 static const uint8_t table5_1_emit_[52]; 220 static const uint8_t table5_1_ops_[128]; 221 static const uint8_t* const table5_emit_[2]; 222 static const uint8_t* const table5_ops_[2]; 223 static const uint8_t table1_0_emit_[2]; 224 static const uint16_t table1_0_ops_[32]; 225 static const uint8_t table1_1_emit_[2]; 226 static const uint8_t table1_2_emit_[2]; 227 static const uint8_t table1_3_emit_[2]; 228 static const uint8_t table1_4_emit_[2]; 229 static const uint8_t table1_5_emit_[4]; 230 static const uint16_t table1_5_ops_[32]; 231 static const uint8_t table1_6_emit_[4]; 232 static const uint8_t table1_7_emit_[4]; 233 static const uint8_t table1_8_emit_[4]; 234 static const uint8_t table1_9_emit_[4]; 235 static const uint8_t table1_10_emit_[4]; 236 static const uint8_t table1_11_emit_[6]; 237 static const uint16_t table1_11_ops_[32]; 238 static const uint8_t table1_12_emit_[8]; 239 static const uint16_t table1_12_ops_[32]; 240 static const uint8_t table1_13_emit_[8]; 241 static const uint8_t table1_14_emit_[8]; 242 static const uint8_t table1_15_emit_[10]; 243 static const uint16_t table1_15_ops_[32]; 244 static const uint8_t* const table1_emit_[16]; 245 static const uint16_t* const table1_ops_[16]; 246 static const uint8_t table12_0_inner_[5]; 247 static const uint8_t table12_0_outer_[8]; 248 static const uint8_t table13_0_emit_[9]; 249 static const uint8_t table13_0_inner_[11]; 250 static const uint8_t table13_0_outer_[16]; 251 static const uint8_t table14_0_emit_[11]; 252 static const uint8_t table14_0_ops_[32]; 253 static const uint8_t table15_0_emit_[14]; 254 static const uint8_t table15_0_ops_[64]; 255 static const uint8_t table16_0_emit_[33]; 256 static const uint8_t table16_0_ops_[128]; 257 static const uint8_t table17_0_emit_[44]; 258 static const uint8_t table17_0_ops_[32]; 259 static const uint8_t table17_1_emit_[28]; 260 static const uint8_t table17_1_ops_[32]; 261 static const uint8_t table17_2_emit_[20]; 262 static const uint8_t table17_2_ops_[32]; 263 static const uint8_t table17_3_emit_[20]; 264 static const uint8_t table17_4_emit_[2]; 265 static const uint8_t table17_4_ops_[32]; 266 static const uint8_t table17_5_emit_[2]; 267 static const uint8_t table17_6_emit_[2]; 268 static const uint8_t table17_7_emit_[5]; 269 static const uint8_t table17_7_ops_[32]; 270 static const uint8_t* const table17_emit_[8]; 271 static const uint8_t* const table17_ops_[8]; 272 static const uint16_t table18_0_ops_[64]; 273 static const uint8_t table18_1_emit_[92]; 274 static const uint16_t table18_1_ops_[64]; 275 static const uint8_t table18_2_emit_[72]; 276 static const uint16_t table18_2_ops_[64]; 277 static const uint8_t table18_3_emit_[72]; 278 static const uint8_t table18_4_emit_[40]; 279 static const uint16_t table18_4_ops_[64]; 280 static const uint8_t table18_5_emit_[40]; 281 static const uint8_t table18_6_emit_[40]; 282 static const uint16_t table18_7_ops_[64]; 283 static const uint8_t* const table18_emit_[8]; 284 static const uint16_t* const table18_ops_[8]; 285 static const uint8_t table19_0_emit_[16]; 286 static const uint16_t table19_0_ops_[64]; 287 static const uint8_t table19_1_emit_[28]; 288 static const uint16_t table19_1_ops_[64]; 289 static const uint8_t table19_2_emit_[36]; 290 static const uint16_t table19_2_ops_[64]; 291 static const uint8_t table19_3_emit_[68]; 292 static const uint16_t table19_3_ops_[64]; 293 static const uint8_t table19_4_emit_[44]; 294 static const uint8_t table19_5_emit_[92]; 295 static const uint8_t table19_6_emit_[44]; 296 static const uint8_t table19_7_emit_[92]; 297 static const uint8_t table19_8_emit_[72]; 298 static const uint8_t table19_9_emit_[72]; 299 static const uint8_t table19_10_emit_[72]; 300 static const uint8_t table19_11_emit_[72]; 301 static const uint8_t table19_12_emit_[72]; 302 static const uint8_t table19_13_emit_[72]; 303 static const uint8_t table19_14_emit_[40]; 304 static const uint8_t table19_15_emit_[6]; 305 static const uint16_t table19_15_ops_[64]; 306 static const uint8_t* const table19_emit_[16]; 307 static const uint16_t* const table19_ops_[16]; 308 static const uint8_t table20_0_emit_[8]; 309 static const uint16_t table20_0_ops_[64]; 310 static const uint8_t table20_1_emit_[8]; 311 static const uint8_t table20_2_emit_[12]; 312 static const uint16_t table20_2_ops_[64]; 313 static const uint8_t table20_3_emit_[16]; 314 static const uint8_t table20_4_emit_[16]; 315 static const uint8_t table20_5_emit_[20]; 316 static const uint16_t table20_5_ops_[64]; 317 static const uint8_t table20_6_emit_[32]; 318 static const uint16_t table20_6_ops_[64]; 319 static const uint8_t table20_7_emit_[36]; 320 static const uint16_t table20_7_ops_[64]; 321 static const uint8_t table20_8_emit_[16]; 322 static const uint8_t table20_9_emit_[28]; 323 static const uint8_t table20_10_emit_[36]; 324 static const uint8_t table20_11_emit_[68]; 325 static const uint8_t table20_12_emit_[16]; 326 static const uint8_t table20_13_emit_[28]; 327 static const uint8_t table20_14_emit_[36]; 328 static const uint8_t table20_15_emit_[68]; 329 static const uint8_t table20_16_emit_[44]; 330 static const uint8_t table20_17_emit_[92]; 331 static const uint8_t table20_18_emit_[44]; 332 static const uint8_t table20_19_emit_[92]; 333 static const uint8_t table20_20_emit_[44]; 334 static const uint8_t table20_21_emit_[92]; 335 static const uint8_t table20_22_emit_[44]; 336 static const uint8_t table20_23_emit_[92]; 337 static const uint8_t table20_24_emit_[44]; 338 static const uint8_t table20_25_emit_[92]; 339 static const uint8_t table20_26_emit_[44]; 340 static const uint8_t table20_27_emit_[92]; 341 static const uint8_t table20_28_emit_[72]; 342 static const uint8_t table20_29_emit_[72]; 343 static const uint8_t table20_30_emit_[40]; 344 static const uint8_t table20_31_emit_[31]; 345 static const uint16_t table20_31_ops_[64]; 346 static const uint8_t* const table20_emit_[32]; 347 static const uint16_t* const table20_ops_[32]; 348 static const uint8_t table21_0_emit_[60]; 349 static const uint16_t table21_0_ops_[64]; 350 static const uint8_t table21_1_emit_[60]; 351 static const uint8_t table21_2_emit_[60]; 352 static const uint8_t table21_3_emit_[60]; 353 static const uint8_t table21_4_emit_[60]; 354 static const uint8_t table21_5_emit_[8]; 355 static const uint16_t table21_5_ops_[64]; 356 static const uint8_t table21_6_emit_[8]; 357 static const uint8_t table21_7_emit_[8]; 358 static const uint8_t table21_8_emit_[8]; 359 static const uint8_t table21_9_emit_[8]; 360 static const uint8_t table21_10_emit_[8]; 361 static const uint8_t table21_11_emit_[12]; 362 static const uint16_t table21_11_ops_[64]; 363 static const uint8_t table21_12_emit_[16]; 364 static const uint16_t table21_12_ops_[64]; 365 static const uint8_t table21_13_emit_[16]; 366 static const uint8_t table21_14_emit_[16]; 367 static const uint8_t table21_15_emit_[30]; 368 static const uint16_t table21_15_ops_[64]; 369 static const uint8_t table21_16_emit_[8]; 370 static const uint8_t table21_17_emit_[8]; 371 static const uint8_t table21_18_emit_[12]; 372 static const uint8_t table21_19_emit_[16]; 373 static const uint8_t table21_20_emit_[16]; 374 static const uint8_t table21_21_emit_[20]; 375 static const uint16_t table21_21_ops_[64]; 376 static const uint8_t table21_22_emit_[32]; 377 static const uint16_t table21_22_ops_[64]; 378 static const uint8_t table21_23_emit_[36]; 379 static const uint16_t table21_23_ops_[64]; 380 static const uint8_t table21_24_emit_[8]; 381 static const uint8_t table21_25_emit_[8]; 382 static const uint8_t table21_26_emit_[12]; 383 static const uint8_t table21_27_emit_[16]; 384 static const uint8_t table21_28_emit_[16]; 385 static const uint8_t table21_29_emit_[20]; 386 static const uint8_t table21_30_emit_[32]; 387 static const uint8_t table21_31_emit_[36]; 388 static const uint8_t table21_32_emit_[16]; 389 static const uint8_t table21_33_emit_[28]; 390 static const uint16_t table21_33_ops_[64]; 391 static const uint8_t table21_34_emit_[36]; 392 static const uint16_t table21_34_ops_[64]; 393 static const uint8_t table21_35_emit_[68]; 394 static const uint16_t table21_35_ops_[64]; 395 static const uint8_t table21_36_emit_[16]; 396 static const uint8_t table21_37_emit_[28]; 397 static const uint8_t table21_38_emit_[36]; 398 static const uint8_t table21_39_emit_[68]; 399 static const uint8_t table21_40_emit_[16]; 400 static const uint8_t table21_41_emit_[28]; 401 static const uint8_t table21_42_emit_[36]; 402 static const uint8_t table21_43_emit_[68]; 403 static const uint8_t table21_44_emit_[16]; 404 static const uint8_t table21_45_emit_[28]; 405 static const uint8_t table21_46_emit_[36]; 406 static const uint8_t table21_47_emit_[68]; 407 static const uint8_t table21_48_emit_[16]; 408 static const uint8_t table21_49_emit_[28]; 409 static const uint8_t table21_50_emit_[36]; 410 static const uint8_t table21_51_emit_[68]; 411 static const uint8_t table21_52_emit_[16]; 412 static const uint8_t table21_53_emit_[28]; 413 static const uint8_t table21_54_emit_[36]; 414 static const uint8_t table21_55_emit_[68]; 415 static const uint8_t table21_56_emit_[44]; 416 static const uint16_t table21_56_ops_[64]; 417 static const uint8_t table21_57_emit_[92]; 418 static const uint16_t table21_57_ops_[64]; 419 static const uint8_t table21_58_emit_[44]; 420 static const uint8_t table21_59_emit_[92]; 421 static const uint8_t table21_60_emit_[72]; 422 static const uint16_t table21_60_ops_[64]; 423 static const uint8_t table21_61_emit_[72]; 424 static const uint8_t table21_62_emit_[72]; 425 static const uint8_t table21_63_emit_[24]; 426 static const uint16_t table21_63_ops_[64]; 427 static const uint8_t* const table21_emit_[64]; 428 static const uint16_t* const table21_ops_[64]; 429 static const uint8_t table22_0_emit_[108]; 430 static const uint16_t table22_0_ops_[64]; 431 static const uint8_t table22_1_emit_[108]; 432 static const uint8_t table22_2_emit_[108]; 433 static const uint8_t table22_3_emit_[108]; 434 static const uint8_t table22_4_emit_[108]; 435 static const uint8_t table22_5_emit_[108]; 436 static const uint8_t table22_6_emit_[108]; 437 static const uint8_t table22_7_emit_[108]; 438 static const uint8_t table22_8_emit_[108]; 439 static const uint8_t table22_9_emit_[108]; 440 static const uint8_t table22_10_emit_[60]; 441 static const uint16_t table22_10_ops_[64]; 442 static const uint8_t table22_11_emit_[60]; 443 static const uint8_t table22_12_emit_[60]; 444 static const uint8_t table22_13_emit_[60]; 445 static const uint8_t table22_14_emit_[60]; 446 static const uint8_t table22_15_emit_[60]; 447 static const uint8_t table22_16_emit_[60]; 448 static const uint8_t table22_17_emit_[60]; 449 static const uint8_t table22_18_emit_[60]; 450 static const uint8_t table22_19_emit_[60]; 451 static const uint8_t table22_20_emit_[60]; 452 static const uint8_t table22_21_emit_[60]; 453 static const uint8_t table22_22_emit_[60]; 454 static const uint8_t table22_23_emit_[8]; 455 static const uint16_t table22_23_ops_[64]; 456 static const uint8_t table22_24_emit_[8]; 457 static const uint8_t table22_25_emit_[8]; 458 static const uint8_t table22_26_emit_[8]; 459 static const uint8_t table22_27_emit_[8]; 460 static const uint8_t table22_28_emit_[8]; 461 static const uint8_t table22_29_emit_[8]; 462 static const uint8_t table22_30_emit_[8]; 463 static const uint8_t table22_31_emit_[28]; 464 static const uint16_t table22_31_ops_[64]; 465 static const uint8_t table22_32_emit_[60]; 466 static const uint8_t table22_33_emit_[60]; 467 static const uint8_t table22_34_emit_[60]; 468 static const uint8_t table22_35_emit_[60]; 469 static const uint8_t table22_36_emit_[60]; 470 static const uint8_t table22_37_emit_[8]; 471 static const uint8_t table22_38_emit_[8]; 472 static const uint8_t table22_39_emit_[8]; 473 static const uint8_t table22_40_emit_[8]; 474 static const uint8_t table22_41_emit_[8]; 475 static const uint8_t table22_42_emit_[8]; 476 static const uint8_t table22_43_emit_[12]; 477 static const uint16_t table22_43_ops_[64]; 478 static const uint8_t table22_44_emit_[16]; 479 static const uint16_t table22_44_ops_[64]; 480 static const uint8_t table22_45_emit_[16]; 481 static const uint8_t table22_46_emit_[16]; 482 static const uint8_t table22_47_emit_[30]; 483 static const uint16_t table22_47_ops_[64]; 484 static const uint8_t table22_48_emit_[60]; 485 static const uint8_t table22_49_emit_[60]; 486 static const uint8_t table22_50_emit_[60]; 487 static const uint8_t table22_51_emit_[60]; 488 static const uint8_t table22_52_emit_[60]; 489 static const uint8_t table22_53_emit_[8]; 490 static const uint8_t table22_54_emit_[8]; 491 static const uint8_t table22_55_emit_[8]; 492 static const uint8_t table22_56_emit_[8]; 493 static const uint8_t table22_57_emit_[8]; 494 static const uint8_t table22_58_emit_[8]; 495 static const uint8_t table22_59_emit_[12]; 496 static const uint8_t table22_60_emit_[16]; 497 static const uint8_t table22_61_emit_[16]; 498 static const uint8_t table22_62_emit_[16]; 499 static const uint8_t table22_63_emit_[30]; 500 static const uint8_t table22_64_emit_[8]; 501 static const uint8_t table22_65_emit_[8]; 502 static const uint8_t table22_66_emit_[12]; 503 static const uint8_t table22_67_emit_[16]; 504 static const uint8_t table22_68_emit_[16]; 505 static const uint8_t table22_69_emit_[20]; 506 static const uint16_t table22_69_ops_[64]; 507 static const uint8_t table22_70_emit_[32]; 508 static const uint16_t table22_70_ops_[64]; 509 static const uint8_t table22_71_emit_[36]; 510 static const uint16_t table22_71_ops_[64]; 511 static const uint8_t table22_72_emit_[8]; 512 static const uint8_t table22_73_emit_[8]; 513 static const uint8_t table22_74_emit_[12]; 514 static const uint8_t table22_75_emit_[16]; 515 static const uint8_t table22_76_emit_[16]; 516 static const uint8_t table22_77_emit_[20]; 517 static const uint8_t table22_78_emit_[32]; 518 static const uint8_t table22_79_emit_[36]; 519 static const uint8_t table22_80_emit_[8]; 520 static const uint8_t table22_81_emit_[8]; 521 static const uint8_t table22_82_emit_[12]; 522 static const uint8_t table22_83_emit_[16]; 523 static const uint8_t table22_84_emit_[16]; 524 static const uint8_t table22_85_emit_[20]; 525 static const uint8_t table22_86_emit_[32]; 526 static const uint8_t table22_87_emit_[36]; 527 static const uint8_t table22_88_emit_[8]; 528 static const uint8_t table22_89_emit_[8]; 529 static const uint8_t table22_90_emit_[12]; 530 static const uint8_t table22_91_emit_[16]; 531 static const uint8_t table22_92_emit_[16]; 532 static const uint8_t table22_93_emit_[20]; 533 static const uint8_t table22_94_emit_[32]; 534 static const uint8_t table22_95_emit_[36]; 535 static const uint8_t table22_96_emit_[8]; 536 static const uint8_t table22_97_emit_[8]; 537 static const uint8_t table22_98_emit_[12]; 538 static const uint8_t table22_99_emit_[16]; 539 static const uint8_t table22_100_emit_[16]; 540 static const uint8_t table22_101_emit_[20]; 541 static const uint8_t table22_102_emit_[32]; 542 static const uint8_t table22_103_emit_[36]; 543 static const uint8_t table22_104_emit_[8]; 544 static const uint8_t table22_105_emit_[8]; 545 static const uint8_t table22_106_emit_[12]; 546 static const uint8_t table22_107_emit_[16]; 547 static const uint8_t table22_108_emit_[16]; 548 static const uint8_t table22_109_emit_[20]; 549 static const uint8_t table22_110_emit_[32]; 550 static const uint8_t table22_111_emit_[36]; 551 static const uint8_t table22_112_emit_[16]; 552 static const uint8_t table22_113_emit_[28]; 553 static const uint16_t table22_113_ops_[64]; 554 static const uint8_t table22_114_emit_[36]; 555 static const uint16_t table22_114_ops_[64]; 556 static const uint8_t table22_115_emit_[68]; 557 static const uint16_t table22_115_ops_[64]; 558 static const uint8_t table22_116_emit_[16]; 559 static const uint8_t table22_117_emit_[28]; 560 static const uint8_t table22_118_emit_[36]; 561 static const uint8_t table22_119_emit_[68]; 562 static const uint8_t table22_120_emit_[44]; 563 static const uint16_t table22_120_ops_[64]; 564 static const uint8_t table22_121_emit_[92]; 565 static const uint16_t table22_121_ops_[64]; 566 static const uint8_t table22_122_emit_[44]; 567 static const uint8_t table22_123_emit_[92]; 568 static const uint8_t table22_124_emit_[44]; 569 static const uint8_t table22_125_emit_[92]; 570 static const uint8_t table22_126_emit_[15]; 571 static const uint16_t table22_126_ops_[64]; 572 static const uint8_t table22_127_emit_[35]; 573 static const uint16_t table22_127_ops_[64]; 574 static const uint8_t* const table22_emit_[128]; 575 static const uint16_t* const table22_ops_[128]; 576 static const uint8_t table10_0_emit_[1]; 577 static const uint16_t table10_0_ops_[256]; 578 static const uint8_t table10_16_emit_[1]; 579 static const uint16_t table10_16_ops_[256]; 580 static const uint8_t table10_24_emit_[1]; 581 static const uint8_t table10_32_emit_[1]; 582 static const uint16_t table10_32_ops_[256]; 583 static const uint8_t table10_36_emit_[1]; 584 static const uint8_t table10_40_emit_[1]; 585 static const uint8_t table10_44_emit_[1]; 586 static const uint8_t table10_48_emit_[1]; 587 static const uint8_t table10_52_emit_[1]; 588 static const uint8_t table10_56_emit_[1]; 589 static const uint16_t table10_56_ops_[256]; 590 static const uint8_t table10_58_emit_[1]; 591 static const uint8_t table10_60_emit_[1]; 592 static const uint16_t table10_60_ops_[256]; 593 static const uint8_t table10_61_emit_[1]; 594 static const uint8_t table10_62_emit_[1]; 595 static const uint8_t table10_63_emit_[79]; 596 static const uint16_t table10_63_ops_[256]; 597 static const uint8_t* const table10_emit_[64]; 598 static const uint16_t* const table10_ops_[64]; 599 static const uint8_t table30_0_emit_[8]; 600 static const uint8_t table30_0_inner_[8]; 601 static const uint8_t table31_0_emit_[16]; 602 static const uint8_t table31_0_inner_[16]; 603 static const uint8_t table34_0_emit_[30]; 604 static const uint8_t table34_0_ops_[32]; 605 static const uint8_t table35_0_ops_[64]; 606 static const uint8_t table32_0_emit_[7]; 607 static const uint8_t table32_0_ops_[32]; 608 static const uint8_t table32_1_emit_[8]; 609 static const uint8_t table32_1_ops_[32]; 610 static const uint8_t table32_2_emit_[8]; 611 static const uint8_t table32_3_emit_[10]; 612 static const uint8_t table32_3_ops_[32]; 613 static const uint8_t* const table32_emit_[4]; 614 static const uint8_t* const table32_ops_[4]; 615 static const uint8_t table37_0_emit_[7]; 616 static const uint8_t table37_0_inner_[8]; 617 static const uint8_t table36_0_emit_[9]; 618 static const uint8_t table36_0_inner_[9]; 619 }; 620 template <typename F> 621 class HuffDecoder : public HuffDecoderCommon { 622 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)623 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 624 : sink_(sink), begin_(begin), end_(end) {} Run()625 bool Run() { 626 while (!done_) { 627 if (!RefillTo9()) { 628 Done0(); 629 break; 630 } 631 const auto index = (buffer_ >> (buffer_len_ - 9)) & 0x1ff; 632 const auto op = GetOp1(index); 633 const int consumed = op & 15; 634 buffer_len_ -= consumed; 635 const auto emit_ofs = op >> 7; 636 switch ((op >> 4) & 7) { 637 case 0: { 638 sink_(GetEmit1(index, emit_ofs + 0)); 639 break; 640 } 641 case 1: { 642 DecodeStep0(); 643 break; 644 } 645 case 2: { 646 DecodeStep1(); 647 break; 648 } 649 case 3: { 650 DecodeStep2(); 651 break; 652 } 653 case 4: { 654 DecodeStep3(); 655 break; 656 } 657 } 658 } 659 return ok_; 660 } 661 662 private: RefillTo9()663 bool RefillTo9() { 664 switch (buffer_len_) { 665 case 0: { 666 return Read2to8Bytes(); 667 } 668 case 1: 669 case 2: 670 case 3: 671 case 4: 672 case 5: 673 case 6: 674 case 7: 675 case 8: { 676 return Read1to7Bytes(); 677 } 678 } 679 return true; 680 } Read2to8Bytes()681 bool Read2to8Bytes() { 682 switch (end_ - begin_) { 683 case 0: 684 case 1: { 685 return false; 686 } 687 case 2: { 688 Fill2(); 689 return true; 690 } 691 case 3: { 692 Fill3(); 693 return true; 694 } 695 case 4: { 696 Fill4(); 697 return true; 698 } 699 case 5: { 700 Fill5(); 701 return true; 702 } 703 case 6: { 704 Fill6(); 705 return true; 706 } 707 case 7: { 708 Fill7(); 709 return true; 710 } 711 default: { 712 Fill8(); 713 return true; 714 } 715 } 716 } Fill2()717 void Fill2() { 718 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 719 (static_cast<uint64_t>(begin_[1]) << 0); 720 begin_ += 2; 721 buffer_len_ += 16; 722 } Fill3()723 void Fill3() { 724 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 725 (static_cast<uint64_t>(begin_[1]) << 8) | 726 (static_cast<uint64_t>(begin_[2]) << 0); 727 begin_ += 3; 728 buffer_len_ += 24; 729 } Fill4()730 void Fill4() { 731 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 732 (static_cast<uint64_t>(begin_[1]) << 16) | 733 (static_cast<uint64_t>(begin_[2]) << 8) | 734 (static_cast<uint64_t>(begin_[3]) << 0); 735 begin_ += 4; 736 buffer_len_ += 32; 737 } Fill5()738 void Fill5() { 739 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 740 (static_cast<uint64_t>(begin_[1]) << 24) | 741 (static_cast<uint64_t>(begin_[2]) << 16) | 742 (static_cast<uint64_t>(begin_[3]) << 8) | 743 (static_cast<uint64_t>(begin_[4]) << 0); 744 begin_ += 5; 745 buffer_len_ += 40; 746 } Fill6()747 void Fill6() { 748 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 749 (static_cast<uint64_t>(begin_[1]) << 32) | 750 (static_cast<uint64_t>(begin_[2]) << 24) | 751 (static_cast<uint64_t>(begin_[3]) << 16) | 752 (static_cast<uint64_t>(begin_[4]) << 8) | 753 (static_cast<uint64_t>(begin_[5]) << 0); 754 begin_ += 6; 755 buffer_len_ += 48; 756 } Fill7()757 void Fill7() { 758 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 759 (static_cast<uint64_t>(begin_[1]) << 40) | 760 (static_cast<uint64_t>(begin_[2]) << 32) | 761 (static_cast<uint64_t>(begin_[3]) << 24) | 762 (static_cast<uint64_t>(begin_[4]) << 16) | 763 (static_cast<uint64_t>(begin_[5]) << 8) | 764 (static_cast<uint64_t>(begin_[6]) << 0); 765 begin_ += 7; 766 buffer_len_ += 56; 767 } Fill8()768 void Fill8() { 769 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 770 (static_cast<uint64_t>(begin_[1]) << 48) | 771 (static_cast<uint64_t>(begin_[2]) << 40) | 772 (static_cast<uint64_t>(begin_[3]) << 32) | 773 (static_cast<uint64_t>(begin_[4]) << 24) | 774 (static_cast<uint64_t>(begin_[5]) << 16) | 775 (static_cast<uint64_t>(begin_[6]) << 8) | 776 (static_cast<uint64_t>(begin_[7]) << 0); 777 begin_ += 8; 778 buffer_len_ += 64; 779 } Read1to7Bytes()780 bool Read1to7Bytes() { 781 switch (end_ - begin_) { 782 case 0: { 783 return false; 784 } 785 case 1: { 786 Fill1(); 787 return true; 788 } 789 case 2: { 790 Fill2(); 791 return true; 792 } 793 case 3: { 794 Fill3(); 795 return true; 796 } 797 case 4: { 798 Fill4(); 799 return true; 800 } 801 case 5: { 802 Fill5(); 803 return true; 804 } 805 case 6: { 806 Fill6(); 807 return true; 808 } 809 default: { 810 Fill7(); 811 return true; 812 } 813 } 814 } Fill1()815 void Fill1() { 816 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 817 begin_ += 1; 818 buffer_len_ += 8; 819 } Done0()820 void Done0() { 821 done_ = true; 822 switch (end_ - begin_) { 823 case 1: { 824 Fill1(); 825 break; 826 } 827 } 828 switch (buffer_len_) { 829 case 1: 830 case 2: 831 case 3: 832 case 4: { 833 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 834 return; 835 } 836 case 5: { 837 const auto index = buffer_ & 31; 838 const auto op = GetOp2(index); 839 switch (op & 3) { 840 case 0: { 841 sink_(GetEmit2(index, (op >> 2) + 0)); 842 break; 843 } 844 case 1: { 845 ok_ = false; 846 break; 847 } 848 } 849 return; 850 } 851 case 6: { 852 const auto index = buffer_ & 63; 853 const auto op = GetOp3(index); 854 switch (op & 3) { 855 case 0: { 856 ok_ = false; 857 break; 858 } 859 case 1: { 860 sink_(GetEmit3(index, (op >> 2) + 0)); 861 break; 862 } 863 } 864 return; 865 } 866 case 7: { 867 const auto index = buffer_ & 127; 868 const auto op = GetOp4(index); 869 switch (op & 3) { 870 case 0: { 871 ok_ = false; 872 break; 873 } 874 case 1: { 875 sink_(GetEmit4(index, (op >> 2) + 0)); 876 break; 877 } 878 } 879 return; 880 } 881 case 8: { 882 const auto index = buffer_ & 255; 883 const auto op = GetOp5(index); 884 switch (op & 3) { 885 case 0: { 886 ok_ = false; 887 break; 888 } 889 case 1: { 890 sink_(GetEmit5(index, (op >> 2) + 0)); 891 break; 892 } 893 } 894 return; 895 } 896 case 0: { 897 return; 898 } 899 } 900 } DecodeStep0()901 void DecodeStep0() { 902 if (!RefillTo1()) { 903 Done1(); 904 return; 905 } 906 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 907 const auto op = GetOp6(index); 908 const int consumed = op & 1; 909 buffer_len_ -= consumed; 910 const auto emit_ofs = op >> 1; 911 sink_(GetEmit6(index, emit_ofs + 0)); 912 } RefillTo1()913 bool RefillTo1() { 914 switch (buffer_len_) { 915 case 0: { 916 return Read1to8Bytes(); 917 } 918 } 919 return true; 920 } Read1to8Bytes()921 bool Read1to8Bytes() { 922 switch (end_ - begin_) { 923 case 0: { 924 return false; 925 } 926 case 1: { 927 Fill1(); 928 return true; 929 } 930 case 2: { 931 Fill2(); 932 return true; 933 } 934 case 3: { 935 Fill3(); 936 return true; 937 } 938 case 4: { 939 Fill4(); 940 return true; 941 } 942 case 5: { 943 Fill5(); 944 return true; 945 } 946 case 6: { 947 Fill6(); 948 return true; 949 } 950 case 7: { 951 Fill7(); 952 return true; 953 } 954 default: { 955 Fill8(); 956 return true; 957 } 958 } 959 } Done1()960 void Done1() { 961 done_ = true; 962 ok_ = false; 963 } DecodeStep1()964 void DecodeStep1() { 965 if (!RefillTo1()) { 966 Done2(); 967 return; 968 } 969 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 970 const auto op = GetOp7(index); 971 const int consumed = op & 1; 972 buffer_len_ -= consumed; 973 const auto emit_ofs = op >> 1; 974 sink_(GetEmit7(index, emit_ofs + 0)); 975 } Done2()976 void Done2() { 977 done_ = true; 978 ok_ = false; 979 } DecodeStep2()980 void DecodeStep2() { 981 if (!RefillTo2()) { 982 Done3(); 983 return; 984 } 985 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 986 const auto op = GetOp8(index); 987 const int consumed = op & 3; 988 buffer_len_ -= consumed; 989 const auto emit_ofs = op >> 2; 990 sink_(GetEmit8(index, emit_ofs + 0)); 991 } RefillTo2()992 bool RefillTo2() { 993 switch (buffer_len_) { 994 case 0: { 995 return Read1to8Bytes(); 996 } 997 case 1: { 998 return Read1to7Bytes(); 999 } 1000 } 1001 return true; 1002 } Done3()1003 void Done3() { 1004 done_ = true; 1005 switch (buffer_len_) { 1006 case 1: { 1007 const auto index = buffer_ & 1; 1008 const auto op = GetOp9(index); 1009 switch (op & 1) { 1010 case 0: { 1011 sink_(GetEmit9(index, (op >> 1) + 0)); 1012 break; 1013 } 1014 case 1: { 1015 ok_ = false; 1016 break; 1017 } 1018 } 1019 return; 1020 } 1021 case 0: { 1022 ok_ = false; 1023 return; 1024 } 1025 } 1026 } DecodeStep3()1027 void DecodeStep3() { 1028 if (!RefillTo14()) { 1029 Done4(); 1030 return; 1031 } 1032 const auto index = (buffer_ >> (buffer_len_ - 14)) & 0x3fff; 1033 const auto op = GetOp10(index); 1034 const int consumed = op & 15; 1035 buffer_len_ -= consumed; 1036 const auto emit_ofs = op >> 8; 1037 switch ((op >> 4) & 15) { 1038 case 0: { 1039 sink_(GetEmit10(index, emit_ofs + 0)); 1040 break; 1041 } 1042 case 1: { 1043 DecodeStep4(); 1044 break; 1045 } 1046 case 2: { 1047 DecodeStep5(); 1048 break; 1049 } 1050 case 3: { 1051 DecodeStep6(); 1052 break; 1053 } 1054 case 4: { 1055 DecodeStep7(); 1056 break; 1057 } 1058 case 5: { 1059 DecodeStep8(); 1060 break; 1061 } 1062 case 6: { 1063 DecodeStep9(); 1064 break; 1065 } 1066 case 7: { 1067 DecodeStep10(); 1068 break; 1069 } 1070 case 8: { 1071 DecodeStep11(); 1072 break; 1073 } 1074 case 9: { 1075 DecodeStep14(); 1076 break; 1077 } 1078 case 10: { 1079 DecodeStep12(); 1080 break; 1081 } 1082 case 11: { 1083 DecodeStep13(); 1084 break; 1085 } 1086 } 1087 } RefillTo14()1088 bool RefillTo14() { 1089 switch (buffer_len_) { 1090 case 0: { 1091 return Read2to8Bytes(); 1092 } 1093 case 1: 1094 case 2: 1095 case 3: 1096 case 4: 1097 case 5: { 1098 return Read2to7Bytes(); 1099 } 1100 case 6: 1101 case 7: 1102 case 8: { 1103 return Read1to7Bytes(); 1104 } 1105 case 9: 1106 case 10: 1107 case 11: 1108 case 12: 1109 case 13: { 1110 return Read1to6Bytes(); 1111 } 1112 } 1113 return true; 1114 } Read2to7Bytes()1115 bool Read2to7Bytes() { 1116 switch (end_ - begin_) { 1117 case 0: 1118 case 1: { 1119 return false; 1120 } 1121 case 2: { 1122 Fill2(); 1123 return true; 1124 } 1125 case 3: { 1126 Fill3(); 1127 return true; 1128 } 1129 case 4: { 1130 Fill4(); 1131 return true; 1132 } 1133 case 5: { 1134 Fill5(); 1135 return true; 1136 } 1137 case 6: { 1138 Fill6(); 1139 return true; 1140 } 1141 default: { 1142 Fill7(); 1143 return true; 1144 } 1145 } 1146 } Read1to6Bytes()1147 bool Read1to6Bytes() { 1148 switch (end_ - begin_) { 1149 case 0: { 1150 return false; 1151 } 1152 case 1: { 1153 Fill1(); 1154 return true; 1155 } 1156 case 2: { 1157 Fill2(); 1158 return true; 1159 } 1160 case 3: { 1161 Fill3(); 1162 return true; 1163 } 1164 case 4: { 1165 Fill4(); 1166 return true; 1167 } 1168 case 5: { 1169 Fill5(); 1170 return true; 1171 } 1172 default: { 1173 Fill6(); 1174 return true; 1175 } 1176 } 1177 } Done4()1178 void Done4() { 1179 done_ = true; 1180 switch (end_ - begin_) { 1181 case 1: { 1182 Fill1(); 1183 break; 1184 } 1185 } 1186 switch (buffer_len_) { 1187 case 1: { 1188 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1189 return; 1190 } 1191 case 2: { 1192 const auto index = buffer_ & 3; 1193 const auto op = GetOp11(index); 1194 switch (op & 3) { 1195 case 0: { 1196 sink_(GetEmit11(index, (op >> 2) + 0)); 1197 break; 1198 } 1199 case 1: { 1200 ok_ = false; 1201 break; 1202 } 1203 } 1204 return; 1205 } 1206 case 3: { 1207 const auto index = buffer_ & 7; 1208 const auto op = GetOp12(index); 1209 switch (op & 3) { 1210 case 0: { 1211 ok_ = false; 1212 break; 1213 } 1214 case 1: { 1215 sink_(GetEmit12(index, (op >> 2) + 0)); 1216 break; 1217 } 1218 } 1219 return; 1220 } 1221 case 4: { 1222 const auto index = buffer_ & 15; 1223 const auto op = GetOp13(index); 1224 switch (op & 3) { 1225 case 0: { 1226 ok_ = false; 1227 break; 1228 } 1229 case 1: { 1230 sink_(GetEmit13(index, (op >> 2) + 0)); 1231 break; 1232 } 1233 } 1234 return; 1235 } 1236 case 5: { 1237 const auto index = buffer_ & 31; 1238 const auto op = GetOp14(index); 1239 switch (op & 3) { 1240 case 0: { 1241 ok_ = false; 1242 break; 1243 } 1244 case 1: { 1245 sink_(GetEmit14(index, (op >> 2) + 0)); 1246 break; 1247 } 1248 } 1249 return; 1250 } 1251 case 6: { 1252 const auto index = buffer_ & 63; 1253 const auto op = GetOp15(index); 1254 switch (op & 3) { 1255 case 0: { 1256 ok_ = false; 1257 break; 1258 } 1259 case 1: { 1260 sink_(GetEmit15(index, (op >> 2) + 0)); 1261 break; 1262 } 1263 } 1264 return; 1265 } 1266 case 7: { 1267 const auto index = buffer_ & 127; 1268 const auto op = GetOp16(index); 1269 switch (op & 3) { 1270 case 0: { 1271 sink_(GetEmit16(index, (op >> 2) + 0)); 1272 sink_(GetEmit16(index, (op >> 2) + 1)); 1273 break; 1274 } 1275 case 1: { 1276 ok_ = false; 1277 break; 1278 } 1279 case 2: { 1280 sink_(GetEmit16(index, (op >> 2) + 0)); 1281 break; 1282 } 1283 } 1284 return; 1285 } 1286 case 8: { 1287 const auto index = buffer_ & 255; 1288 const auto op = GetOp17(index); 1289 switch (op & 3) { 1290 case 0: { 1291 ok_ = false; 1292 break; 1293 } 1294 case 1: { 1295 sink_(GetEmit17(index, (op >> 2) + 0)); 1296 sink_(GetEmit17(index, (op >> 2) + 1)); 1297 break; 1298 } 1299 case 2: { 1300 sink_(GetEmit17(index, (op >> 2) + 0)); 1301 break; 1302 } 1303 } 1304 return; 1305 } 1306 case 9: { 1307 const auto index = buffer_ & 511; 1308 const auto op = GetOp18(index); 1309 switch (op & 3) { 1310 case 0: { 1311 ok_ = false; 1312 break; 1313 } 1314 case 1: { 1315 sink_(GetEmit18(index, (op >> 2) + 0)); 1316 sink_(GetEmit18(index, (op >> 2) + 1)); 1317 break; 1318 } 1319 case 2: { 1320 sink_(GetEmit18(index, (op >> 2) + 0)); 1321 break; 1322 } 1323 } 1324 return; 1325 } 1326 case 10: { 1327 const auto index = buffer_ & 1023; 1328 const auto op = GetOp19(index); 1329 switch (op & 3) { 1330 case 0: { 1331 ok_ = false; 1332 break; 1333 } 1334 case 1: { 1335 sink_(GetEmit19(index, (op >> 2) + 0)); 1336 sink_(GetEmit19(index, (op >> 2) + 1)); 1337 break; 1338 } 1339 case 2: { 1340 sink_(GetEmit19(index, (op >> 2) + 0)); 1341 break; 1342 } 1343 } 1344 return; 1345 } 1346 case 11: { 1347 const auto index = buffer_ & 2047; 1348 const auto op = GetOp20(index); 1349 switch (op & 3) { 1350 case 0: { 1351 ok_ = false; 1352 break; 1353 } 1354 case 1: { 1355 sink_(GetEmit20(index, (op >> 2) + 0)); 1356 sink_(GetEmit20(index, (op >> 2) + 1)); 1357 break; 1358 } 1359 case 2: { 1360 sink_(GetEmit20(index, (op >> 2) + 0)); 1361 break; 1362 } 1363 } 1364 return; 1365 } 1366 case 12: { 1367 const auto index = buffer_ & 4095; 1368 const auto op = GetOp21(index); 1369 switch (op & 7) { 1370 case 0: { 1371 sink_(GetEmit21(index, (op >> 3) + 0)); 1372 sink_(GetEmit21(index, (op >> 3) + 1)); 1373 sink_(GetEmit21(index, (op >> 3) + 2)); 1374 break; 1375 } 1376 case 1: { 1377 ok_ = false; 1378 break; 1379 } 1380 case 2: { 1381 sink_(GetEmit21(index, (op >> 3) + 0)); 1382 sink_(GetEmit21(index, (op >> 3) + 1)); 1383 break; 1384 } 1385 case 3: { 1386 sink_(GetEmit21(index, (op >> 3) + 0)); 1387 break; 1388 } 1389 } 1390 return; 1391 } 1392 case 13: { 1393 const auto index = buffer_ & 8191; 1394 const auto op = GetOp22(index); 1395 switch (op & 7) { 1396 case 0: { 1397 ok_ = false; 1398 break; 1399 } 1400 case 1: { 1401 sink_(GetEmit22(index, (op >> 3) + 0)); 1402 sink_(GetEmit22(index, (op >> 3) + 1)); 1403 sink_(GetEmit22(index, (op >> 3) + 2)); 1404 break; 1405 } 1406 case 2: { 1407 sink_(GetEmit22(index, (op >> 3) + 0)); 1408 sink_(GetEmit22(index, (op >> 3) + 1)); 1409 break; 1410 } 1411 case 3: { 1412 sink_(GetEmit22(index, (op >> 3) + 0)); 1413 break; 1414 } 1415 } 1416 return; 1417 } 1418 case 0: { 1419 return; 1420 } 1421 } 1422 } DecodeStep4()1423 void DecodeStep4() { 1424 if (!RefillTo1()) { 1425 Done5(); 1426 return; 1427 } 1428 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1429 const auto op = GetOp23(index); 1430 const int consumed = op & 1; 1431 buffer_len_ -= consumed; 1432 const auto emit_ofs = op >> 1; 1433 sink_(GetEmit23(index, emit_ofs + 0)); 1434 } Done5()1435 void Done5() { 1436 done_ = true; 1437 ok_ = false; 1438 } DecodeStep5()1439 void DecodeStep5() { 1440 if (!RefillTo1()) { 1441 Done6(); 1442 return; 1443 } 1444 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1445 const auto op = GetOp24(index); 1446 const int consumed = op & 1; 1447 buffer_len_ -= consumed; 1448 const auto emit_ofs = op >> 1; 1449 sink_(GetEmit24(index, emit_ofs + 0)); 1450 } Done6()1451 void Done6() { 1452 done_ = true; 1453 ok_ = false; 1454 } DecodeStep6()1455 void DecodeStep6() { 1456 if (!RefillTo1()) { 1457 Done7(); 1458 return; 1459 } 1460 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1461 const auto op = GetOp25(index); 1462 const int consumed = op & 1; 1463 buffer_len_ -= consumed; 1464 const auto emit_ofs = op >> 1; 1465 sink_(GetEmit25(index, emit_ofs + 0)); 1466 } Done7()1467 void Done7() { 1468 done_ = true; 1469 ok_ = false; 1470 } DecodeStep7()1471 void DecodeStep7() { 1472 if (!RefillTo1()) { 1473 Done8(); 1474 return; 1475 } 1476 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1477 const auto op = GetOp26(index); 1478 const int consumed = op & 1; 1479 buffer_len_ -= consumed; 1480 const auto emit_ofs = op >> 1; 1481 sink_(GetEmit26(index, emit_ofs + 0)); 1482 } Done8()1483 void Done8() { 1484 done_ = true; 1485 ok_ = false; 1486 } DecodeStep8()1487 void DecodeStep8() { 1488 if (!RefillTo1()) { 1489 Done9(); 1490 return; 1491 } 1492 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1493 const auto op = GetOp27(index); 1494 const int consumed = op & 1; 1495 buffer_len_ -= consumed; 1496 const auto emit_ofs = op >> 1; 1497 sink_(GetEmit27(index, emit_ofs + 0)); 1498 } Done9()1499 void Done9() { 1500 done_ = true; 1501 ok_ = false; 1502 } DecodeStep9()1503 void DecodeStep9() { 1504 if (!RefillTo1()) { 1505 Done10(); 1506 return; 1507 } 1508 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1509 const auto op = GetOp28(index); 1510 const int consumed = op & 1; 1511 buffer_len_ -= consumed; 1512 const auto emit_ofs = op >> 1; 1513 sink_(GetEmit28(index, emit_ofs + 0)); 1514 } Done10()1515 void Done10() { 1516 done_ = true; 1517 ok_ = false; 1518 } DecodeStep10()1519 void DecodeStep10() { 1520 if (!RefillTo2()) { 1521 Done11(); 1522 return; 1523 } 1524 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1525 const auto op = GetOp29(index); 1526 const int consumed = op & 3; 1527 buffer_len_ -= consumed; 1528 const auto emit_ofs = op >> 2; 1529 sink_(GetEmit29(index, emit_ofs + 0)); 1530 } Done11()1531 void Done11() { 1532 done_ = true; 1533 switch (buffer_len_) { 1534 case 1: 1535 case 0: { 1536 ok_ = false; 1537 return; 1538 } 1539 } 1540 } DecodeStep11()1541 void DecodeStep11() { 1542 if (!RefillTo3()) { 1543 Done12(); 1544 return; 1545 } 1546 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1547 const auto op = GetOp30(index); 1548 const int consumed = op & 3; 1549 buffer_len_ -= consumed; 1550 const auto emit_ofs = op >> 2; 1551 sink_(GetEmit30(index, emit_ofs + 0)); 1552 } RefillTo3()1553 bool RefillTo3() { 1554 switch (buffer_len_) { 1555 case 0: { 1556 return Read1to8Bytes(); 1557 } 1558 case 1: 1559 case 2: { 1560 return Read1to7Bytes(); 1561 } 1562 } 1563 return true; 1564 } Done12()1565 void Done12() { 1566 done_ = true; 1567 switch (buffer_len_) { 1568 case 1: 1569 case 2: 1570 case 0: { 1571 ok_ = false; 1572 return; 1573 } 1574 } 1575 } DecodeStep12()1576 void DecodeStep12() { 1577 if (!RefillTo4()) { 1578 Done13(); 1579 return; 1580 } 1581 const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf; 1582 const auto op = GetOp31(index); 1583 const int consumed = op & 7; 1584 buffer_len_ -= consumed; 1585 const auto emit_ofs = op >> 3; 1586 sink_(GetEmit31(index, emit_ofs + 0)); 1587 } RefillTo4()1588 bool RefillTo4() { 1589 switch (buffer_len_) { 1590 case 0: { 1591 return Read1to8Bytes(); 1592 } 1593 case 1: 1594 case 2: 1595 case 3: { 1596 return Read1to7Bytes(); 1597 } 1598 } 1599 return true; 1600 } Done13()1601 void Done13() { 1602 done_ = true; 1603 switch (buffer_len_) { 1604 case 1: 1605 case 2: 1606 case 3: 1607 case 0: { 1608 ok_ = false; 1609 return; 1610 } 1611 } 1612 } DecodeStep13()1613 void DecodeStep13() { 1614 if (!RefillTo7()) { 1615 Done14(); 1616 return; 1617 } 1618 const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f; 1619 const auto op = GetOp32(index); 1620 const int consumed = op & 7; 1621 buffer_len_ -= consumed; 1622 const auto emit_ofs = op >> 4; 1623 switch ((op >> 3) & 1) { 1624 case 0: { 1625 sink_(GetEmit32(index, emit_ofs + 0)); 1626 break; 1627 } 1628 case 1: { 1629 begin_ = end_; 1630 buffer_len_ = 0; 1631 break; 1632 } 1633 } 1634 } RefillTo7()1635 bool RefillTo7() { 1636 switch (buffer_len_) { 1637 case 0: { 1638 return Read1to8Bytes(); 1639 } 1640 case 1: 1641 case 2: 1642 case 3: 1643 case 4: 1644 case 5: 1645 case 6: { 1646 return Read1to7Bytes(); 1647 } 1648 } 1649 return true; 1650 } Done14()1651 void Done14() { 1652 done_ = true; 1653 switch (buffer_len_) { 1654 case 1: 1655 case 2: 1656 case 3: { 1657 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1658 return; 1659 } 1660 case 4: { 1661 const auto index = buffer_ & 15; 1662 const auto op = GetOp33(index); 1663 switch (op & 3) { 1664 case 0: { 1665 sink_(GetEmit33(index, (op >> 2) + 0)); 1666 break; 1667 } 1668 case 1: { 1669 ok_ = false; 1670 break; 1671 } 1672 } 1673 return; 1674 } 1675 case 5: { 1676 const auto index = buffer_ & 31; 1677 const auto op = GetOp34(index); 1678 switch (op & 3) { 1679 case 0: { 1680 ok_ = false; 1681 break; 1682 } 1683 case 1: { 1684 sink_(GetEmit34(index, (op >> 2) + 0)); 1685 break; 1686 } 1687 } 1688 return; 1689 } 1690 case 6: { 1691 const auto index = buffer_ & 63; 1692 const auto op = GetOp35(index); 1693 switch (op & 3) { 1694 case 0: { 1695 ok_ = false; 1696 break; 1697 } 1698 case 1: { 1699 sink_(GetEmit35(index, (op >> 2) + 0)); 1700 break; 1701 } 1702 } 1703 return; 1704 } 1705 case 0: { 1706 return; 1707 } 1708 } 1709 } DecodeStep14()1710 void DecodeStep14() { 1711 if (!RefillTo4()) { 1712 Done15(); 1713 return; 1714 } 1715 const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf; 1716 const auto op = GetOp36(index); 1717 const int consumed = op & 7; 1718 buffer_len_ -= consumed; 1719 const auto emit_ofs = op >> 3; 1720 sink_(GetEmit36(index, emit_ofs + 0)); 1721 } Done15()1722 void Done15() { 1723 done_ = true; 1724 switch (buffer_len_) { 1725 case 1: 1726 case 2: 1727 case 0: { 1728 ok_ = false; 1729 return; 1730 } 1731 case 3: { 1732 const auto index = buffer_ & 7; 1733 const auto op = GetOp37(index); 1734 switch (op & 1) { 1735 case 0: { 1736 sink_(GetEmit37(index, (op >> 1) + 0)); 1737 break; 1738 } 1739 case 1: { 1740 ok_ = false; 1741 break; 1742 } 1743 } 1744 return; 1745 } 1746 } 1747 } 1748 F sink_; 1749 const uint8_t* begin_; 1750 const uint8_t* const end_; 1751 uint64_t buffer_ = 0; 1752 int buffer_len_ = 0; 1753 bool ok_ = true; 1754 bool done_ = false; 1755 }; 1756 } // namespace geometry_9_14_7 1757 } // namespace grpc_core 1758 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_14_7_H 1759