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_11_10_9_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_10_9_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_11_10_9 { 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 } GetOp6(size_t i)48 static inline uint64_t GetOp6(size_t i) { 49 return table6_ops_[i >> 5][i & 0x1f]; 50 } GetEmit6(size_t i,size_t emit)51 static inline uint64_t GetEmit6(size_t i, size_t emit) { 52 return table6_emit_[i >> 5][emit]; 53 } GetOp7(size_t i)54 static inline uint64_t GetOp7(size_t i) { 55 return table7_ops_[i >> 6][i & 0x3f]; 56 } GetEmit7(size_t i,size_t emit)57 static inline uint64_t GetEmit7(size_t i, size_t emit) { 58 return table7_emit_[i >> 6][emit]; 59 } GetOp1(size_t i)60 static inline uint64_t GetOp1(size_t i) { 61 return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]]; 62 } GetEmit1(size_t i,size_t emit)63 static inline uint64_t GetEmit1(size_t i, size_t emit) { 64 return table1_emit_[i >> 6][emit]; 65 } GetOp8(size_t i)66 static inline uint64_t GetOp8(size_t i) { return i ? 3 : 1; } GetEmit8(size_t,size_t emit)67 static inline uint64_t GetEmit8(size_t, size_t emit) { 68 return emit ? 62 : 35; 69 } GetOp9(size_t i)70 static inline uint64_t GetOp9(size_t i) { 71 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 72 } GetEmit9(size_t,size_t emit)73 static inline uint64_t GetEmit9(size_t, size_t emit) { 74 return (emit < 2 ? (emit ? 36 : 0) : ((emit - 2) ? 91 : 64)); 75 } GetOp11(size_t i)76 static inline uint64_t GetOp11(size_t i) { 77 return (i < 2 ? (i ? 4 : 0) : ((i - 2) + 1)); 78 } GetEmit11(size_t,size_t emit)79 static inline uint64_t GetEmit11(size_t, size_t emit) { 80 return emit ? 126 : 93; 81 } GetOp12(size_t i)82 static inline uint64_t GetOp12(size_t i) { 83 return table12_0_inner_[table12_0_outer_[i]]; 84 } GetEmit12(size_t,size_t emit)85 static inline uint64_t GetEmit12(size_t, size_t emit) { 86 return (emit < 2 ? (emit ? 126 : 93) : ((emit - 2) ? 125 : 94)); 87 } GetOp13(size_t i)88 static inline uint64_t GetOp13(size_t i) { 89 return table13_0_inner_[table13_0_outer_[i]]; 90 } GetEmit13(size_t,size_t emit)91 static inline uint64_t GetEmit13(size_t, size_t emit) { 92 return table13_0_emit_[emit]; 93 } GetOp14(size_t i)94 static inline uint64_t GetOp14(size_t i) { return table14_0_ops_[i]; } GetEmit14(size_t,size_t emit)95 static inline uint64_t GetEmit14(size_t, size_t emit) { 96 return table13_0_emit_[emit]; 97 } GetOp15(size_t i)98 static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; } GetEmit15(size_t,size_t emit)99 static inline uint64_t GetEmit15(size_t, size_t emit) { 100 return table13_0_emit_[emit]; 101 } GetOp16(size_t i)102 static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; } GetEmit16(size_t,size_t emit)103 static inline uint64_t GetEmit16(size_t, size_t emit) { 104 return table16_0_emit_[emit]; 105 } GetOp17(size_t i)106 static inline uint64_t GetOp17(size_t i) { 107 return table17_ops_[i >> 6][i & 0x3f]; 108 } GetEmit17(size_t i,size_t emit)109 static inline uint64_t GetEmit17(size_t i, size_t emit) { 110 return table17_emit_[i >> 6][emit]; 111 } GetOp18(size_t i)112 static inline uint64_t GetOp18(size_t i) { 113 return table18_ops_[i >> 6][i & 0x3f]; 114 } GetEmit18(size_t i,size_t emit)115 static inline uint64_t GetEmit18(size_t i, size_t emit) { 116 return table18_emit_[i >> 6][emit]; 117 } GetOp10(size_t i)118 static inline uint64_t GetOp10(size_t i) { 119 return table10_ops_[i >> 6][i & 0x3f]; 120 } GetEmit10(size_t i,size_t emit)121 static inline uint64_t GetEmit10(size_t i, size_t emit) { 122 return table10_emit_[i >> 6][emit]; 123 } GetOp19(size_t i)124 static inline uint64_t GetOp19(size_t i) { return i ? 3 : 1; } GetEmit19(size_t,size_t emit)125 static inline uint64_t GetEmit19(size_t, size_t emit) { 126 return emit ? 132 : 129; 127 } GetOp20(size_t i)128 static inline uint64_t GetOp20(size_t i) { return i ? 3 : 1; } GetEmit20(size_t,size_t emit)129 static inline uint64_t GetEmit20(size_t, size_t emit) { return emit + 133; } GetOp21(size_t i)130 static inline uint64_t GetOp21(size_t i) { return i ? 3 : 1; } GetEmit21(size_t,size_t emit)131 static inline uint64_t GetEmit21(size_t, size_t emit) { 132 return emit ? 146 : 136; 133 } 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 ? 156 : 154; 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 ? 163 : 160; 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) { 144 return emit ? 169 : 164; 145 } GetOp25(size_t i)146 static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; } GetEmit25(size_t,size_t emit)147 static inline uint64_t GetEmit25(size_t, size_t emit) { 148 return emit ? 173 : 170; 149 } GetOp26(size_t i)150 static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; } GetEmit26(size_t,size_t emit)151 static inline uint64_t GetEmit26(size_t, size_t emit) { 152 return emit ? 181 : 178; 153 } GetOp27(size_t i)154 static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; } GetEmit27(size_t,size_t emit)155 static inline uint64_t GetEmit27(size_t, size_t emit) { return emit + 185; } GetOp28(size_t i)156 static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; } GetEmit28(size_t,size_t emit)157 static inline uint64_t GetEmit28(size_t, size_t emit) { 158 return emit ? 189 : 187; 159 } GetOp29(size_t i)160 static inline uint64_t GetOp29(size_t i) { return i ? 3 : 1; } GetEmit29(size_t,size_t emit)161 static inline uint64_t GetEmit29(size_t, size_t emit) { 162 return emit ? 196 : 190; 163 } GetOp30(size_t i)164 static inline uint64_t GetOp30(size_t i) { return i ? 3 : 1; } GetEmit30(size_t,size_t emit)165 static inline uint64_t GetEmit30(size_t, size_t emit) { 166 return emit ? 228 : 198; 167 } GetOp31(size_t i)168 static inline uint64_t GetOp31(size_t i) { return i ? 3 : 1; } GetEmit31(size_t,size_t emit)169 static inline uint64_t GetEmit31(size_t, size_t emit) { return emit + 232; } GetOp32(size_t i)170 static inline uint64_t GetOp32(size_t i) { 171 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 172 } GetEmit32(size_t,size_t emit)173 static inline uint64_t GetEmit32(size_t, size_t emit) { 174 return (emit < 2 ? (emit ? 135 : 1) : ((emit - 2) + 137)); 175 } GetOp33(size_t i)176 static inline uint64_t GetOp33(size_t i) { 177 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 178 } GetEmit33(size_t,size_t emit)179 static inline uint64_t GetEmit33(size_t, size_t emit) { 180 return (emit < 2 ? (emit + 139) : ((emit - 2) ? 143 : 141)); 181 } GetOp34(size_t i)182 static inline uint64_t GetOp34(size_t i) { 183 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 184 } GetEmit34(size_t,size_t emit)185 static inline uint64_t GetEmit34(size_t, size_t emit) { 186 return (emit < 1 ? (((void)emit, 147)) : ((emit - 1) + 149)); 187 } GetOp35(size_t i)188 static inline uint64_t GetOp35(size_t i) { 189 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 190 } GetEmit35(size_t,size_t emit)191 static inline uint64_t GetEmit35(size_t, size_t emit) { 192 return (emit < 2 ? (emit ? 155 : 152) : ((emit - 2) + 157)); 193 } GetOp36(size_t i)194 static inline uint64_t GetOp36(size_t i) { 195 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 196 } GetEmit36(size_t,size_t emit)197 static inline uint64_t GetEmit36(size_t, size_t emit) { 198 return (emit < 2 ? (emit + 165) : ((emit - 2) ? 174 : 168)); 199 } GetOp37(size_t i)200 static inline uint64_t GetOp37(size_t i) { 201 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 202 } GetEmit37(size_t,size_t emit)203 static inline uint64_t GetEmit37(size_t, size_t emit) { 204 return (emit < 2 ? (emit ? 180 : 175) : ((emit - 2) + 182)); 205 } GetOp38(size_t i)206 static inline uint64_t GetOp38(size_t i) { 207 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 208 } GetEmit38(size_t,size_t emit)209 static inline uint64_t GetEmit38(size_t, size_t emit) { 210 return (emit < 2 ? (emit ? 191 : 188) : ((emit - 2) ? 231 : 197)); 211 } GetOp40(size_t i)212 static inline uint64_t GetOp40(size_t i) { 213 return table40_0_inner_[(i < 6 ? (i) : (((void)(i - 6), 6)))]; 214 } GetEmit40(size_t,size_t emit)215 static inline uint64_t GetEmit40(size_t, size_t emit) { 216 return table40_0_emit_[emit]; 217 } GetOp39(size_t i)218 static inline uint64_t GetOp39(size_t i) { 219 return table39_0_inner_[(i < 11 ? (i / 2 + 0) : ((i - 11) + 5))]; 220 } GetEmit39(size_t,size_t emit)221 static inline uint64_t GetEmit39(size_t, size_t emit) { 222 return table39_0_emit_[emit]; 223 } GetOp42(size_t i)224 static inline uint64_t GetOp42(size_t i) { 225 return (i < 1 ? (((void)i, 0)) : (((void)(i - 1), 1))); 226 } GetEmit42(size_t,size_t emit)227 static inline uint64_t GetEmit42(size_t, size_t emit) { 228 return ((void)emit, 239); 229 } GetOp41(size_t i)230 static inline uint64_t GetOp41(size_t i) { 231 return table41_0_inner_[(i < 1 ? (((void)i, 0)) : ((i - 1)))]; 232 } GetEmit41(size_t,size_t emit)233 static inline uint64_t GetEmit41(size_t, size_t emit) { 234 return table41_0_emit_[emit]; 235 } GetOp44(size_t i)236 static inline uint64_t GetOp44(size_t i) { return table44_0_ops_[i]; } GetEmit44(size_t,size_t emit)237 static inline uint64_t GetEmit44(size_t, size_t emit) { 238 return table44_0_emit_[emit]; 239 } GetOp45(size_t i)240 static inline uint64_t GetOp45(size_t i) { return table45_0_ops_[i]; } GetEmit45(size_t,size_t emit)241 static inline uint64_t GetEmit45(size_t, size_t emit) { 242 return table45_0_emit_[emit]; 243 } GetOp46(size_t i)244 static inline uint64_t GetOp46(size_t i) { return table46_0_ops_[i]; } GetEmit46(size_t,size_t emit)245 static inline uint64_t GetEmit46(size_t, size_t emit) { 246 return table46_0_emit_[emit]; 247 } GetOp47(size_t i)248 static inline uint64_t GetOp47(size_t i) { return table47_0_ops_[i]; } GetEmit47(size_t,size_t emit)249 static inline uint64_t GetEmit47(size_t, size_t emit) { 250 return table46_0_emit_[emit]; 251 } GetOp43(size_t i)252 static inline uint64_t GetOp43(size_t i) { 253 return table43_ops_[i >> 5][i & 0x1f]; 254 } GetEmit43(size_t i,size_t emit)255 static inline uint64_t GetEmit43(size_t i, size_t emit) { 256 return table43_emit_[i >> 5][emit]; 257 } 258 259 private: 260 static const uint8_t table2_0_emit_[10]; 261 static const uint8_t table2_0_ops_[32]; 262 static const uint8_t table3_0_emit_[36]; 263 static const uint8_t table3_0_ops_[64]; 264 static const uint8_t table4_0_emit_[22]; 265 static const uint8_t table4_0_ops_[64]; 266 static const uint8_t table4_1_emit_[46]; 267 static const uint8_t table4_1_ops_[64]; 268 static const uint8_t* const table4_emit_[2]; 269 static const uint8_t* const table4_ops_[2]; 270 static const uint8_t table5_0_ops_[128]; 271 static const uint8_t table5_1_emit_[52]; 272 static const uint8_t table5_1_ops_[128]; 273 static const uint8_t* const table5_emit_[2]; 274 static const uint8_t* const table5_ops_[2]; 275 static const uint8_t table6_0_emit_[2]; 276 static const uint8_t table6_0_ops_[32]; 277 static const uint8_t table6_1_emit_[2]; 278 static const uint8_t table6_2_emit_[2]; 279 static const uint8_t table6_3_emit_[2]; 280 static const uint8_t table6_4_emit_[2]; 281 static const uint8_t table6_5_emit_[4]; 282 static const uint8_t table6_5_ops_[32]; 283 static const uint8_t table6_6_emit_[4]; 284 static const uint8_t table6_7_emit_[4]; 285 static const uint8_t table6_8_emit_[4]; 286 static const uint8_t table6_9_emit_[4]; 287 static const uint8_t table6_10_emit_[4]; 288 static const uint8_t table6_11_emit_[6]; 289 static const uint8_t table6_11_ops_[32]; 290 static const uint8_t table6_12_emit_[8]; 291 static const uint8_t table6_12_ops_[32]; 292 static const uint8_t table6_13_emit_[8]; 293 static const uint8_t table6_14_emit_[8]; 294 static const uint8_t table6_15_emit_[10]; 295 static const uint8_t table6_15_ops_[32]; 296 static const uint8_t* const table6_emit_[16]; 297 static const uint8_t* const table6_ops_[16]; 298 static const uint8_t table7_0_emit_[36]; 299 static const uint8_t table7_0_ops_[64]; 300 static const uint8_t table7_1_emit_[36]; 301 static const uint8_t table7_1_ops_[64]; 302 static const uint8_t table7_2_emit_[36]; 303 static const uint8_t table7_2_ops_[64]; 304 static const uint8_t table7_3_emit_[36]; 305 static const uint8_t table7_3_ops_[64]; 306 static const uint8_t table7_4_emit_[38]; 307 static const uint8_t table7_4_ops_[64]; 308 static const uint8_t table7_5_ops_[64]; 309 static const uint8_t table7_11_ops_[64]; 310 static const uint8_t table7_12_ops_[64]; 311 static const uint8_t table7_15_emit_[15]; 312 static const uint8_t table7_15_ops_[64]; 313 static const uint8_t* const table7_emit_[16]; 314 static const uint8_t* const table7_ops_[16]; 315 static const uint8_t table1_0_emit_[71]; 316 static const uint16_t table1_0_inner_[37]; 317 static const uint8_t table1_0_outer_[64]; 318 static const uint8_t table1_1_emit_[71]; 319 static const uint16_t table1_1_inner_[37]; 320 static const uint8_t table1_2_emit_[71]; 321 static const uint16_t table1_2_inner_[37]; 322 static const uint8_t table1_3_emit_[71]; 323 static const uint16_t table1_3_inner_[37]; 324 static const uint8_t table1_4_emit_[71]; 325 static const uint16_t table1_4_inner_[37]; 326 static const uint8_t table1_5_emit_[71]; 327 static const uint16_t table1_5_inner_[37]; 328 static const uint8_t table1_6_emit_[71]; 329 static const uint16_t table1_6_inner_[37]; 330 static const uint8_t table1_7_emit_[71]; 331 static const uint16_t table1_7_inner_[37]; 332 static const uint8_t table1_8_emit_[71]; 333 static const uint16_t table1_8_inner_[37]; 334 static const uint8_t table1_9_emit_[71]; 335 static const uint16_t table1_9_inner_[37]; 336 static const uint8_t table1_10_emit_[40]; 337 static const uint16_t table1_10_inner_[22]; 338 static const uint8_t table1_10_outer_[64]; 339 static const uint8_t table1_11_emit_[40]; 340 static const uint8_t table1_12_emit_[40]; 341 static const uint8_t table1_13_emit_[40]; 342 static const uint8_t table1_14_emit_[40]; 343 static const uint8_t table1_15_emit_[40]; 344 static const uint8_t table1_16_emit_[40]; 345 static const uint8_t table1_17_emit_[40]; 346 static const uint8_t table1_18_emit_[40]; 347 static const uint8_t table1_19_emit_[40]; 348 static const uint8_t table1_20_emit_[40]; 349 static const uint8_t table1_21_emit_[40]; 350 static const uint8_t table1_22_emit_[40]; 351 static const uint8_t table1_23_emit_[4]; 352 static const uint16_t table1_23_inner_[4]; 353 static const uint8_t table1_23_outer_[64]; 354 static const uint8_t table1_24_emit_[4]; 355 static const uint8_t table1_25_emit_[4]; 356 static const uint8_t table1_26_emit_[4]; 357 static const uint8_t table1_27_emit_[4]; 358 static const uint8_t table1_28_emit_[4]; 359 static const uint8_t table1_29_emit_[4]; 360 static const uint8_t table1_30_emit_[4]; 361 static const uint8_t table1_31_emit_[14]; 362 static const uint16_t table1_31_inner_[17]; 363 static const uint8_t table1_31_outer_[64]; 364 static const uint8_t* const table1_emit_[32]; 365 static const uint16_t* const table1_inner_[32]; 366 static const uint8_t* const table1_outer_[32]; 367 static const uint8_t table12_0_inner_[6]; 368 static const uint8_t table12_0_outer_[8]; 369 static const uint8_t table13_0_emit_[7]; 370 static const uint8_t table13_0_inner_[9]; 371 static const uint8_t table13_0_outer_[16]; 372 static const uint8_t table14_0_ops_[32]; 373 static const uint8_t table15_0_ops_[64]; 374 static const uint8_t table16_0_emit_[45]; 375 static const uint8_t table16_0_ops_[128]; 376 static const uint8_t table17_0_emit_[72]; 377 static const uint16_t table17_0_ops_[64]; 378 static const uint8_t table17_1_emit_[72]; 379 static const uint8_t table17_2_emit_[40]; 380 static const uint16_t table17_2_ops_[64]; 381 static const uint8_t table17_3_emit_[6]; 382 static const uint16_t table17_3_ops_[64]; 383 static const uint8_t* const table17_emit_[4]; 384 static const uint16_t* const table17_ops_[4]; 385 static const uint8_t table18_0_emit_[44]; 386 static const uint16_t table18_0_ops_[64]; 387 static const uint8_t table18_1_emit_[92]; 388 static const uint16_t table18_1_ops_[64]; 389 static const uint8_t table18_2_emit_[44]; 390 static const uint8_t table18_3_emit_[92]; 391 static const uint8_t table18_4_emit_[72]; 392 static const uint8_t table18_5_emit_[72]; 393 static const uint8_t table18_6_emit_[40]; 394 static const uint8_t table18_7_emit_[31]; 395 static const uint16_t table18_7_ops_[64]; 396 static const uint8_t* const table18_emit_[8]; 397 static const uint16_t* const table18_ops_[8]; 398 static const uint8_t table10_0_emit_[1]; 399 static const uint16_t table10_0_ops_[64]; 400 static const uint8_t table10_4_emit_[1]; 401 static const uint8_t table10_8_emit_[1]; 402 static const uint16_t table10_8_ops_[64]; 403 static const uint8_t table10_10_emit_[1]; 404 static const uint8_t table10_12_emit_[1]; 405 static const uint16_t table10_12_ops_[64]; 406 static const uint8_t table10_13_emit_[1]; 407 static const uint8_t table10_14_emit_[1]; 408 static const uint8_t table10_15_emit_[24]; 409 static const uint16_t table10_15_ops_[64]; 410 static const uint8_t* const table10_emit_[16]; 411 static const uint16_t* const table10_ops_[16]; 412 static const uint8_t table40_0_emit_[6]; 413 static const uint8_t table40_0_inner_[7]; 414 static const uint8_t table39_0_emit_[10]; 415 static const uint8_t table39_0_inner_[10]; 416 static const uint8_t table41_0_emit_[7]; 417 static const uint8_t table41_0_inner_[7]; 418 static const uint8_t table44_0_emit_[15]; 419 static const uint8_t table44_0_ops_[32]; 420 static const uint8_t table45_0_emit_[34]; 421 static const uint8_t table45_0_ops_[64]; 422 static const uint8_t table46_0_emit_[63]; 423 static const uint8_t table46_0_ops_[128]; 424 static const uint8_t table47_0_ops_[256]; 425 static const uint8_t table43_0_emit_[2]; 426 static const uint16_t table43_0_ops_[32]; 427 static const uint8_t table43_1_emit_[2]; 428 static const uint8_t table43_2_emit_[2]; 429 static const uint8_t table43_3_emit_[2]; 430 static const uint8_t table43_4_emit_[2]; 431 static const uint8_t table43_5_emit_[2]; 432 static const uint8_t table43_6_emit_[2]; 433 static const uint8_t table43_7_emit_[3]; 434 static const uint16_t table43_7_ops_[32]; 435 static const uint8_t table43_8_emit_[4]; 436 static const uint16_t table43_8_ops_[32]; 437 static const uint8_t table43_9_emit_[4]; 438 static const uint8_t table43_10_emit_[4]; 439 static const uint8_t table43_11_emit_[4]; 440 static const uint8_t table43_12_emit_[7]; 441 static const uint16_t table43_12_ops_[32]; 442 static const uint8_t table43_13_emit_[8]; 443 static const uint16_t table43_13_ops_[32]; 444 static const uint8_t table43_14_emit_[8]; 445 static const uint8_t table43_15_emit_[10]; 446 static const uint16_t table43_15_ops_[32]; 447 static const uint8_t* const table43_emit_[16]; 448 static const uint16_t* const table43_ops_[16]; 449 }; 450 template <typename F> 451 class HuffDecoder : public HuffDecoderCommon { 452 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)453 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 454 : sink_(sink), begin_(begin), end_(end) {} Run()455 bool Run() { 456 while (!done_) { 457 if (!RefillTo11()) { 458 Done0(); 459 break; 460 } 461 const auto index = (buffer_ >> (buffer_len_ - 11)) & 0x7ff; 462 const auto op = GetOp1(index); 463 const int consumed = op & 15; 464 buffer_len_ -= consumed; 465 const auto emit_ofs = op >> 7; 466 switch ((op >> 4) & 7) { 467 case 0: { 468 sink_(GetEmit1(index, emit_ofs + 0)); 469 sink_(GetEmit1(index, emit_ofs + 1)); 470 break; 471 } 472 case 1: { 473 sink_(GetEmit1(index, emit_ofs + 0)); 474 break; 475 } 476 case 2: { 477 DecodeStep0(); 478 break; 479 } 480 case 3: { 481 DecodeStep1(); 482 break; 483 } 484 case 4: { 485 DecodeStep2(); 486 break; 487 } 488 } 489 } 490 return ok_; 491 } 492 493 private: RefillTo11()494 bool RefillTo11() { 495 switch (buffer_len_) { 496 case 0: { 497 return Read2to8Bytes(); 498 } 499 case 1: 500 case 2: { 501 return Read2to7Bytes(); 502 } 503 case 3: 504 case 4: 505 case 5: 506 case 6: 507 case 7: 508 case 8: { 509 return Read1to7Bytes(); 510 } 511 case 9: 512 case 10: { 513 return Read1to6Bytes(); 514 } 515 } 516 return true; 517 } Read2to8Bytes()518 bool Read2to8Bytes() { 519 switch (end_ - begin_) { 520 case 0: 521 case 1: { 522 return false; 523 } 524 case 2: { 525 Fill2(); 526 return true; 527 } 528 case 3: { 529 Fill3(); 530 return true; 531 } 532 case 4: { 533 Fill4(); 534 return true; 535 } 536 case 5: { 537 Fill5(); 538 return true; 539 } 540 case 6: { 541 Fill6(); 542 return true; 543 } 544 case 7: { 545 Fill7(); 546 return true; 547 } 548 default: { 549 Fill8(); 550 return true; 551 } 552 } 553 } Fill2()554 void Fill2() { 555 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 556 (static_cast<uint64_t>(begin_[1]) << 0); 557 begin_ += 2; 558 buffer_len_ += 16; 559 } Fill3()560 void Fill3() { 561 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 562 (static_cast<uint64_t>(begin_[1]) << 8) | 563 (static_cast<uint64_t>(begin_[2]) << 0); 564 begin_ += 3; 565 buffer_len_ += 24; 566 } Fill4()567 void Fill4() { 568 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 569 (static_cast<uint64_t>(begin_[1]) << 16) | 570 (static_cast<uint64_t>(begin_[2]) << 8) | 571 (static_cast<uint64_t>(begin_[3]) << 0); 572 begin_ += 4; 573 buffer_len_ += 32; 574 } Fill5()575 void Fill5() { 576 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 577 (static_cast<uint64_t>(begin_[1]) << 24) | 578 (static_cast<uint64_t>(begin_[2]) << 16) | 579 (static_cast<uint64_t>(begin_[3]) << 8) | 580 (static_cast<uint64_t>(begin_[4]) << 0); 581 begin_ += 5; 582 buffer_len_ += 40; 583 } Fill6()584 void Fill6() { 585 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 586 (static_cast<uint64_t>(begin_[1]) << 32) | 587 (static_cast<uint64_t>(begin_[2]) << 24) | 588 (static_cast<uint64_t>(begin_[3]) << 16) | 589 (static_cast<uint64_t>(begin_[4]) << 8) | 590 (static_cast<uint64_t>(begin_[5]) << 0); 591 begin_ += 6; 592 buffer_len_ += 48; 593 } Fill7()594 void Fill7() { 595 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 596 (static_cast<uint64_t>(begin_[1]) << 40) | 597 (static_cast<uint64_t>(begin_[2]) << 32) | 598 (static_cast<uint64_t>(begin_[3]) << 24) | 599 (static_cast<uint64_t>(begin_[4]) << 16) | 600 (static_cast<uint64_t>(begin_[5]) << 8) | 601 (static_cast<uint64_t>(begin_[6]) << 0); 602 begin_ += 7; 603 buffer_len_ += 56; 604 } Fill8()605 void Fill8() { 606 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 607 (static_cast<uint64_t>(begin_[1]) << 48) | 608 (static_cast<uint64_t>(begin_[2]) << 40) | 609 (static_cast<uint64_t>(begin_[3]) << 32) | 610 (static_cast<uint64_t>(begin_[4]) << 24) | 611 (static_cast<uint64_t>(begin_[5]) << 16) | 612 (static_cast<uint64_t>(begin_[6]) << 8) | 613 (static_cast<uint64_t>(begin_[7]) << 0); 614 begin_ += 8; 615 buffer_len_ += 64; 616 } Read2to7Bytes()617 bool Read2to7Bytes() { 618 switch (end_ - begin_) { 619 case 0: 620 case 1: { 621 return false; 622 } 623 case 2: { 624 Fill2(); 625 return true; 626 } 627 case 3: { 628 Fill3(); 629 return true; 630 } 631 case 4: { 632 Fill4(); 633 return true; 634 } 635 case 5: { 636 Fill5(); 637 return true; 638 } 639 case 6: { 640 Fill6(); 641 return true; 642 } 643 default: { 644 Fill7(); 645 return true; 646 } 647 } 648 } Read1to7Bytes()649 bool Read1to7Bytes() { 650 switch (end_ - begin_) { 651 case 0: { 652 return false; 653 } 654 case 1: { 655 Fill1(); 656 return true; 657 } 658 case 2: { 659 Fill2(); 660 return true; 661 } 662 case 3: { 663 Fill3(); 664 return true; 665 } 666 case 4: { 667 Fill4(); 668 return true; 669 } 670 case 5: { 671 Fill5(); 672 return true; 673 } 674 case 6: { 675 Fill6(); 676 return true; 677 } 678 default: { 679 Fill7(); 680 return true; 681 } 682 } 683 } Fill1()684 void Fill1() { 685 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 686 begin_ += 1; 687 buffer_len_ += 8; 688 } Read1to6Bytes()689 bool Read1to6Bytes() { 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 default: { 715 Fill6(); 716 return true; 717 } 718 } 719 } Done0()720 void Done0() { 721 done_ = true; 722 switch (end_ - begin_) { 723 case 1: { 724 Fill1(); 725 break; 726 } 727 } 728 switch (buffer_len_) { 729 case 1: 730 case 2: 731 case 3: 732 case 4: { 733 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 734 return; 735 } 736 case 5: { 737 const auto index = buffer_ & 31; 738 const auto op = GetOp2(index); 739 switch (op & 3) { 740 case 0: { 741 sink_(GetEmit2(index, (op >> 2) + 0)); 742 break; 743 } 744 case 1: { 745 ok_ = false; 746 break; 747 } 748 } 749 return; 750 } 751 case 6: { 752 const auto index = buffer_ & 63; 753 const auto op = GetOp3(index); 754 switch (op & 3) { 755 case 0: { 756 ok_ = false; 757 break; 758 } 759 case 1: { 760 sink_(GetEmit3(index, (op >> 2) + 0)); 761 break; 762 } 763 } 764 return; 765 } 766 case 7: { 767 const auto index = buffer_ & 127; 768 const auto op = GetOp4(index); 769 switch (op & 3) { 770 case 0: { 771 ok_ = false; 772 break; 773 } 774 case 1: { 775 sink_(GetEmit4(index, (op >> 2) + 0)); 776 break; 777 } 778 } 779 return; 780 } 781 case 8: { 782 const auto index = buffer_ & 255; 783 const auto op = GetOp5(index); 784 switch (op & 3) { 785 case 0: { 786 ok_ = false; 787 break; 788 } 789 case 1: { 790 sink_(GetEmit5(index, (op >> 2) + 0)); 791 break; 792 } 793 } 794 return; 795 } 796 case 9: { 797 const auto index = buffer_ & 511; 798 const auto op = GetOp6(index); 799 switch (op & 3) { 800 case 0: { 801 ok_ = false; 802 break; 803 } 804 case 1: { 805 sink_(GetEmit6(index, (op >> 2) + 0)); 806 break; 807 } 808 } 809 return; 810 } 811 case 10: { 812 const auto index = buffer_ & 1023; 813 const auto op = GetOp7(index); 814 switch (op & 3) { 815 case 0: { 816 sink_(GetEmit7(index, (op >> 2) + 0)); 817 sink_(GetEmit7(index, (op >> 2) + 1)); 818 break; 819 } 820 case 1: { 821 ok_ = false; 822 break; 823 } 824 case 2: { 825 sink_(GetEmit7(index, (op >> 2) + 0)); 826 break; 827 } 828 } 829 return; 830 } 831 case 0: { 832 return; 833 } 834 } 835 } DecodeStep0()836 void DecodeStep0() { 837 if (!RefillTo1()) { 838 Done1(); 839 return; 840 } 841 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 842 const auto op = GetOp8(index); 843 const int consumed = op & 1; 844 buffer_len_ -= consumed; 845 const auto emit_ofs = op >> 1; 846 sink_(GetEmit8(index, emit_ofs + 0)); 847 } RefillTo1()848 bool RefillTo1() { 849 switch (buffer_len_) { 850 case 0: { 851 return Read1to8Bytes(); 852 } 853 } 854 return true; 855 } Read1to8Bytes()856 bool Read1to8Bytes() { 857 switch (end_ - begin_) { 858 case 0: { 859 return false; 860 } 861 case 1: { 862 Fill1(); 863 return true; 864 } 865 case 2: { 866 Fill2(); 867 return true; 868 } 869 case 3: { 870 Fill3(); 871 return true; 872 } 873 case 4: { 874 Fill4(); 875 return true; 876 } 877 case 5: { 878 Fill5(); 879 return true; 880 } 881 case 6: { 882 Fill6(); 883 return true; 884 } 885 case 7: { 886 Fill7(); 887 return true; 888 } 889 default: { 890 Fill8(); 891 return true; 892 } 893 } 894 } Done1()895 void Done1() { 896 done_ = true; 897 ok_ = false; 898 } DecodeStep1()899 void DecodeStep1() { 900 if (!RefillTo2()) { 901 Done2(); 902 return; 903 } 904 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 905 const auto op = GetOp9(index); 906 const int consumed = op & 3; 907 buffer_len_ -= consumed; 908 const auto emit_ofs = op >> 2; 909 sink_(GetEmit9(index, emit_ofs + 0)); 910 } RefillTo2()911 bool RefillTo2() { 912 switch (buffer_len_) { 913 case 0: { 914 return Read1to8Bytes(); 915 } 916 case 1: { 917 return Read1to7Bytes(); 918 } 919 } 920 return true; 921 } Done2()922 void Done2() { 923 done_ = true; 924 switch (buffer_len_) { 925 case 1: 926 case 0: { 927 ok_ = false; 928 return; 929 } 930 } 931 } DecodeStep2()932 void DecodeStep2() { 933 if (!RefillTo10()) { 934 Done3(); 935 return; 936 } 937 const auto index = (buffer_ >> (buffer_len_ - 10)) & 0x3ff; 938 const auto op = GetOp10(index); 939 const int consumed = op & 15; 940 buffer_len_ -= consumed; 941 const auto emit_ofs = op >> 9; 942 switch ((op >> 4) & 31) { 943 case 0: { 944 sink_(GetEmit10(index, emit_ofs + 0)); 945 break; 946 } 947 case 1: { 948 DecodeStep3(); 949 break; 950 } 951 case 2: { 952 DecodeStep4(); 953 break; 954 } 955 case 3: { 956 DecodeStep5(); 957 break; 958 } 959 case 4: { 960 DecodeStep6(); 961 break; 962 } 963 case 5: { 964 DecodeStep7(); 965 break; 966 } 967 case 6: { 968 DecodeStep8(); 969 break; 970 } 971 case 7: { 972 DecodeStep9(); 973 break; 974 } 975 case 8: { 976 DecodeStep10(); 977 break; 978 } 979 case 9: { 980 DecodeStep11(); 981 break; 982 } 983 case 10: { 984 DecodeStep12(); 985 break; 986 } 987 case 11: { 988 DecodeStep13(); 989 break; 990 } 991 case 12: { 992 DecodeStep14(); 993 break; 994 } 995 case 13: { 996 DecodeStep15(); 997 break; 998 } 999 case 14: { 1000 DecodeStep16(); 1001 break; 1002 } 1003 case 15: { 1004 DecodeStep17(); 1005 break; 1006 } 1007 case 16: { 1008 DecodeStep18(); 1009 break; 1010 } 1011 case 17: { 1012 DecodeStep19(); 1013 break; 1014 } 1015 case 18: { 1016 DecodeStep20(); 1017 break; 1018 } 1019 case 19: { 1020 DecodeStep21(); 1021 break; 1022 } 1023 case 20: { 1024 DecodeStep22(); 1025 break; 1026 } 1027 case 21: { 1028 DecodeStep24(); 1029 break; 1030 } 1031 case 22: { 1032 DecodeStep23(); 1033 break; 1034 } 1035 case 23: { 1036 DecodeStep25(); 1037 break; 1038 } 1039 } 1040 } RefillTo10()1041 bool RefillTo10() { 1042 switch (buffer_len_) { 1043 case 0: { 1044 return Read2to8Bytes(); 1045 } 1046 case 1: { 1047 return Read2to7Bytes(); 1048 } 1049 case 2: 1050 case 3: 1051 case 4: 1052 case 5: 1053 case 6: 1054 case 7: 1055 case 8: { 1056 return Read1to7Bytes(); 1057 } 1058 case 9: { 1059 return Read1to6Bytes(); 1060 } 1061 } 1062 return true; 1063 } Done3()1064 void Done3() { 1065 done_ = true; 1066 switch (end_ - begin_) { 1067 case 1: { 1068 Fill1(); 1069 break; 1070 } 1071 } 1072 switch (buffer_len_) { 1073 case 1: { 1074 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1075 return; 1076 } 1077 case 2: { 1078 const auto index = buffer_ & 3; 1079 const auto op = GetOp11(index); 1080 switch (op & 3) { 1081 case 0: { 1082 sink_(GetEmit11(index, (op >> 2) + 0)); 1083 break; 1084 } 1085 case 1: { 1086 ok_ = false; 1087 break; 1088 } 1089 } 1090 return; 1091 } 1092 case 3: { 1093 const auto index = buffer_ & 7; 1094 const auto op = GetOp12(index); 1095 switch (op & 3) { 1096 case 0: { 1097 ok_ = false; 1098 break; 1099 } 1100 case 1: { 1101 sink_(GetEmit12(index, (op >> 2) + 0)); 1102 break; 1103 } 1104 } 1105 return; 1106 } 1107 case 4: { 1108 const auto index = buffer_ & 15; 1109 const auto op = GetOp13(index); 1110 switch (op & 3) { 1111 case 0: { 1112 ok_ = false; 1113 break; 1114 } 1115 case 1: { 1116 sink_(GetEmit13(index, (op >> 2) + 0)); 1117 break; 1118 } 1119 } 1120 return; 1121 } 1122 case 5: { 1123 const auto index = buffer_ & 31; 1124 const auto op = GetOp14(index); 1125 switch (op & 3) { 1126 case 0: { 1127 ok_ = false; 1128 break; 1129 } 1130 case 1: { 1131 sink_(GetEmit14(index, (op >> 2) + 0)); 1132 break; 1133 } 1134 } 1135 return; 1136 } 1137 case 6: { 1138 const auto index = buffer_ & 63; 1139 const auto op = GetOp15(index); 1140 switch (op & 3) { 1141 case 0: { 1142 ok_ = false; 1143 break; 1144 } 1145 case 1: { 1146 sink_(GetEmit15(index, (op >> 2) + 0)); 1147 break; 1148 } 1149 } 1150 return; 1151 } 1152 case 7: { 1153 const auto index = buffer_ & 127; 1154 const auto op = GetOp16(index); 1155 switch (op & 3) { 1156 case 0: { 1157 sink_(GetEmit16(index, (op >> 2) + 0)); 1158 sink_(GetEmit16(index, (op >> 2) + 1)); 1159 break; 1160 } 1161 case 1: { 1162 ok_ = false; 1163 break; 1164 } 1165 case 2: { 1166 sink_(GetEmit16(index, (op >> 2) + 0)); 1167 break; 1168 } 1169 } 1170 return; 1171 } 1172 case 8: { 1173 const auto index = buffer_ & 255; 1174 const auto op = GetOp17(index); 1175 switch (op & 3) { 1176 case 0: { 1177 ok_ = false; 1178 break; 1179 } 1180 case 1: { 1181 sink_(GetEmit17(index, (op >> 2) + 0)); 1182 sink_(GetEmit17(index, (op >> 2) + 1)); 1183 break; 1184 } 1185 case 2: { 1186 sink_(GetEmit17(index, (op >> 2) + 0)); 1187 break; 1188 } 1189 } 1190 return; 1191 } 1192 case 9: { 1193 const auto index = buffer_ & 511; 1194 const auto op = GetOp18(index); 1195 switch (op & 3) { 1196 case 0: { 1197 ok_ = false; 1198 break; 1199 } 1200 case 1: { 1201 sink_(GetEmit18(index, (op >> 2) + 0)); 1202 sink_(GetEmit18(index, (op >> 2) + 1)); 1203 break; 1204 } 1205 case 2: { 1206 sink_(GetEmit18(index, (op >> 2) + 0)); 1207 break; 1208 } 1209 } 1210 return; 1211 } 1212 case 0: { 1213 return; 1214 } 1215 } 1216 } DecodeStep3()1217 void DecodeStep3() { 1218 if (!RefillTo1()) { 1219 Done4(); 1220 return; 1221 } 1222 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1223 const auto op = GetOp19(index); 1224 const int consumed = op & 1; 1225 buffer_len_ -= consumed; 1226 const auto emit_ofs = op >> 1; 1227 sink_(GetEmit19(index, emit_ofs + 0)); 1228 } Done4()1229 void Done4() { 1230 done_ = true; 1231 ok_ = false; 1232 } DecodeStep4()1233 void DecodeStep4() { 1234 if (!RefillTo1()) { 1235 Done5(); 1236 return; 1237 } 1238 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1239 const auto op = GetOp20(index); 1240 const int consumed = op & 1; 1241 buffer_len_ -= consumed; 1242 const auto emit_ofs = op >> 1; 1243 sink_(GetEmit20(index, emit_ofs + 0)); 1244 } Done5()1245 void Done5() { 1246 done_ = true; 1247 ok_ = false; 1248 } DecodeStep5()1249 void DecodeStep5() { 1250 if (!RefillTo1()) { 1251 Done6(); 1252 return; 1253 } 1254 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1255 const auto op = GetOp21(index); 1256 const int consumed = op & 1; 1257 buffer_len_ -= consumed; 1258 const auto emit_ofs = op >> 1; 1259 sink_(GetEmit21(index, emit_ofs + 0)); 1260 } Done6()1261 void Done6() { 1262 done_ = true; 1263 ok_ = false; 1264 } DecodeStep6()1265 void DecodeStep6() { 1266 if (!RefillTo1()) { 1267 Done7(); 1268 return; 1269 } 1270 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1271 const auto op = GetOp22(index); 1272 const int consumed = op & 1; 1273 buffer_len_ -= consumed; 1274 const auto emit_ofs = op >> 1; 1275 sink_(GetEmit22(index, emit_ofs + 0)); 1276 } Done7()1277 void Done7() { 1278 done_ = true; 1279 ok_ = false; 1280 } DecodeStep7()1281 void DecodeStep7() { 1282 if (!RefillTo1()) { 1283 Done8(); 1284 return; 1285 } 1286 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1287 const auto op = GetOp23(index); 1288 const int consumed = op & 1; 1289 buffer_len_ -= consumed; 1290 const auto emit_ofs = op >> 1; 1291 sink_(GetEmit23(index, emit_ofs + 0)); 1292 } Done8()1293 void Done8() { 1294 done_ = true; 1295 ok_ = false; 1296 } DecodeStep8()1297 void DecodeStep8() { 1298 if (!RefillTo1()) { 1299 Done9(); 1300 return; 1301 } 1302 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1303 const auto op = GetOp24(index); 1304 const int consumed = op & 1; 1305 buffer_len_ -= consumed; 1306 const auto emit_ofs = op >> 1; 1307 sink_(GetEmit24(index, emit_ofs + 0)); 1308 } Done9()1309 void Done9() { 1310 done_ = true; 1311 ok_ = false; 1312 } DecodeStep9()1313 void DecodeStep9() { 1314 if (!RefillTo1()) { 1315 Done10(); 1316 return; 1317 } 1318 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1319 const auto op = GetOp25(index); 1320 const int consumed = op & 1; 1321 buffer_len_ -= consumed; 1322 const auto emit_ofs = op >> 1; 1323 sink_(GetEmit25(index, emit_ofs + 0)); 1324 } Done10()1325 void Done10() { 1326 done_ = true; 1327 ok_ = false; 1328 } DecodeStep10()1329 void DecodeStep10() { 1330 if (!RefillTo1()) { 1331 Done11(); 1332 return; 1333 } 1334 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1335 const auto op = GetOp26(index); 1336 const int consumed = op & 1; 1337 buffer_len_ -= consumed; 1338 const auto emit_ofs = op >> 1; 1339 sink_(GetEmit26(index, emit_ofs + 0)); 1340 } Done11()1341 void Done11() { 1342 done_ = true; 1343 ok_ = false; 1344 } DecodeStep11()1345 void DecodeStep11() { 1346 if (!RefillTo1()) { 1347 Done12(); 1348 return; 1349 } 1350 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1351 const auto op = GetOp27(index); 1352 const int consumed = op & 1; 1353 buffer_len_ -= consumed; 1354 const auto emit_ofs = op >> 1; 1355 sink_(GetEmit27(index, emit_ofs + 0)); 1356 } Done12()1357 void Done12() { 1358 done_ = true; 1359 ok_ = false; 1360 } DecodeStep12()1361 void DecodeStep12() { 1362 if (!RefillTo1()) { 1363 Done13(); 1364 return; 1365 } 1366 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1367 const auto op = GetOp28(index); 1368 const int consumed = op & 1; 1369 buffer_len_ -= consumed; 1370 const auto emit_ofs = op >> 1; 1371 sink_(GetEmit28(index, emit_ofs + 0)); 1372 } Done13()1373 void Done13() { 1374 done_ = true; 1375 ok_ = false; 1376 } DecodeStep13()1377 void DecodeStep13() { 1378 if (!RefillTo1()) { 1379 Done14(); 1380 return; 1381 } 1382 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1383 const auto op = GetOp29(index); 1384 const int consumed = op & 1; 1385 buffer_len_ -= consumed; 1386 const auto emit_ofs = op >> 1; 1387 sink_(GetEmit29(index, emit_ofs + 0)); 1388 } Done14()1389 void Done14() { 1390 done_ = true; 1391 ok_ = false; 1392 } DecodeStep14()1393 void DecodeStep14() { 1394 if (!RefillTo1()) { 1395 Done15(); 1396 return; 1397 } 1398 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1399 const auto op = GetOp30(index); 1400 const int consumed = op & 1; 1401 buffer_len_ -= consumed; 1402 const auto emit_ofs = op >> 1; 1403 sink_(GetEmit30(index, emit_ofs + 0)); 1404 } Done15()1405 void Done15() { 1406 done_ = true; 1407 ok_ = false; 1408 } DecodeStep15()1409 void DecodeStep15() { 1410 if (!RefillTo1()) { 1411 Done16(); 1412 return; 1413 } 1414 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1415 const auto op = GetOp31(index); 1416 const int consumed = op & 1; 1417 buffer_len_ -= consumed; 1418 const auto emit_ofs = op >> 1; 1419 sink_(GetEmit31(index, emit_ofs + 0)); 1420 } Done16()1421 void Done16() { 1422 done_ = true; 1423 ok_ = false; 1424 } DecodeStep16()1425 void DecodeStep16() { 1426 if (!RefillTo2()) { 1427 Done17(); 1428 return; 1429 } 1430 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1431 const auto op = GetOp32(index); 1432 const int consumed = op & 3; 1433 buffer_len_ -= consumed; 1434 const auto emit_ofs = op >> 2; 1435 sink_(GetEmit32(index, emit_ofs + 0)); 1436 } Done17()1437 void Done17() { 1438 done_ = true; 1439 switch (buffer_len_) { 1440 case 1: 1441 case 0: { 1442 ok_ = false; 1443 return; 1444 } 1445 } 1446 } DecodeStep17()1447 void DecodeStep17() { 1448 if (!RefillTo2()) { 1449 Done18(); 1450 return; 1451 } 1452 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1453 const auto op = GetOp33(index); 1454 const int consumed = op & 3; 1455 buffer_len_ -= consumed; 1456 const auto emit_ofs = op >> 2; 1457 sink_(GetEmit33(index, emit_ofs + 0)); 1458 } Done18()1459 void Done18() { 1460 done_ = true; 1461 switch (buffer_len_) { 1462 case 1: 1463 case 0: { 1464 ok_ = false; 1465 return; 1466 } 1467 } 1468 } DecodeStep18()1469 void DecodeStep18() { 1470 if (!RefillTo2()) { 1471 Done19(); 1472 return; 1473 } 1474 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1475 const auto op = GetOp34(index); 1476 const int consumed = op & 3; 1477 buffer_len_ -= consumed; 1478 const auto emit_ofs = op >> 2; 1479 sink_(GetEmit34(index, emit_ofs + 0)); 1480 } Done19()1481 void Done19() { 1482 done_ = true; 1483 switch (buffer_len_) { 1484 case 1: 1485 case 0: { 1486 ok_ = false; 1487 return; 1488 } 1489 } 1490 } DecodeStep19()1491 void DecodeStep19() { 1492 if (!RefillTo2()) { 1493 Done20(); 1494 return; 1495 } 1496 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1497 const auto op = GetOp35(index); 1498 const int consumed = op & 3; 1499 buffer_len_ -= consumed; 1500 const auto emit_ofs = op >> 2; 1501 sink_(GetEmit35(index, emit_ofs + 0)); 1502 } Done20()1503 void Done20() { 1504 done_ = true; 1505 switch (buffer_len_) { 1506 case 1: 1507 case 0: { 1508 ok_ = false; 1509 return; 1510 } 1511 } 1512 } DecodeStep20()1513 void DecodeStep20() { 1514 if (!RefillTo2()) { 1515 Done21(); 1516 return; 1517 } 1518 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1519 const auto op = GetOp36(index); 1520 const int consumed = op & 3; 1521 buffer_len_ -= consumed; 1522 const auto emit_ofs = op >> 2; 1523 sink_(GetEmit36(index, emit_ofs + 0)); 1524 } Done21()1525 void Done21() { 1526 done_ = true; 1527 switch (buffer_len_) { 1528 case 1: 1529 case 0: { 1530 ok_ = false; 1531 return; 1532 } 1533 } 1534 } DecodeStep21()1535 void DecodeStep21() { 1536 if (!RefillTo2()) { 1537 Done22(); 1538 return; 1539 } 1540 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1541 const auto op = GetOp37(index); 1542 const int consumed = op & 3; 1543 buffer_len_ -= consumed; 1544 const auto emit_ofs = op >> 2; 1545 sink_(GetEmit37(index, emit_ofs + 0)); 1546 } Done22()1547 void Done22() { 1548 done_ = true; 1549 switch (buffer_len_) { 1550 case 1: 1551 case 0: { 1552 ok_ = false; 1553 return; 1554 } 1555 } 1556 } DecodeStep22()1557 void DecodeStep22() { 1558 if (!RefillTo2()) { 1559 Done23(); 1560 return; 1561 } 1562 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1563 const auto op = GetOp38(index); 1564 const int consumed = op & 3; 1565 buffer_len_ -= consumed; 1566 const auto emit_ofs = op >> 2; 1567 sink_(GetEmit38(index, emit_ofs + 0)); 1568 } Done23()1569 void Done23() { 1570 done_ = true; 1571 switch (buffer_len_) { 1572 case 1: 1573 case 0: { 1574 ok_ = false; 1575 return; 1576 } 1577 } 1578 } DecodeStep23()1579 void DecodeStep23() { 1580 if (!RefillTo4()) { 1581 Done24(); 1582 return; 1583 } 1584 const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf; 1585 const auto op = GetOp39(index); 1586 const int consumed = op & 7; 1587 buffer_len_ -= consumed; 1588 const auto emit_ofs = op >> 3; 1589 sink_(GetEmit39(index, emit_ofs + 0)); 1590 } RefillTo4()1591 bool RefillTo4() { 1592 switch (buffer_len_) { 1593 case 0: { 1594 return Read1to8Bytes(); 1595 } 1596 case 1: 1597 case 2: 1598 case 3: { 1599 return Read1to7Bytes(); 1600 } 1601 } 1602 return true; 1603 } Done24()1604 void Done24() { 1605 done_ = true; 1606 switch (buffer_len_) { 1607 case 1: 1608 case 2: 1609 case 0: { 1610 ok_ = false; 1611 return; 1612 } 1613 case 3: { 1614 const auto index = buffer_ & 7; 1615 const auto op = GetOp40(index); 1616 switch (op & 1) { 1617 case 0: { 1618 sink_(GetEmit40(index, (op >> 1) + 0)); 1619 break; 1620 } 1621 case 1: { 1622 ok_ = false; 1623 break; 1624 } 1625 } 1626 return; 1627 } 1628 } 1629 } DecodeStep24()1630 void DecodeStep24() { 1631 if (!RefillTo3()) { 1632 Done25(); 1633 return; 1634 } 1635 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1636 const auto op = GetOp41(index); 1637 const int consumed = op & 3; 1638 buffer_len_ -= consumed; 1639 const auto emit_ofs = op >> 2; 1640 sink_(GetEmit41(index, emit_ofs + 0)); 1641 } RefillTo3()1642 bool RefillTo3() { 1643 switch (buffer_len_) { 1644 case 0: { 1645 return Read1to8Bytes(); 1646 } 1647 case 1: 1648 case 2: { 1649 return Read1to7Bytes(); 1650 } 1651 } 1652 return true; 1653 } Done25()1654 void Done25() { 1655 done_ = true; 1656 switch (buffer_len_) { 1657 case 1: 1658 case 0: { 1659 ok_ = false; 1660 return; 1661 } 1662 case 2: { 1663 const auto index = buffer_ & 3; 1664 const auto op = GetOp42(index); 1665 switch (op & 1) { 1666 case 0: { 1667 sink_(GetEmit42(index, (op >> 1) + 0)); 1668 break; 1669 } 1670 case 1: { 1671 ok_ = false; 1672 break; 1673 } 1674 } 1675 return; 1676 } 1677 } 1678 } DecodeStep25()1679 void DecodeStep25() { 1680 if (!RefillTo9()) { 1681 Done26(); 1682 return; 1683 } 1684 const auto index = (buffer_ >> (buffer_len_ - 9)) & 0x1ff; 1685 const auto op = GetOp43(index); 1686 const int consumed = op & 15; 1687 buffer_len_ -= consumed; 1688 const auto emit_ofs = op >> 5; 1689 switch ((op >> 4) & 1) { 1690 case 0: { 1691 sink_(GetEmit43(index, emit_ofs + 0)); 1692 break; 1693 } 1694 case 1: { 1695 begin_ = end_; 1696 buffer_len_ = 0; 1697 break; 1698 } 1699 } 1700 } RefillTo9()1701 bool RefillTo9() { 1702 switch (buffer_len_) { 1703 case 0: { 1704 return Read2to8Bytes(); 1705 } 1706 case 1: 1707 case 2: 1708 case 3: 1709 case 4: 1710 case 5: 1711 case 6: 1712 case 7: 1713 case 8: { 1714 return Read1to7Bytes(); 1715 } 1716 } 1717 return true; 1718 } Done26()1719 void Done26() { 1720 done_ = true; 1721 switch (end_ - begin_) { 1722 case 1: { 1723 Fill1(); 1724 break; 1725 } 1726 } 1727 switch (buffer_len_) { 1728 case 1: 1729 case 2: 1730 case 3: 1731 case 4: { 1732 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1733 return; 1734 } 1735 case 5: { 1736 const auto index = buffer_ & 31; 1737 const auto op = GetOp44(index); 1738 switch (op & 3) { 1739 case 0: { 1740 sink_(GetEmit44(index, (op >> 2) + 0)); 1741 break; 1742 } 1743 case 1: { 1744 ok_ = false; 1745 break; 1746 } 1747 } 1748 return; 1749 } 1750 case 6: { 1751 const auto index = buffer_ & 63; 1752 const auto op = GetOp45(index); 1753 switch (op & 3) { 1754 case 0: { 1755 ok_ = false; 1756 break; 1757 } 1758 case 1: { 1759 sink_(GetEmit45(index, (op >> 2) + 0)); 1760 break; 1761 } 1762 } 1763 return; 1764 } 1765 case 7: { 1766 const auto index = buffer_ & 127; 1767 const auto op = GetOp46(index); 1768 switch (op & 3) { 1769 case 0: { 1770 ok_ = false; 1771 break; 1772 } 1773 case 1: { 1774 sink_(GetEmit46(index, (op >> 2) + 0)); 1775 break; 1776 } 1777 } 1778 return; 1779 } 1780 case 8: { 1781 const auto index = buffer_ & 255; 1782 const auto op = GetOp47(index); 1783 switch (op & 3) { 1784 case 0: { 1785 ok_ = false; 1786 break; 1787 } 1788 case 1: { 1789 sink_(GetEmit47(index, (op >> 2) + 0)); 1790 break; 1791 } 1792 } 1793 return; 1794 } 1795 case 0: { 1796 return; 1797 } 1798 } 1799 } 1800 F sink_; 1801 const uint8_t* begin_; 1802 const uint8_t* const end_; 1803 uint64_t buffer_ = 0; 1804 int buffer_len_ = 0; 1805 bool ok_ = true; 1806 bool done_ = false; 1807 }; 1808 } // namespace geometry_11_10_9 1809 } // namespace grpc_core 1810 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_10_9_H 1811