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_13_12_5_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_13_12_5_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_13_12_5 { 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 } GetOp8(size_t i)60 static inline uint64_t GetOp8(size_t i) { 61 return table8_inner_[i >> 6][table8_outer_[i >> 6][i & 0x3f]]; 62 } GetEmit8(size_t i,size_t emit)63 static inline uint64_t GetEmit8(size_t i, size_t emit) { 64 return table8_emit_[i >> 6][emit]; 65 } GetOp9(size_t i)66 static inline uint64_t GetOp9(size_t i) { 67 return table9_ops_[i >> 5][i & 0x1f]; 68 } GetEmit9(size_t i,size_t emit)69 static inline uint64_t GetEmit9(size_t i, size_t emit) { 70 return table9_emit_[i >> 5][emit]; 71 } GetOp1(size_t i)72 static inline uint64_t GetOp1(size_t i) { 73 return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]]; 74 } GetEmit1(size_t i,size_t emit)75 static inline uint64_t GetEmit1(size_t i, size_t emit) { 76 return table1_emit_[i >> 6][emit]; 77 } GetOp10(size_t i)78 static inline uint64_t GetOp10(size_t i) { return i ? 3 : 1; } GetEmit10(size_t,size_t emit)79 static inline uint64_t GetEmit10(size_t, size_t emit) { 80 return emit ? 125 : 94; 81 } GetOp12(size_t i)82 static inline uint64_t GetOp12(size_t i) { 83 return (i < 2 ? (i ? 2 : 0) : ((i - 2) ? 1 : 4)); 84 } GetEmit12(size_t,size_t emit)85 static inline uint64_t GetEmit12(size_t, size_t emit) { 86 return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96)); 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 (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96)); 93 } GetOp14(size_t i)94 static inline uint64_t GetOp14(size_t i) { 95 return table13_0_inner_[table14_0_outer_[i]]; 96 } GetEmit14(size_t,size_t emit)97 static inline uint64_t GetEmit14(size_t, size_t emit) { 98 return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96)); 99 } GetOp15(size_t i)100 static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; } GetEmit15(size_t,size_t emit)101 static inline uint64_t GetEmit15(size_t, size_t emit) { 102 return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96)); 103 } GetOp16(size_t i)104 static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; } GetEmit16(size_t,size_t emit)105 static inline uint64_t GetEmit16(size_t, size_t emit) { 106 return table16_0_emit_[emit]; 107 } GetOp17(size_t i)108 static inline uint64_t GetOp17(size_t i) { 109 return table17_ops_[i >> 5][i & 0x1f]; 110 } GetEmit17(size_t i,size_t emit)111 static inline uint64_t GetEmit17(size_t i, size_t emit) { 112 return table17_emit_[i >> 5][emit]; 113 } GetOp18(size_t i)114 static inline uint64_t GetOp18(size_t i) { 115 return table18_ops_[i >> 6][i & 0x3f]; 116 } GetEmit18(size_t i,size_t emit)117 static inline uint64_t GetEmit18(size_t i, size_t emit) { 118 return table18_emit_[i >> 6][emit]; 119 } GetOp19(size_t i)120 static inline uint64_t GetOp19(size_t i) { 121 return table19_ops_[i >> 7][i & 0x7f]; 122 } GetEmit19(size_t i,size_t emit)123 static inline uint64_t GetEmit19(size_t i, size_t emit) { 124 return table19_emit_[i >> 7][emit]; 125 } GetOp20(size_t i)126 static inline uint64_t GetOp20(size_t i) { 127 return table20_ops_[i >> 7][i & 0x7f]; 128 } GetEmit20(size_t i,size_t emit)129 static inline uint64_t GetEmit20(size_t i, size_t emit) { 130 return table20_emit_[i >> 7][emit]; 131 } GetOp21(size_t i)132 static inline uint64_t GetOp21(size_t i) { 133 return table21_ops_[i >> 7][i & 0x7f]; 134 } GetEmit21(size_t i,size_t emit)135 static inline uint64_t GetEmit21(size_t i, size_t emit) { 136 return table21_emit_[i >> 7][emit]; 137 } GetOp11(size_t i)138 static inline uint64_t GetOp11(size_t i) { 139 return table11_ops_[i >> 6][i & 0x3f]; 140 } GetEmit11(size_t i,size_t emit)141 static inline uint64_t GetEmit11(size_t i, size_t emit) { 142 return table11_emit_[i >> 6][emit]; 143 } GetOp22(size_t i)144 static inline uint64_t GetOp22(size_t i) { return i ? 3 : 1; } GetEmit22(size_t,size_t emit)145 static inline uint64_t GetEmit22(size_t, size_t emit) { return emit + 192; } GetOp23(size_t i)146 static inline uint64_t GetOp23(size_t i) { return i ? 3 : 1; } GetEmit23(size_t,size_t emit)147 static inline uint64_t GetEmit23(size_t, size_t emit) { return emit + 200; } GetOp24(size_t i)148 static inline uint64_t GetOp24(size_t i) { return i ? 3 : 1; } GetEmit24(size_t,size_t emit)149 static inline uint64_t GetEmit24(size_t, size_t emit) { 150 return emit ? 205 : 202; 151 } GetOp25(size_t i)152 static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; } GetEmit25(size_t,size_t emit)153 static inline uint64_t GetEmit25(size_t, size_t emit) { 154 return emit ? 213 : 210; 155 } GetOp26(size_t i)156 static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; } GetEmit26(size_t,size_t emit)157 static inline uint64_t GetEmit26(size_t, size_t emit) { return emit + 218; } GetOp27(size_t i)158 static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; } GetEmit27(size_t,size_t emit)159 static inline uint64_t GetEmit27(size_t, size_t emit) { 160 return emit ? 240 : 238; 161 } GetOp28(size_t i)162 static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; } GetEmit28(size_t,size_t emit)163 static inline uint64_t GetEmit28(size_t, size_t emit) { return emit + 242; } GetOp29(size_t i)164 static inline uint64_t GetOp29(size_t i) { 165 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 166 } GetEmit29(size_t,size_t emit)167 static inline uint64_t GetEmit29(size_t, size_t emit) { 168 return (emit < 2 ? (emit + 211) : ((emit - 2) ? 221 : 214)); 169 } GetOp30(size_t i)170 static inline uint64_t GetOp30(size_t i) { 171 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 172 } GetEmit30(size_t,size_t emit)173 static inline uint64_t GetEmit30(size_t, size_t emit) { 174 return (emit < 2 ? (emit + 222) : ((emit - 2) ? 244 : 241)); 175 } GetOp31(size_t i)176 static inline uint64_t GetOp31(size_t i) { 177 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 178 } GetEmit31(size_t,size_t emit)179 static inline uint64_t GetEmit31(size_t, size_t emit) { return emit + 245; } GetOp32(size_t i)180 static inline uint64_t GetOp32(size_t i) { 181 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 182 } GetEmit32(size_t,size_t emit)183 static inline uint64_t GetEmit32(size_t, size_t emit) { return emit + 250; } GetOp33(size_t i)184 static inline uint64_t GetOp33(size_t i) { return table33_0_inner_[i]; } GetEmit33(size_t,size_t emit)185 static inline uint64_t GetEmit33(size_t, size_t emit) { 186 return table33_0_emit_[emit]; 187 } GetOp34(size_t i)188 static inline uint64_t GetOp34(size_t i) { return table33_0_inner_[i]; } GetEmit34(size_t,size_t emit)189 static inline uint64_t GetEmit34(size_t, size_t emit) { 190 return (emit < 3 ? (emit + 19) : ((emit - 3) + 23)); 191 } GetOp36(size_t i)192 static inline uint64_t GetOp36(size_t i) { return i; } GetEmit36(size_t,size_t emit)193 static inline uint64_t GetEmit36(size_t, size_t emit) { 194 return ((void)emit, 255); 195 } GetOp35(size_t i)196 static inline uint64_t GetOp35(size_t i) { 197 return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1 198 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1)) 199 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6)); 200 } GetEmit35(size_t,size_t emit)201 static inline uint64_t GetEmit35(size_t, size_t emit) { 202 return (emit < 1 ? (((void)emit, 255)) : ((emit - 1) + 203)); 203 } GetOp38(size_t i)204 static inline uint64_t GetOp38(size_t i) { 205 return (i < 1 ? (((void)i, 0)) : (((void)(i - 1), 1))); 206 } GetEmit38(size_t,size_t emit)207 static inline uint64_t GetEmit38(size_t, size_t emit) { 208 return ((void)emit, 254); 209 } GetOp37(size_t i)210 static inline uint64_t GetOp37(size_t i) { 211 return table37_0_inner_[(i < 1 ? (((void)i, 0)) : ((i - 1)))]; 212 } GetEmit37(size_t,size_t emit)213 static inline uint64_t GetEmit37(size_t, size_t emit) { 214 return (emit < 1 ? (((void)emit, 254)) : ((emit - 1) + 2)); 215 } GetOp40(size_t i)216 static inline uint64_t GetOp40(size_t i) { return table40_0_inner_[i]; } GetEmit40(size_t,size_t emit)217 static inline uint64_t GetEmit40(size_t, size_t emit) { 218 return table40_0_emit_[emit]; 219 } GetOp41(size_t i)220 static inline uint64_t GetOp41(size_t i) { 221 return table41_0_inner_[table41_0_outer_[i]]; 222 } GetEmit41(size_t,size_t emit)223 static inline uint64_t GetEmit41(size_t, size_t emit) { 224 return table40_0_emit_[emit]; 225 } GetOp39(size_t i)226 static inline uint64_t GetOp39(size_t i) { return table39_0_ops_[i]; } GetEmit39(size_t,size_t emit)227 static inline uint64_t GetEmit39(size_t, size_t emit) { 228 return table39_0_emit_[emit]; 229 } 230 231 private: 232 static const uint8_t table2_0_emit_[10]; 233 static const uint8_t table2_0_ops_[32]; 234 static const uint8_t table3_0_emit_[36]; 235 static const uint8_t table3_0_ops_[64]; 236 static const uint8_t table4_0_emit_[22]; 237 static const uint8_t table4_0_ops_[64]; 238 static const uint8_t table4_1_emit_[46]; 239 static const uint8_t table4_1_ops_[64]; 240 static const uint8_t* const table4_emit_[2]; 241 static const uint8_t* const table4_ops_[2]; 242 static const uint8_t table5_0_ops_[128]; 243 static const uint8_t table5_1_emit_[52]; 244 static const uint8_t table5_1_ops_[128]; 245 static const uint8_t* const table5_emit_[2]; 246 static const uint8_t* const table5_ops_[2]; 247 static const uint8_t table6_0_emit_[2]; 248 static const uint8_t table6_0_ops_[32]; 249 static const uint8_t table6_1_emit_[2]; 250 static const uint8_t table6_2_emit_[2]; 251 static const uint8_t table6_3_emit_[2]; 252 static const uint8_t table6_4_emit_[2]; 253 static const uint8_t table6_5_emit_[4]; 254 static const uint8_t table6_5_ops_[32]; 255 static const uint8_t table6_6_emit_[4]; 256 static const uint8_t table6_7_emit_[4]; 257 static const uint8_t table6_8_emit_[4]; 258 static const uint8_t table6_9_emit_[4]; 259 static const uint8_t table6_10_emit_[4]; 260 static const uint8_t table6_11_emit_[6]; 261 static const uint8_t table6_11_ops_[32]; 262 static const uint8_t table6_12_emit_[8]; 263 static const uint8_t table6_12_ops_[32]; 264 static const uint8_t table6_13_emit_[8]; 265 static const uint8_t table6_14_emit_[8]; 266 static const uint8_t table6_15_emit_[10]; 267 static const uint8_t table6_15_ops_[32]; 268 static const uint8_t* const table6_emit_[16]; 269 static const uint8_t* const table6_ops_[16]; 270 static const uint8_t table7_0_emit_[36]; 271 static const uint8_t table7_0_ops_[64]; 272 static const uint8_t table7_1_emit_[36]; 273 static const uint8_t table7_1_ops_[64]; 274 static const uint8_t table7_2_emit_[36]; 275 static const uint8_t table7_2_ops_[64]; 276 static const uint8_t table7_3_emit_[36]; 277 static const uint8_t table7_3_ops_[64]; 278 static const uint8_t table7_4_emit_[38]; 279 static const uint8_t table7_4_ops_[64]; 280 static const uint8_t table7_5_ops_[64]; 281 static const uint8_t table7_11_ops_[64]; 282 static const uint8_t table7_12_ops_[64]; 283 static const uint8_t table7_15_emit_[15]; 284 static const uint8_t table7_15_ops_[64]; 285 static const uint8_t* const table7_emit_[16]; 286 static const uint8_t* const table7_ops_[16]; 287 static const uint8_t table8_0_emit_[71]; 288 static const uint16_t table8_0_inner_[38]; 289 static const uint8_t table8_0_outer_[64]; 290 static const uint8_t table8_1_emit_[71]; 291 static const uint16_t table8_1_inner_[38]; 292 static const uint8_t table8_2_emit_[71]; 293 static const uint16_t table8_2_inner_[38]; 294 static const uint8_t table8_3_emit_[71]; 295 static const uint16_t table8_3_inner_[38]; 296 static const uint8_t table8_4_emit_[71]; 297 static const uint16_t table8_4_inner_[38]; 298 static const uint8_t table8_5_emit_[71]; 299 static const uint16_t table8_5_inner_[38]; 300 static const uint8_t table8_6_emit_[71]; 301 static const uint16_t table8_6_inner_[38]; 302 static const uint8_t table8_7_emit_[71]; 303 static const uint16_t table8_7_inner_[38]; 304 static const uint8_t table8_8_emit_[71]; 305 static const uint16_t table8_8_inner_[38]; 306 static const uint8_t table8_9_emit_[71]; 307 static const uint16_t table8_9_inner_[38]; 308 static const uint8_t table8_10_emit_[40]; 309 static const uint16_t table8_10_inner_[23]; 310 static const uint8_t table8_10_outer_[64]; 311 static const uint8_t table8_11_emit_[40]; 312 static const uint8_t table8_12_emit_[40]; 313 static const uint8_t table8_13_emit_[40]; 314 static const uint8_t table8_14_emit_[40]; 315 static const uint8_t table8_15_emit_[40]; 316 static const uint8_t table8_16_emit_[40]; 317 static const uint8_t table8_17_emit_[40]; 318 static const uint8_t table8_18_emit_[40]; 319 static const uint8_t table8_19_emit_[40]; 320 static const uint8_t table8_20_emit_[40]; 321 static const uint8_t table8_21_emit_[40]; 322 static const uint8_t table8_22_emit_[40]; 323 static const uint8_t table8_23_emit_[4]; 324 static const uint16_t table8_23_inner_[5]; 325 static const uint8_t table8_23_outer_[64]; 326 static const uint8_t table8_24_emit_[4]; 327 static const uint8_t table8_25_emit_[4]; 328 static const uint8_t table8_26_emit_[4]; 329 static const uint8_t table8_27_emit_[4]; 330 static const uint8_t table8_28_emit_[4]; 331 static const uint8_t table8_29_emit_[4]; 332 static const uint8_t table8_30_emit_[4]; 333 static const uint8_t table8_31_emit_[14]; 334 static const uint16_t table8_31_inner_[16]; 335 static const uint8_t table8_31_outer_[64]; 336 static const uint8_t* const table8_emit_[32]; 337 static const uint16_t* const table8_inner_[32]; 338 static const uint8_t* const table8_outer_[32]; 339 static const uint8_t table9_0_emit_[15]; 340 static const uint8_t table9_0_ops_[32]; 341 static const uint8_t table9_1_emit_[28]; 342 static const uint8_t table9_1_ops_[32]; 343 static const uint8_t table9_2_emit_[36]; 344 static const uint8_t table9_2_ops_[32]; 345 static const uint8_t table9_3_emit_[56]; 346 static const uint8_t table9_3_ops_[32]; 347 static const uint8_t table9_4_emit_[15]; 348 static const uint8_t table9_4_ops_[32]; 349 static const uint8_t table9_5_emit_[28]; 350 static const uint8_t table9_6_emit_[36]; 351 static const uint8_t table9_7_emit_[56]; 352 static const uint8_t table9_8_emit_[15]; 353 static const uint8_t table9_8_ops_[32]; 354 static const uint8_t table9_9_emit_[28]; 355 static const uint8_t table9_10_emit_[36]; 356 static const uint8_t table9_11_emit_[56]; 357 static const uint8_t table9_12_emit_[15]; 358 static const uint8_t table9_12_ops_[32]; 359 static const uint8_t table9_13_emit_[28]; 360 static const uint8_t table9_14_emit_[36]; 361 static const uint8_t table9_15_emit_[56]; 362 static const uint8_t table9_16_emit_[15]; 363 static const uint8_t table9_16_ops_[32]; 364 static const uint8_t table9_17_emit_[28]; 365 static const uint8_t table9_18_emit_[36]; 366 static const uint8_t table9_19_emit_[56]; 367 static const uint8_t table9_20_emit_[15]; 368 static const uint8_t table9_20_ops_[32]; 369 static const uint8_t table9_21_emit_[28]; 370 static const uint8_t table9_22_emit_[36]; 371 static const uint8_t table9_23_emit_[56]; 372 static const uint8_t table9_24_emit_[15]; 373 static const uint8_t table9_24_ops_[32]; 374 static const uint8_t table9_25_emit_[28]; 375 static const uint8_t table9_26_emit_[36]; 376 static const uint8_t table9_27_emit_[56]; 377 static const uint8_t table9_28_emit_[16]; 378 static const uint8_t table9_28_ops_[32]; 379 static const uint8_t table9_29_emit_[28]; 380 static const uint8_t table9_30_emit_[36]; 381 static const uint8_t table9_31_emit_[56]; 382 static const uint8_t table9_32_emit_[16]; 383 static const uint8_t table9_33_emit_[27]; 384 static const uint8_t table9_33_ops_[32]; 385 static const uint8_t table9_34_emit_[36]; 386 static const uint8_t table9_35_emit_[56]; 387 static const uint8_t table9_36_emit_[16]; 388 static const uint8_t table9_37_emit_[27]; 389 static const uint8_t table9_37_ops_[32]; 390 static const uint8_t table9_38_emit_[36]; 391 static const uint8_t table9_39_emit_[56]; 392 static const uint8_t table9_40_emit_[43]; 393 static const uint8_t table9_40_ops_[32]; 394 static const uint8_t table9_41_emit_[28]; 395 static const uint8_t table9_41_ops_[32]; 396 static const uint8_t table9_42_emit_[43]; 397 static const uint8_t table9_42_ops_[32]; 398 static const uint8_t table9_43_emit_[28]; 399 static const uint8_t table9_44_emit_[43]; 400 static const uint8_t table9_44_ops_[32]; 401 static const uint8_t table9_45_emit_[28]; 402 static const uint8_t table9_46_emit_[43]; 403 static const uint8_t table9_46_ops_[32]; 404 static const uint8_t table9_47_emit_[28]; 405 static const uint8_t table9_48_emit_[43]; 406 static const uint8_t table9_48_ops_[32]; 407 static const uint8_t table9_49_emit_[28]; 408 static const uint8_t table9_50_emit_[43]; 409 static const uint8_t table9_50_ops_[32]; 410 static const uint8_t table9_51_emit_[28]; 411 static const uint8_t table9_52_emit_[43]; 412 static const uint8_t table9_52_ops_[32]; 413 static const uint8_t table9_53_emit_[28]; 414 static const uint8_t table9_54_emit_[43]; 415 static const uint8_t table9_54_ops_[32]; 416 static const uint8_t table9_55_emit_[28]; 417 static const uint8_t table9_56_emit_[43]; 418 static const uint8_t table9_56_ops_[32]; 419 static const uint8_t table9_57_emit_[28]; 420 static const uint8_t table9_58_emit_[43]; 421 static const uint8_t table9_58_ops_[32]; 422 static const uint8_t table9_59_emit_[28]; 423 static const uint8_t table9_60_emit_[43]; 424 static const uint8_t table9_60_ops_[32]; 425 static const uint8_t table9_61_emit_[28]; 426 static const uint8_t table9_62_emit_[44]; 427 static const uint8_t table9_62_ops_[32]; 428 static const uint8_t table9_63_emit_[28]; 429 static const uint8_t table9_64_emit_[44]; 430 static const uint8_t table9_65_emit_[27]; 431 static const uint8_t table9_65_ops_[32]; 432 static const uint8_t table9_66_emit_[44]; 433 static const uint8_t table9_67_emit_[27]; 434 static const uint8_t table9_67_ops_[32]; 435 static const uint8_t table9_68_emit_[44]; 436 static const uint8_t table9_69_emit_[27]; 437 static const uint8_t table9_69_ops_[32]; 438 static const uint8_t table9_70_emit_[44]; 439 static const uint8_t table9_71_emit_[27]; 440 static const uint8_t table9_71_ops_[32]; 441 static const uint8_t table9_72_emit_[44]; 442 static const uint8_t table9_73_emit_[27]; 443 static const uint8_t table9_73_ops_[32]; 444 static const uint8_t table9_74_emit_[44]; 445 static const uint8_t table9_75_emit_[27]; 446 static const uint8_t table9_75_ops_[32]; 447 static const uint8_t table9_76_emit_[44]; 448 static const uint8_t table9_77_emit_[27]; 449 static const uint8_t table9_77_ops_[32]; 450 static const uint8_t table9_78_emit_[44]; 451 static const uint8_t table9_79_emit_[27]; 452 static const uint8_t table9_79_ops_[32]; 453 static const uint8_t table9_80_emit_[44]; 454 static const uint8_t table9_81_emit_[27]; 455 static const uint8_t table9_81_ops_[32]; 456 static const uint8_t table9_82_emit_[44]; 457 static const uint8_t table9_83_emit_[27]; 458 static const uint8_t table9_83_ops_[32]; 459 static const uint8_t table9_84_emit_[44]; 460 static const uint8_t table9_85_emit_[27]; 461 static const uint8_t table9_85_ops_[32]; 462 static const uint8_t table9_86_emit_[44]; 463 static const uint8_t table9_87_emit_[27]; 464 static const uint8_t table9_87_ops_[32]; 465 static const uint8_t table9_88_emit_[44]; 466 static const uint8_t table9_89_emit_[27]; 467 static const uint8_t table9_89_ops_[32]; 468 static const uint8_t table9_90_emit_[44]; 469 static const uint8_t table9_91_emit_[28]; 470 static const uint8_t table9_92_emit_[20]; 471 static const uint8_t table9_92_ops_[32]; 472 static const uint8_t table9_93_emit_[20]; 473 static const uint8_t table9_94_emit_[20]; 474 static const uint8_t table9_95_emit_[20]; 475 static const uint8_t table9_96_emit_[20]; 476 static const uint8_t table9_97_emit_[20]; 477 static const uint8_t table9_98_emit_[20]; 478 static const uint8_t table9_99_emit_[20]; 479 static const uint8_t table9_100_emit_[20]; 480 static const uint8_t table9_101_emit_[20]; 481 static const uint8_t table9_102_emit_[20]; 482 static const uint8_t table9_103_emit_[20]; 483 static const uint8_t table9_104_emit_[20]; 484 static const uint8_t table9_105_emit_[20]; 485 static const uint8_t table9_106_emit_[20]; 486 static const uint8_t table9_107_emit_[20]; 487 static const uint8_t table9_108_emit_[20]; 488 static const uint8_t table9_109_emit_[20]; 489 static const uint8_t table9_110_emit_[20]; 490 static const uint8_t table9_111_emit_[20]; 491 static const uint8_t table9_112_emit_[20]; 492 static const uint8_t table9_113_emit_[20]; 493 static const uint8_t table9_114_emit_[20]; 494 static const uint8_t table9_115_emit_[20]; 495 static const uint8_t table9_116_emit_[20]; 496 static const uint8_t table9_117_emit_[20]; 497 static const uint8_t table9_118_emit_[20]; 498 static const uint8_t table9_119_emit_[20]; 499 static const uint8_t table9_120_emit_[20]; 500 static const uint8_t table9_121_emit_[20]; 501 static const uint8_t table9_122_emit_[20]; 502 static const uint8_t table9_123_emit_[20]; 503 static const uint8_t table9_124_emit_[2]; 504 static const uint8_t table9_124_ops_[32]; 505 static const uint8_t table9_125_emit_[2]; 506 static const uint8_t table9_126_emit_[2]; 507 static const uint8_t table9_127_emit_[10]; 508 static const uint8_t table9_127_ops_[32]; 509 static const uint8_t* const table9_emit_[128]; 510 static const uint8_t* const table9_ops_[128]; 511 static const uint16_t table1_0_inner_[8]; 512 static const uint8_t table1_0_outer_[64]; 513 static const uint16_t table1_1_inner_[14]; 514 static const uint8_t table1_1_outer_[64]; 515 static const uint16_t table1_2_inner_[18]; 516 static const uint8_t table1_2_outer_[64]; 517 static const uint8_t table1_3_emit_[68]; 518 static const uint16_t table1_3_inner_[35]; 519 static const uint8_t table1_3_outer_[64]; 520 static const uint16_t table1_4_inner_[8]; 521 static const uint8_t table1_7_emit_[68]; 522 static const uint16_t table1_8_inner_[8]; 523 static const uint8_t table1_11_emit_[68]; 524 static const uint16_t table1_12_inner_[8]; 525 static const uint8_t table1_15_emit_[68]; 526 static const uint16_t table1_16_inner_[8]; 527 static const uint8_t table1_19_emit_[68]; 528 static const uint16_t table1_20_inner_[8]; 529 static const uint8_t table1_23_emit_[68]; 530 static const uint16_t table1_24_inner_[8]; 531 static const uint8_t table1_27_emit_[68]; 532 static const uint16_t table1_28_inner_[8]; 533 static const uint8_t table1_31_emit_[68]; 534 static const uint16_t table1_33_inner_[14]; 535 static const uint8_t table1_35_emit_[68]; 536 static const uint16_t table1_37_inner_[14]; 537 static const uint8_t table1_39_emit_[68]; 538 static const uint16_t table1_40_inner_[22]; 539 static const uint8_t table1_40_outer_[64]; 540 static const uint8_t table1_41_emit_[92]; 541 static const uint16_t table1_41_inner_[47]; 542 static const uint8_t table1_41_outer_[64]; 543 static const uint16_t table1_42_inner_[22]; 544 static const uint8_t table1_43_emit_[92]; 545 static const uint16_t table1_44_inner_[22]; 546 static const uint8_t table1_45_emit_[92]; 547 static const uint16_t table1_46_inner_[22]; 548 static const uint8_t table1_47_emit_[92]; 549 static const uint16_t table1_48_inner_[22]; 550 static const uint8_t table1_49_emit_[92]; 551 static const uint16_t table1_50_inner_[22]; 552 static const uint8_t table1_51_emit_[92]; 553 static const uint16_t table1_52_inner_[22]; 554 static const uint8_t table1_53_emit_[92]; 555 static const uint16_t table1_54_inner_[22]; 556 static const uint8_t table1_55_emit_[92]; 557 static const uint16_t table1_56_inner_[22]; 558 static const uint8_t table1_57_emit_[92]; 559 static const uint16_t table1_58_inner_[22]; 560 static const uint8_t table1_59_emit_[92]; 561 static const uint16_t table1_60_inner_[22]; 562 static const uint8_t table1_61_emit_[92]; 563 static const uint16_t table1_62_inner_[22]; 564 static const uint8_t table1_63_emit_[92]; 565 static const uint8_t table1_65_emit_[91]; 566 static const uint16_t table1_65_inner_[47]; 567 static const uint8_t table1_67_emit_[91]; 568 static const uint16_t table1_67_inner_[47]; 569 static const uint8_t table1_69_emit_[91]; 570 static const uint16_t table1_69_inner_[47]; 571 static const uint8_t table1_71_emit_[91]; 572 static const uint16_t table1_71_inner_[47]; 573 static const uint8_t table1_73_emit_[91]; 574 static const uint16_t table1_73_inner_[47]; 575 static const uint8_t table1_75_emit_[91]; 576 static const uint16_t table1_75_inner_[47]; 577 static const uint8_t table1_77_emit_[91]; 578 static const uint16_t table1_77_inner_[47]; 579 static const uint8_t table1_79_emit_[91]; 580 static const uint16_t table1_79_inner_[47]; 581 static const uint8_t table1_81_emit_[91]; 582 static const uint16_t table1_81_inner_[47]; 583 static const uint8_t table1_83_emit_[91]; 584 static const uint16_t table1_83_inner_[47]; 585 static const uint8_t table1_85_emit_[91]; 586 static const uint16_t table1_85_inner_[47]; 587 static const uint8_t table1_87_emit_[91]; 588 static const uint16_t table1_87_inner_[47]; 589 static const uint8_t table1_89_emit_[91]; 590 static const uint16_t table1_89_inner_[47]; 591 static const uint8_t table1_91_emit_[91]; 592 static const uint16_t table1_91_inner_[47]; 593 static const uint8_t table1_92_emit_[72]; 594 static const uint16_t table1_92_inner_[37]; 595 static const uint8_t table1_92_outer_[64]; 596 static const uint8_t table1_93_emit_[72]; 597 static const uint8_t table1_94_emit_[72]; 598 static const uint8_t table1_95_emit_[72]; 599 static const uint8_t table1_96_emit_[72]; 600 static const uint8_t table1_97_emit_[72]; 601 static const uint8_t table1_98_emit_[72]; 602 static const uint8_t table1_99_emit_[72]; 603 static const uint8_t table1_100_emit_[72]; 604 static const uint8_t table1_101_emit_[72]; 605 static const uint8_t table1_102_emit_[72]; 606 static const uint8_t table1_103_emit_[72]; 607 static const uint8_t table1_104_emit_[72]; 608 static const uint8_t table1_105_emit_[72]; 609 static const uint8_t table1_106_emit_[72]; 610 static const uint8_t table1_107_emit_[72]; 611 static const uint8_t table1_108_emit_[72]; 612 static const uint8_t table1_109_emit_[72]; 613 static const uint8_t table1_110_emit_[72]; 614 static const uint8_t table1_111_emit_[72]; 615 static const uint8_t table1_112_emit_[72]; 616 static const uint8_t table1_113_emit_[72]; 617 static const uint8_t table1_114_emit_[72]; 618 static const uint8_t table1_115_emit_[72]; 619 static const uint8_t table1_116_emit_[72]; 620 static const uint8_t table1_117_emit_[72]; 621 static const uint8_t table1_118_emit_[72]; 622 static const uint8_t table1_119_emit_[72]; 623 static const uint8_t table1_120_emit_[72]; 624 static const uint8_t table1_121_emit_[72]; 625 static const uint8_t table1_122_emit_[72]; 626 static const uint8_t table1_123_emit_[72]; 627 static const uint8_t table1_124_emit_[40]; 628 static const uint16_t table1_124_inner_[22]; 629 static const uint8_t table1_124_outer_[64]; 630 static const uint8_t table1_125_emit_[40]; 631 static const uint8_t table1_126_emit_[40]; 632 static const uint8_t table1_127_emit_[16]; 633 static const uint16_t table1_127_inner_[18]; 634 static const uint8_t table1_127_outer_[64]; 635 static const uint8_t* const table1_emit_[128]; 636 static const uint16_t* const table1_inner_[128]; 637 static const uint8_t* const table1_outer_[128]; 638 static const uint8_t table13_0_inner_[5]; 639 static const uint8_t table13_0_outer_[8]; 640 static const uint8_t table14_0_outer_[16]; 641 static const uint8_t table15_0_ops_[32]; 642 static const uint8_t table16_0_emit_[6]; 643 static const uint8_t table16_0_ops_[64]; 644 static const uint8_t table17_0_emit_[20]; 645 static const uint8_t table17_0_ops_[32]; 646 static const uint8_t table17_1_emit_[20]; 647 static const uint8_t table17_2_emit_[20]; 648 static const uint8_t table17_3_emit_[11]; 649 static const uint8_t table17_3_ops_[32]; 650 static const uint8_t* const table17_emit_[4]; 651 static const uint8_t* const table17_ops_[4]; 652 static const uint8_t table18_0_emit_[72]; 653 static const uint16_t table18_0_ops_[64]; 654 static const uint8_t table18_1_emit_[72]; 655 static const uint8_t table18_2_emit_[72]; 656 static const uint8_t table18_3_emit_[24]; 657 static const uint16_t table18_3_ops_[64]; 658 static const uint8_t* const table18_emit_[4]; 659 static const uint16_t* const table18_ops_[4]; 660 static const uint8_t table19_0_emit_[136]; 661 static const uint16_t table19_0_ops_[128]; 662 static const uint8_t table19_1_emit_[136]; 663 static const uint8_t table19_2_emit_[136]; 664 static const uint8_t table19_3_emit_[50]; 665 static const uint16_t table19_3_ops_[128]; 666 static const uint8_t* const table19_emit_[4]; 667 static const uint16_t* const table19_ops_[4]; 668 static const uint8_t table20_0_emit_[44]; 669 static const uint16_t table20_0_ops_[128]; 670 static const uint8_t table20_1_emit_[104]; 671 static const uint16_t table20_1_ops_[128]; 672 static const uint8_t table20_2_emit_[44]; 673 static const uint8_t table20_3_emit_[104]; 674 static const uint8_t table20_4_emit_[44]; 675 static const uint8_t table20_5_emit_[104]; 676 static const uint8_t table20_6_emit_[15]; 677 static const uint16_t table20_6_ops_[128]; 678 static const uint8_t table20_7_emit_[64]; 679 static const uint16_t table20_7_ops_[128]; 680 static const uint8_t* const table20_emit_[8]; 681 static const uint16_t* const table20_ops_[8]; 682 static const uint8_t table21_0_emit_[16]; 683 static const uint16_t table21_0_ops_[128]; 684 static const uint8_t table21_1_emit_[28]; 685 static const uint16_t table21_1_ops_[128]; 686 static const uint8_t table21_2_emit_[36]; 687 static const uint16_t table21_2_ops_[128]; 688 static const uint8_t table21_3_emit_[68]; 689 static const uint16_t table21_3_ops_[128]; 690 static const uint8_t table21_4_emit_[16]; 691 static const uint8_t table21_5_emit_[28]; 692 static const uint8_t table21_6_emit_[36]; 693 static const uint8_t table21_7_emit_[68]; 694 static const uint8_t table21_8_emit_[16]; 695 static const uint8_t table21_9_emit_[28]; 696 static const uint8_t table21_10_emit_[36]; 697 static const uint8_t table21_11_emit_[68]; 698 static const uint8_t table21_12_emit_[62]; 699 static const uint16_t table21_12_ops_[128]; 700 static const uint8_t table21_13_emit_[10]; 701 static const uint16_t table21_13_ops_[128]; 702 static const uint8_t table21_14_emit_[23]; 703 static const uint16_t table21_14_ops_[128]; 704 static const uint8_t table21_15_emit_[53]; 705 static const uint16_t table21_15_ops_[128]; 706 static const uint8_t* const table21_emit_[16]; 707 static const uint16_t* const table21_ops_[16]; 708 static const uint8_t table11_0_emit_[1]; 709 static const uint16_t table11_0_ops_[64]; 710 static const uint8_t table11_16_emit_[1]; 711 static const uint8_t table11_32_emit_[1]; 712 static const uint8_t table11_48_emit_[1]; 713 static const uint16_t table11_48_ops_[64]; 714 static const uint8_t table11_49_emit_[1]; 715 static const uint8_t table11_50_emit_[1]; 716 static const uint8_t table11_51_emit_[2]; 717 static const uint16_t table11_51_ops_[64]; 718 static const uint8_t table11_52_emit_[2]; 719 static const uint8_t table11_53_emit_[2]; 720 static const uint8_t table11_54_emit_[2]; 721 static const uint8_t table11_55_emit_[4]; 722 static const uint16_t table11_55_ops_[64]; 723 static const uint8_t table11_56_emit_[4]; 724 static const uint8_t table11_57_emit_[4]; 725 static const uint8_t table11_58_emit_[7]; 726 static const uint16_t table11_58_ops_[64]; 727 static const uint8_t table11_59_emit_[8]; 728 static const uint16_t table11_59_ops_[64]; 729 static const uint8_t table11_60_emit_[8]; 730 static const uint8_t table11_61_emit_[12]; 731 static const uint16_t table11_61_ops_[64]; 732 static const uint8_t table11_62_emit_[16]; 733 static const uint16_t table11_62_ops_[64]; 734 static const uint8_t table11_63_emit_[21]; 735 static const uint16_t table11_63_ops_[64]; 736 static const uint8_t* const table11_emit_[64]; 737 static const uint16_t* const table11_ops_[64]; 738 static const uint8_t table33_0_emit_[8]; 739 static const uint8_t table33_0_inner_[8]; 740 static const uint8_t table37_0_inner_[7]; 741 static const uint8_t table40_0_emit_[7]; 742 static const uint8_t table40_0_inner_[8]; 743 static const uint8_t table41_0_inner_[9]; 744 static const uint8_t table41_0_outer_[16]; 745 static const uint8_t table39_0_emit_[10]; 746 static const uint8_t table39_0_ops_[32]; 747 }; 748 template <typename F> 749 class HuffDecoder : public HuffDecoderCommon { 750 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)751 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 752 : sink_(sink), begin_(begin), end_(end) {} Run()753 bool Run() { 754 while (!done_) { 755 if (!RefillTo13()) { 756 Done0(); 757 break; 758 } 759 const auto index = (buffer_ >> (buffer_len_ - 13)) & 0x1fff; 760 const auto op = GetOp1(index); 761 const int consumed = op & 15; 762 buffer_len_ -= consumed; 763 const auto emit_ofs = op >> 6; 764 switch ((op >> 4) & 3) { 765 case 0: { 766 sink_(GetEmit1(index, emit_ofs + 0)); 767 sink_(GetEmit1(index, emit_ofs + 1)); 768 break; 769 } 770 case 1: { 771 sink_(GetEmit1(index, emit_ofs + 0)); 772 break; 773 } 774 case 2: { 775 DecodeStep0(); 776 break; 777 } 778 case 3: { 779 DecodeStep1(); 780 break; 781 } 782 } 783 } 784 return ok_; 785 } 786 787 private: RefillTo13()788 bool RefillTo13() { 789 switch (buffer_len_) { 790 case 0: { 791 return Read2to8Bytes(); 792 } 793 case 1: 794 case 2: 795 case 3: 796 case 4: { 797 return Read2to7Bytes(); 798 } 799 case 5: 800 case 6: 801 case 7: 802 case 8: { 803 return Read1to7Bytes(); 804 } 805 case 9: 806 case 10: 807 case 11: 808 case 12: { 809 return Read1to6Bytes(); 810 } 811 } 812 return true; 813 } Read2to8Bytes()814 bool Read2to8Bytes() { 815 switch (end_ - begin_) { 816 case 0: 817 case 1: { 818 return false; 819 } 820 case 2: { 821 Fill2(); 822 return true; 823 } 824 case 3: { 825 Fill3(); 826 return true; 827 } 828 case 4: { 829 Fill4(); 830 return true; 831 } 832 case 5: { 833 Fill5(); 834 return true; 835 } 836 case 6: { 837 Fill6(); 838 return true; 839 } 840 case 7: { 841 Fill7(); 842 return true; 843 } 844 default: { 845 Fill8(); 846 return true; 847 } 848 } 849 } Fill2()850 void Fill2() { 851 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 852 (static_cast<uint64_t>(begin_[1]) << 0); 853 begin_ += 2; 854 buffer_len_ += 16; 855 } Fill3()856 void Fill3() { 857 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 858 (static_cast<uint64_t>(begin_[1]) << 8) | 859 (static_cast<uint64_t>(begin_[2]) << 0); 860 begin_ += 3; 861 buffer_len_ += 24; 862 } Fill4()863 void Fill4() { 864 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 865 (static_cast<uint64_t>(begin_[1]) << 16) | 866 (static_cast<uint64_t>(begin_[2]) << 8) | 867 (static_cast<uint64_t>(begin_[3]) << 0); 868 begin_ += 4; 869 buffer_len_ += 32; 870 } Fill5()871 void Fill5() { 872 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 873 (static_cast<uint64_t>(begin_[1]) << 24) | 874 (static_cast<uint64_t>(begin_[2]) << 16) | 875 (static_cast<uint64_t>(begin_[3]) << 8) | 876 (static_cast<uint64_t>(begin_[4]) << 0); 877 begin_ += 5; 878 buffer_len_ += 40; 879 } Fill6()880 void Fill6() { 881 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 882 (static_cast<uint64_t>(begin_[1]) << 32) | 883 (static_cast<uint64_t>(begin_[2]) << 24) | 884 (static_cast<uint64_t>(begin_[3]) << 16) | 885 (static_cast<uint64_t>(begin_[4]) << 8) | 886 (static_cast<uint64_t>(begin_[5]) << 0); 887 begin_ += 6; 888 buffer_len_ += 48; 889 } Fill7()890 void Fill7() { 891 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 892 (static_cast<uint64_t>(begin_[1]) << 40) | 893 (static_cast<uint64_t>(begin_[2]) << 32) | 894 (static_cast<uint64_t>(begin_[3]) << 24) | 895 (static_cast<uint64_t>(begin_[4]) << 16) | 896 (static_cast<uint64_t>(begin_[5]) << 8) | 897 (static_cast<uint64_t>(begin_[6]) << 0); 898 begin_ += 7; 899 buffer_len_ += 56; 900 } Fill8()901 void Fill8() { 902 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 903 (static_cast<uint64_t>(begin_[1]) << 48) | 904 (static_cast<uint64_t>(begin_[2]) << 40) | 905 (static_cast<uint64_t>(begin_[3]) << 32) | 906 (static_cast<uint64_t>(begin_[4]) << 24) | 907 (static_cast<uint64_t>(begin_[5]) << 16) | 908 (static_cast<uint64_t>(begin_[6]) << 8) | 909 (static_cast<uint64_t>(begin_[7]) << 0); 910 begin_ += 8; 911 buffer_len_ += 64; 912 } Read2to7Bytes()913 bool Read2to7Bytes() { 914 switch (end_ - begin_) { 915 case 0: 916 case 1: { 917 return false; 918 } 919 case 2: { 920 Fill2(); 921 return true; 922 } 923 case 3: { 924 Fill3(); 925 return true; 926 } 927 case 4: { 928 Fill4(); 929 return true; 930 } 931 case 5: { 932 Fill5(); 933 return true; 934 } 935 case 6: { 936 Fill6(); 937 return true; 938 } 939 default: { 940 Fill7(); 941 return true; 942 } 943 } 944 } Read1to7Bytes()945 bool Read1to7Bytes() { 946 switch (end_ - begin_) { 947 case 0: { 948 return false; 949 } 950 case 1: { 951 Fill1(); 952 return true; 953 } 954 case 2: { 955 Fill2(); 956 return true; 957 } 958 case 3: { 959 Fill3(); 960 return true; 961 } 962 case 4: { 963 Fill4(); 964 return true; 965 } 966 case 5: { 967 Fill5(); 968 return true; 969 } 970 case 6: { 971 Fill6(); 972 return true; 973 } 974 default: { 975 Fill7(); 976 return true; 977 } 978 } 979 } Fill1()980 void Fill1() { 981 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 982 begin_ += 1; 983 buffer_len_ += 8; 984 } Read1to6Bytes()985 bool Read1to6Bytes() { 986 switch (end_ - begin_) { 987 case 0: { 988 return false; 989 } 990 case 1: { 991 Fill1(); 992 return true; 993 } 994 case 2: { 995 Fill2(); 996 return true; 997 } 998 case 3: { 999 Fill3(); 1000 return true; 1001 } 1002 case 4: { 1003 Fill4(); 1004 return true; 1005 } 1006 case 5: { 1007 Fill5(); 1008 return true; 1009 } 1010 default: { 1011 Fill6(); 1012 return true; 1013 } 1014 } 1015 } Done0()1016 void Done0() { 1017 done_ = true; 1018 switch (end_ - begin_) { 1019 case 1: { 1020 Fill1(); 1021 break; 1022 } 1023 } 1024 switch (buffer_len_) { 1025 case 1: 1026 case 2: 1027 case 3: 1028 case 4: { 1029 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1030 return; 1031 } 1032 case 5: { 1033 const auto index = buffer_ & 31; 1034 const auto op = GetOp2(index); 1035 switch (op & 3) { 1036 case 0: { 1037 sink_(GetEmit2(index, (op >> 2) + 0)); 1038 break; 1039 } 1040 case 1: { 1041 ok_ = false; 1042 break; 1043 } 1044 } 1045 return; 1046 } 1047 case 6: { 1048 const auto index = buffer_ & 63; 1049 const auto op = GetOp3(index); 1050 switch (op & 3) { 1051 case 0: { 1052 ok_ = false; 1053 break; 1054 } 1055 case 1: { 1056 sink_(GetEmit3(index, (op >> 2) + 0)); 1057 break; 1058 } 1059 } 1060 return; 1061 } 1062 case 7: { 1063 const auto index = buffer_ & 127; 1064 const auto op = GetOp4(index); 1065 switch (op & 3) { 1066 case 0: { 1067 ok_ = false; 1068 break; 1069 } 1070 case 1: { 1071 sink_(GetEmit4(index, (op >> 2) + 0)); 1072 break; 1073 } 1074 } 1075 return; 1076 } 1077 case 8: { 1078 const auto index = buffer_ & 255; 1079 const auto op = GetOp5(index); 1080 switch (op & 3) { 1081 case 0: { 1082 ok_ = false; 1083 break; 1084 } 1085 case 1: { 1086 sink_(GetEmit5(index, (op >> 2) + 0)); 1087 break; 1088 } 1089 } 1090 return; 1091 } 1092 case 9: { 1093 const auto index = buffer_ & 511; 1094 const auto op = GetOp6(index); 1095 switch (op & 3) { 1096 case 0: { 1097 ok_ = false; 1098 break; 1099 } 1100 case 1: { 1101 sink_(GetEmit6(index, (op >> 2) + 0)); 1102 break; 1103 } 1104 } 1105 return; 1106 } 1107 case 10: { 1108 const auto index = buffer_ & 1023; 1109 const auto op = GetOp7(index); 1110 switch (op & 3) { 1111 case 0: { 1112 sink_(GetEmit7(index, (op >> 2) + 0)); 1113 sink_(GetEmit7(index, (op >> 2) + 1)); 1114 break; 1115 } 1116 case 1: { 1117 ok_ = false; 1118 break; 1119 } 1120 case 2: { 1121 sink_(GetEmit7(index, (op >> 2) + 0)); 1122 break; 1123 } 1124 } 1125 return; 1126 } 1127 case 11: { 1128 const auto index = buffer_ & 2047; 1129 const auto op = GetOp8(index); 1130 switch (op & 3) { 1131 case 0: { 1132 ok_ = false; 1133 break; 1134 } 1135 case 1: { 1136 sink_(GetEmit8(index, (op >> 2) + 0)); 1137 sink_(GetEmit8(index, (op >> 2) + 1)); 1138 break; 1139 } 1140 case 2: { 1141 sink_(GetEmit8(index, (op >> 2) + 0)); 1142 break; 1143 } 1144 } 1145 return; 1146 } 1147 case 12: { 1148 const auto index = buffer_ & 4095; 1149 const auto op = GetOp9(index); 1150 switch (op & 3) { 1151 case 0: { 1152 ok_ = false; 1153 break; 1154 } 1155 case 1: { 1156 sink_(GetEmit9(index, (op >> 2) + 0)); 1157 sink_(GetEmit9(index, (op >> 2) + 1)); 1158 break; 1159 } 1160 case 2: { 1161 sink_(GetEmit9(index, (op >> 2) + 0)); 1162 break; 1163 } 1164 } 1165 return; 1166 } 1167 case 0: { 1168 return; 1169 } 1170 } 1171 } DecodeStep0()1172 void DecodeStep0() { 1173 if (!RefillTo1()) { 1174 Done1(); 1175 return; 1176 } 1177 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1178 const auto op = GetOp10(index); 1179 const int consumed = op & 1; 1180 buffer_len_ -= consumed; 1181 const auto emit_ofs = op >> 1; 1182 sink_(GetEmit10(index, emit_ofs + 0)); 1183 } RefillTo1()1184 bool RefillTo1() { 1185 switch (buffer_len_) { 1186 case 0: { 1187 return Read1to8Bytes(); 1188 } 1189 } 1190 return true; 1191 } Read1to8Bytes()1192 bool Read1to8Bytes() { 1193 switch (end_ - begin_) { 1194 case 0: { 1195 return false; 1196 } 1197 case 1: { 1198 Fill1(); 1199 return true; 1200 } 1201 case 2: { 1202 Fill2(); 1203 return true; 1204 } 1205 case 3: { 1206 Fill3(); 1207 return true; 1208 } 1209 case 4: { 1210 Fill4(); 1211 return true; 1212 } 1213 case 5: { 1214 Fill5(); 1215 return true; 1216 } 1217 case 6: { 1218 Fill6(); 1219 return true; 1220 } 1221 case 7: { 1222 Fill7(); 1223 return true; 1224 } 1225 default: { 1226 Fill8(); 1227 return true; 1228 } 1229 } 1230 } Done1()1231 void Done1() { 1232 done_ = true; 1233 ok_ = false; 1234 } DecodeStep1()1235 void DecodeStep1() { 1236 if (!RefillTo12()) { 1237 Done2(); 1238 return; 1239 } 1240 const auto index = (buffer_ >> (buffer_len_ - 12)) & 0xfff; 1241 const auto op = GetOp11(index); 1242 const int consumed = op & 15; 1243 buffer_len_ -= consumed; 1244 const auto emit_ofs = op >> 9; 1245 switch ((op >> 4) & 31) { 1246 case 0: { 1247 sink_(GetEmit11(index, emit_ofs + 0)); 1248 break; 1249 } 1250 case 1: { 1251 DecodeStep2(); 1252 break; 1253 } 1254 case 2: { 1255 DecodeStep3(); 1256 break; 1257 } 1258 case 3: { 1259 DecodeStep4(); 1260 break; 1261 } 1262 case 4: { 1263 DecodeStep5(); 1264 break; 1265 } 1266 case 5: { 1267 DecodeStep6(); 1268 break; 1269 } 1270 case 6: { 1271 DecodeStep7(); 1272 break; 1273 } 1274 case 7: { 1275 DecodeStep8(); 1276 break; 1277 } 1278 case 8: { 1279 DecodeStep15(); 1280 break; 1281 } 1282 case 9: { 1283 DecodeStep9(); 1284 break; 1285 } 1286 case 10: { 1287 DecodeStep10(); 1288 break; 1289 } 1290 case 11: { 1291 DecodeStep11(); 1292 break; 1293 } 1294 case 12: { 1295 DecodeStep12(); 1296 break; 1297 } 1298 case 13: { 1299 DecodeStep16(); 1300 break; 1301 } 1302 case 14: { 1303 DecodeStep13(); 1304 break; 1305 } 1306 case 15: { 1307 DecodeStep14(); 1308 break; 1309 } 1310 case 16: { 1311 DecodeStep17(); 1312 break; 1313 } 1314 } 1315 } RefillTo12()1316 bool RefillTo12() { 1317 switch (buffer_len_) { 1318 case 0: { 1319 return Read2to8Bytes(); 1320 } 1321 case 1: 1322 case 2: 1323 case 3: { 1324 return Read2to7Bytes(); 1325 } 1326 case 4: 1327 case 5: 1328 case 6: 1329 case 7: 1330 case 8: { 1331 return Read1to7Bytes(); 1332 } 1333 case 9: 1334 case 10: 1335 case 11: { 1336 return Read1to6Bytes(); 1337 } 1338 } 1339 return true; 1340 } Done2()1341 void Done2() { 1342 done_ = true; 1343 switch (end_ - begin_) { 1344 case 1: { 1345 Fill1(); 1346 break; 1347 } 1348 } 1349 switch (buffer_len_) { 1350 case 1: { 1351 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1352 return; 1353 } 1354 case 2: { 1355 const auto index = buffer_ & 3; 1356 const auto op = GetOp12(index); 1357 switch (op & 1) { 1358 case 0: { 1359 sink_(GetEmit12(index, (op >> 1) + 0)); 1360 break; 1361 } 1362 } 1363 return; 1364 } 1365 case 3: { 1366 const auto index = buffer_ & 7; 1367 const auto op = GetOp13(index); 1368 switch (op & 3) { 1369 case 0: { 1370 ok_ = false; 1371 break; 1372 } 1373 case 1: { 1374 sink_(GetEmit13(index, (op >> 2) + 0)); 1375 break; 1376 } 1377 } 1378 return; 1379 } 1380 case 4: { 1381 const auto index = buffer_ & 15; 1382 const auto op = GetOp14(index); 1383 switch (op & 3) { 1384 case 0: { 1385 ok_ = false; 1386 break; 1387 } 1388 case 1: { 1389 sink_(GetEmit14(index, (op >> 2) + 0)); 1390 break; 1391 } 1392 } 1393 return; 1394 } 1395 case 5: { 1396 const auto index = buffer_ & 31; 1397 const auto op = GetOp15(index); 1398 switch (op & 3) { 1399 case 0: { 1400 ok_ = false; 1401 break; 1402 } 1403 case 1: { 1404 sink_(GetEmit15(index, (op >> 2) + 0)); 1405 break; 1406 } 1407 } 1408 return; 1409 } 1410 case 6: { 1411 const auto index = buffer_ & 63; 1412 const auto op = GetOp16(index); 1413 switch (op & 3) { 1414 case 0: { 1415 ok_ = false; 1416 break; 1417 } 1418 case 1: { 1419 sink_(GetEmit16(index, (op >> 2) + 0)); 1420 break; 1421 } 1422 } 1423 return; 1424 } 1425 case 7: { 1426 const auto index = buffer_ & 127; 1427 const auto op = GetOp17(index); 1428 switch (op & 3) { 1429 case 0: { 1430 sink_(GetEmit17(index, (op >> 2) + 0)); 1431 sink_(GetEmit17(index, (op >> 2) + 1)); 1432 break; 1433 } 1434 case 1: { 1435 ok_ = false; 1436 break; 1437 } 1438 case 2: { 1439 sink_(GetEmit17(index, (op >> 2) + 0)); 1440 break; 1441 } 1442 } 1443 return; 1444 } 1445 case 8: { 1446 const auto index = buffer_ & 255; 1447 const auto op = GetOp18(index); 1448 switch (op & 3) { 1449 case 0: { 1450 ok_ = false; 1451 break; 1452 } 1453 case 1: { 1454 sink_(GetEmit18(index, (op >> 2) + 0)); 1455 sink_(GetEmit18(index, (op >> 2) + 1)); 1456 break; 1457 } 1458 case 2: { 1459 sink_(GetEmit18(index, (op >> 2) + 0)); 1460 break; 1461 } 1462 } 1463 return; 1464 } 1465 case 9: { 1466 const auto index = buffer_ & 511; 1467 const auto op = GetOp19(index); 1468 switch (op & 3) { 1469 case 0: { 1470 ok_ = false; 1471 break; 1472 } 1473 case 1: { 1474 sink_(GetEmit19(index, (op >> 2) + 0)); 1475 sink_(GetEmit19(index, (op >> 2) + 1)); 1476 break; 1477 } 1478 case 2: { 1479 sink_(GetEmit19(index, (op >> 2) + 0)); 1480 break; 1481 } 1482 } 1483 return; 1484 } 1485 case 10: { 1486 const auto index = buffer_ & 1023; 1487 const auto op = GetOp20(index); 1488 switch (op & 3) { 1489 case 0: { 1490 ok_ = false; 1491 break; 1492 } 1493 case 1: { 1494 sink_(GetEmit20(index, (op >> 2) + 0)); 1495 sink_(GetEmit20(index, (op >> 2) + 1)); 1496 break; 1497 } 1498 case 2: { 1499 sink_(GetEmit20(index, (op >> 2) + 0)); 1500 break; 1501 } 1502 } 1503 return; 1504 } 1505 case 11: { 1506 const auto index = buffer_ & 2047; 1507 const auto op = GetOp21(index); 1508 switch (op & 3) { 1509 case 0: { 1510 ok_ = false; 1511 break; 1512 } 1513 case 1: { 1514 sink_(GetEmit21(index, (op >> 2) + 0)); 1515 sink_(GetEmit21(index, (op >> 2) + 1)); 1516 break; 1517 } 1518 case 2: { 1519 sink_(GetEmit21(index, (op >> 2) + 0)); 1520 break; 1521 } 1522 } 1523 return; 1524 } 1525 case 0: { 1526 return; 1527 } 1528 } 1529 } DecodeStep2()1530 void DecodeStep2() { 1531 if (!RefillTo1()) { 1532 Done3(); 1533 return; 1534 } 1535 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1536 const auto op = GetOp22(index); 1537 const int consumed = op & 1; 1538 buffer_len_ -= consumed; 1539 const auto emit_ofs = op >> 1; 1540 sink_(GetEmit22(index, emit_ofs + 0)); 1541 } Done3()1542 void Done3() { 1543 done_ = true; 1544 ok_ = false; 1545 } DecodeStep3()1546 void DecodeStep3() { 1547 if (!RefillTo1()) { 1548 Done4(); 1549 return; 1550 } 1551 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1552 const auto op = GetOp23(index); 1553 const int consumed = op & 1; 1554 buffer_len_ -= consumed; 1555 const auto emit_ofs = op >> 1; 1556 sink_(GetEmit23(index, emit_ofs + 0)); 1557 } Done4()1558 void Done4() { 1559 done_ = true; 1560 ok_ = false; 1561 } DecodeStep4()1562 void DecodeStep4() { 1563 if (!RefillTo1()) { 1564 Done5(); 1565 return; 1566 } 1567 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1568 const auto op = GetOp24(index); 1569 const int consumed = op & 1; 1570 buffer_len_ -= consumed; 1571 const auto emit_ofs = op >> 1; 1572 sink_(GetEmit24(index, emit_ofs + 0)); 1573 } Done5()1574 void Done5() { 1575 done_ = true; 1576 ok_ = false; 1577 } DecodeStep5()1578 void DecodeStep5() { 1579 if (!RefillTo1()) { 1580 Done6(); 1581 return; 1582 } 1583 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1584 const auto op = GetOp25(index); 1585 const int consumed = op & 1; 1586 buffer_len_ -= consumed; 1587 const auto emit_ofs = op >> 1; 1588 sink_(GetEmit25(index, emit_ofs + 0)); 1589 } Done6()1590 void Done6() { 1591 done_ = true; 1592 ok_ = false; 1593 } DecodeStep6()1594 void DecodeStep6() { 1595 if (!RefillTo1()) { 1596 Done7(); 1597 return; 1598 } 1599 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1600 const auto op = GetOp26(index); 1601 const int consumed = op & 1; 1602 buffer_len_ -= consumed; 1603 const auto emit_ofs = op >> 1; 1604 sink_(GetEmit26(index, emit_ofs + 0)); 1605 } Done7()1606 void Done7() { 1607 done_ = true; 1608 ok_ = false; 1609 } DecodeStep7()1610 void DecodeStep7() { 1611 if (!RefillTo1()) { 1612 Done8(); 1613 return; 1614 } 1615 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1616 const auto op = GetOp27(index); 1617 const int consumed = op & 1; 1618 buffer_len_ -= consumed; 1619 const auto emit_ofs = op >> 1; 1620 sink_(GetEmit27(index, emit_ofs + 0)); 1621 } Done8()1622 void Done8() { 1623 done_ = true; 1624 ok_ = false; 1625 } DecodeStep8()1626 void DecodeStep8() { 1627 if (!RefillTo1()) { 1628 Done9(); 1629 return; 1630 } 1631 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1632 const auto op = GetOp28(index); 1633 const int consumed = op & 1; 1634 buffer_len_ -= consumed; 1635 const auto emit_ofs = op >> 1; 1636 sink_(GetEmit28(index, emit_ofs + 0)); 1637 } Done9()1638 void Done9() { 1639 done_ = true; 1640 ok_ = false; 1641 } DecodeStep9()1642 void DecodeStep9() { 1643 if (!RefillTo2()) { 1644 Done10(); 1645 return; 1646 } 1647 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1648 const auto op = GetOp29(index); 1649 const int consumed = op & 3; 1650 buffer_len_ -= consumed; 1651 const auto emit_ofs = op >> 2; 1652 sink_(GetEmit29(index, emit_ofs + 0)); 1653 } RefillTo2()1654 bool RefillTo2() { 1655 switch (buffer_len_) { 1656 case 0: { 1657 return Read1to8Bytes(); 1658 } 1659 case 1: { 1660 return Read1to7Bytes(); 1661 } 1662 } 1663 return true; 1664 } Done10()1665 void Done10() { 1666 done_ = true; 1667 switch (buffer_len_) { 1668 case 1: 1669 case 0: { 1670 ok_ = false; 1671 return; 1672 } 1673 } 1674 } DecodeStep10()1675 void DecodeStep10() { 1676 if (!RefillTo2()) { 1677 Done11(); 1678 return; 1679 } 1680 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1681 const auto op = GetOp30(index); 1682 const int consumed = op & 3; 1683 buffer_len_ -= consumed; 1684 const auto emit_ofs = op >> 2; 1685 sink_(GetEmit30(index, emit_ofs + 0)); 1686 } Done11()1687 void Done11() { 1688 done_ = true; 1689 switch (buffer_len_) { 1690 case 1: 1691 case 0: { 1692 ok_ = false; 1693 return; 1694 } 1695 } 1696 } DecodeStep11()1697 void DecodeStep11() { 1698 if (!RefillTo2()) { 1699 Done12(); 1700 return; 1701 } 1702 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1703 const auto op = GetOp31(index); 1704 const int consumed = op & 3; 1705 buffer_len_ -= consumed; 1706 const auto emit_ofs = op >> 2; 1707 sink_(GetEmit31(index, emit_ofs + 0)); 1708 } Done12()1709 void Done12() { 1710 done_ = true; 1711 switch (buffer_len_) { 1712 case 1: 1713 case 0: { 1714 ok_ = false; 1715 return; 1716 } 1717 } 1718 } DecodeStep12()1719 void DecodeStep12() { 1720 if (!RefillTo2()) { 1721 Done13(); 1722 return; 1723 } 1724 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1725 const auto op = GetOp32(index); 1726 const int consumed = op & 3; 1727 buffer_len_ -= consumed; 1728 const auto emit_ofs = op >> 2; 1729 sink_(GetEmit32(index, emit_ofs + 0)); 1730 } Done13()1731 void Done13() { 1732 done_ = true; 1733 switch (buffer_len_) { 1734 case 1: 1735 case 0: { 1736 ok_ = false; 1737 return; 1738 } 1739 } 1740 } DecodeStep13()1741 void DecodeStep13() { 1742 if (!RefillTo3()) { 1743 Done14(); 1744 return; 1745 } 1746 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1747 const auto op = GetOp33(index); 1748 const int consumed = op & 3; 1749 buffer_len_ -= consumed; 1750 const auto emit_ofs = op >> 2; 1751 sink_(GetEmit33(index, emit_ofs + 0)); 1752 } RefillTo3()1753 bool RefillTo3() { 1754 switch (buffer_len_) { 1755 case 0: { 1756 return Read1to8Bytes(); 1757 } 1758 case 1: 1759 case 2: { 1760 return Read1to7Bytes(); 1761 } 1762 } 1763 return true; 1764 } Done14()1765 void Done14() { 1766 done_ = true; 1767 switch (buffer_len_) { 1768 case 1: 1769 case 2: 1770 case 0: { 1771 ok_ = false; 1772 return; 1773 } 1774 } 1775 } DecodeStep14()1776 void DecodeStep14() { 1777 if (!RefillTo3()) { 1778 Done15(); 1779 return; 1780 } 1781 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1782 const auto op = GetOp34(index); 1783 const int consumed = op & 3; 1784 buffer_len_ -= consumed; 1785 const auto emit_ofs = op >> 2; 1786 sink_(GetEmit34(index, emit_ofs + 0)); 1787 } Done15()1788 void Done15() { 1789 done_ = true; 1790 switch (buffer_len_) { 1791 case 1: 1792 case 2: 1793 case 0: { 1794 ok_ = false; 1795 return; 1796 } 1797 } 1798 } DecodeStep15()1799 void DecodeStep15() { 1800 if (!RefillTo2()) { 1801 Done16(); 1802 return; 1803 } 1804 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1805 const auto op = GetOp35(index); 1806 const int consumed = op & 3; 1807 buffer_len_ -= consumed; 1808 const auto emit_ofs = op >> 2; 1809 sink_(GetEmit35(index, emit_ofs + 0)); 1810 } Done16()1811 void Done16() { 1812 done_ = true; 1813 switch (buffer_len_) { 1814 case 1: { 1815 const auto index = buffer_ & 1; 1816 const auto op = GetOp36(index); 1817 switch (op & 1) { 1818 case 0: { 1819 sink_(GetEmit36(index, (op >> 1) + 0)); 1820 break; 1821 } 1822 case 1: { 1823 ok_ = false; 1824 break; 1825 } 1826 } 1827 return; 1828 } 1829 case 0: { 1830 ok_ = false; 1831 return; 1832 } 1833 } 1834 } DecodeStep16()1835 void DecodeStep16() { 1836 if (!RefillTo3()) { 1837 Done17(); 1838 return; 1839 } 1840 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1841 const auto op = GetOp37(index); 1842 const int consumed = op & 3; 1843 buffer_len_ -= consumed; 1844 const auto emit_ofs = op >> 2; 1845 sink_(GetEmit37(index, emit_ofs + 0)); 1846 } Done17()1847 void Done17() { 1848 done_ = true; 1849 switch (buffer_len_) { 1850 case 1: 1851 case 0: { 1852 ok_ = false; 1853 return; 1854 } 1855 case 2: { 1856 const auto index = buffer_ & 3; 1857 const auto op = GetOp38(index); 1858 switch (op & 1) { 1859 case 0: { 1860 sink_(GetEmit38(index, (op >> 1) + 0)); 1861 break; 1862 } 1863 case 1: { 1864 ok_ = false; 1865 break; 1866 } 1867 } 1868 return; 1869 } 1870 } 1871 } DecodeStep17()1872 void DecodeStep17() { 1873 if (!RefillTo5()) { 1874 Done18(); 1875 return; 1876 } 1877 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 1878 const auto op = GetOp39(index); 1879 const int consumed = op & 7; 1880 buffer_len_ -= consumed; 1881 const auto emit_ofs = op >> 4; 1882 switch ((op >> 3) & 1) { 1883 case 0: { 1884 sink_(GetEmit39(index, emit_ofs + 0)); 1885 break; 1886 } 1887 case 1: { 1888 begin_ = end_; 1889 buffer_len_ = 0; 1890 break; 1891 } 1892 } 1893 } RefillTo5()1894 bool RefillTo5() { 1895 switch (buffer_len_) { 1896 case 0: { 1897 return Read1to8Bytes(); 1898 } 1899 case 1: 1900 case 2: 1901 case 3: 1902 case 4: { 1903 return Read1to7Bytes(); 1904 } 1905 } 1906 return true; 1907 } Done18()1908 void Done18() { 1909 done_ = true; 1910 switch (buffer_len_) { 1911 case 1: 1912 case 2: { 1913 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1914 return; 1915 } 1916 case 3: { 1917 const auto index = buffer_ & 7; 1918 const auto op = GetOp40(index); 1919 switch (op & 1) { 1920 case 0: { 1921 sink_(GetEmit40(index, (op >> 1) + 0)); 1922 break; 1923 } 1924 } 1925 return; 1926 } 1927 case 4: { 1928 const auto index = buffer_ & 15; 1929 const auto op = GetOp41(index); 1930 switch (op & 3) { 1931 case 0: { 1932 ok_ = false; 1933 break; 1934 } 1935 case 1: { 1936 sink_(GetEmit41(index, (op >> 2) + 0)); 1937 break; 1938 } 1939 } 1940 return; 1941 } 1942 case 0: { 1943 return; 1944 } 1945 } 1946 } 1947 F sink_; 1948 const uint8_t* begin_; 1949 const uint8_t* const end_; 1950 uint64_t buffer_ = 0; 1951 int buffer_len_ = 0; 1952 bool ok_ = true; 1953 bool done_ = false; 1954 }; 1955 } // namespace geometry_13_12_5 1956 } // namespace grpc_core 1957 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_13_12_5_H 1958