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_12_15_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_12_15_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_12_15 { 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 } GetOp1(size_t i)66 static inline uint64_t GetOp1(size_t i) { 67 return table1_inner_[i >> 7][table1_outer_[i >> 7][i & 0x7f]]; 68 } GetEmit1(size_t i,size_t emit)69 static inline uint64_t GetEmit1(size_t i, size_t emit) { 70 return table1_emit_[i >> 7][emit]; 71 } GetOp9(size_t i)72 static inline uint64_t GetOp9(size_t i) { return i ? 3 : 1; } GetEmit9(size_t,size_t emit)73 static inline uint64_t GetEmit9(size_t, size_t emit) { return emit ? 36 : 0; } GetOp10(size_t i)74 static inline uint64_t GetOp10(size_t i) { return i ? 3 : 1; } GetEmit10(size_t,size_t emit)75 static inline uint64_t GetEmit10(size_t, size_t emit) { 76 return emit ? 91 : 64; 77 } GetOp11(size_t i)78 static inline uint64_t GetOp11(size_t i) { return i ? 3 : 1; } GetEmit11(size_t,size_t emit)79 static inline uint64_t GetEmit11(size_t, size_t emit) { 80 return emit ? 126 : 93; 81 } GetOp13(size_t i)82 static inline uint64_t GetOp13(size_t i) { 83 return (i < 2 ? (i ? 4 : 0) : ((i - 2) + 1)); 84 } GetEmit13(size_t,size_t emit)85 static inline uint64_t GetEmit13(size_t, size_t emit) { 86 return emit ? 125 : 94; 87 } GetOp14(size_t i)88 static inline uint64_t GetOp14(size_t i) { 89 return table14_0_inner_[table14_0_outer_[i]]; 90 } GetEmit14(size_t,size_t emit)91 static inline uint64_t GetEmit14(size_t, size_t emit) { 92 return table14_0_emit_[emit]; 93 } GetOp15(size_t i)94 static inline uint64_t GetOp15(size_t i) { 95 return table14_0_inner_[table15_0_outer_[i]]; 96 } GetEmit15(size_t,size_t emit)97 static inline uint64_t GetEmit15(size_t, size_t emit) { 98 return table14_0_emit_[emit]; 99 } GetOp16(size_t i)100 static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; } GetEmit16(size_t,size_t emit)101 static inline uint64_t GetEmit16(size_t, size_t emit) { 102 return table14_0_emit_[emit]; 103 } GetOp17(size_t i)104 static inline uint64_t GetOp17(size_t i) { return table17_0_ops_[i]; } GetEmit17(size_t,size_t emit)105 static inline uint64_t GetEmit17(size_t, size_t emit) { 106 return table14_0_emit_[emit]; 107 } GetOp18(size_t i)108 static inline uint64_t GetOp18(size_t i) { return table18_0_ops_[i]; } GetEmit18(size_t,size_t emit)109 static inline uint64_t GetEmit18(size_t, size_t emit) { 110 return table18_0_emit_[emit]; 111 } GetOp19(size_t i)112 static inline uint64_t GetOp19(size_t i) { 113 return table19_ops_[i >> 5][i & 0x1f]; 114 } GetEmit19(size_t i,size_t emit)115 static inline uint64_t GetEmit19(size_t i, size_t emit) { 116 return table19_emit_[i >> 5][emit]; 117 } GetOp20(size_t i)118 static inline uint64_t GetOp20(size_t i) { 119 return table20_ops_[i >> 6][i & 0x3f]; 120 } GetEmit20(size_t i,size_t emit)121 static inline uint64_t GetEmit20(size_t i, size_t emit) { 122 return table20_emit_[i >> 6][emit]; 123 } GetOp21(size_t i)124 static inline uint64_t GetOp21(size_t i) { 125 return table21_ops_[i >> 7][i & 0x7f]; 126 } GetEmit21(size_t i,size_t emit)127 static inline uint64_t GetEmit21(size_t i, size_t emit) { 128 return table21_emit_[i >> 7][emit]; 129 } GetOp22(size_t i)130 static inline uint64_t GetOp22(size_t i) { 131 return table22_ops_[i >> 7][i & 0x7f]; 132 } GetEmit22(size_t i,size_t emit)133 static inline uint64_t GetEmit22(size_t i, size_t emit) { 134 return table22_emit_[i >> 7][emit]; 135 } GetOp23(size_t i)136 static inline uint64_t GetOp23(size_t i) { 137 return table23_ops_[i >> 6][i & 0x3f]; 138 } GetEmit23(size_t i,size_t emit)139 static inline uint64_t GetEmit23(size_t i, size_t emit) { 140 return table23_emit_[i >> 6][emit]; 141 } GetOp24(size_t i)142 static inline uint64_t GetOp24(size_t i) { 143 return table24_ops_[i >> 6][i & 0x3f]; 144 } GetEmit24(size_t i,size_t emit)145 static inline uint64_t GetEmit24(size_t i, size_t emit) { 146 return table24_emit_[i >> 6][emit]; 147 } GetOp25(size_t i)148 static inline uint64_t GetOp25(size_t i) { 149 return table25_ops_[i >> 7][i & 0x7f]; 150 } GetEmit25(size_t i,size_t emit)151 static inline uint64_t GetEmit25(size_t i, size_t emit) { 152 return table25_emit_[i >> 7][emit]; 153 } GetOp12(size_t i)154 static inline uint64_t GetOp12(size_t i) { 155 return table12_ops_[i >> 8][i & 0xff]; 156 } GetEmit12(size_t i,size_t emit)157 static inline uint64_t GetEmit12(size_t i, size_t emit) { 158 return table12_emit_[i >> 8][emit]; 159 } GetOp26(size_t i)160 static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; } GetEmit26(size_t,size_t emit)161 static inline uint64_t GetEmit26(size_t, size_t emit) { return emit + 2; } GetOp27(size_t i)162 static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; } GetEmit27(size_t,size_t emit)163 static inline uint64_t GetEmit27(size_t, size_t emit) { return emit + 4; } GetOp28(size_t i)164 static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; } GetEmit28(size_t,size_t emit)165 static inline uint64_t GetEmit28(size_t, size_t emit) { return emit + 6; } GetOp29(size_t i)166 static inline uint64_t GetOp29(size_t i) { return i ? 3 : 1; } GetEmit29(size_t,size_t emit)167 static inline uint64_t GetEmit29(size_t, size_t emit) { 168 return emit ? 11 : 8; 169 } GetOp30(size_t i)170 static inline uint64_t GetOp30(size_t i) { return i ? 3 : 1; } GetEmit30(size_t,size_t emit)171 static inline uint64_t GetEmit30(size_t, size_t emit) { 172 return emit ? 14 : 12; 173 } GetOp31(size_t i)174 static inline uint64_t GetOp31(size_t i) { return i ? 3 : 1; } GetEmit31(size_t,size_t emit)175 static inline uint64_t GetEmit31(size_t, size_t emit) { return emit + 15; } GetOp32(size_t i)176 static inline uint64_t GetOp32(size_t i) { return i ? 3 : 1; } GetEmit32(size_t,size_t emit)177 static inline uint64_t GetEmit32(size_t, size_t emit) { return emit + 17; } GetOp33(size_t i)178 static inline uint64_t GetOp33(size_t i) { return i ? 3 : 1; } GetEmit33(size_t,size_t emit)179 static inline uint64_t GetEmit33(size_t, size_t emit) { return emit + 19; } GetOp34(size_t i)180 static inline uint64_t GetOp34(size_t i) { return i ? 3 : 1; } GetEmit34(size_t,size_t emit)181 static inline uint64_t GetEmit34(size_t, size_t emit) { 182 return emit ? 23 : 21; 183 } GetOp35(size_t i)184 static inline uint64_t GetOp35(size_t i) { return i ? 3 : 1; } GetEmit35(size_t,size_t emit)185 static inline uint64_t GetEmit35(size_t, size_t emit) { return emit + 24; } GetOp36(size_t i)186 static inline uint64_t GetOp36(size_t i) { return i ? 3 : 1; } GetEmit36(size_t,size_t emit)187 static inline uint64_t GetEmit36(size_t, size_t emit) { return emit + 26; } GetOp37(size_t i)188 static inline uint64_t GetOp37(size_t i) { return i ? 3 : 1; } GetEmit37(size_t,size_t emit)189 static inline uint64_t GetEmit37(size_t, size_t emit) { return emit + 28; } GetOp38(size_t i)190 static inline uint64_t GetOp38(size_t i) { return i ? 3 : 1; } GetEmit38(size_t,size_t emit)191 static inline uint64_t GetEmit38(size_t, size_t emit) { return emit + 30; } GetOp39(size_t i)192 static inline uint64_t GetOp39(size_t i) { return i ? 3 : 1; } GetEmit39(size_t,size_t emit)193 static inline uint64_t GetEmit39(size_t, size_t emit) { 194 return emit ? 220 : 127; 195 } GetOp41(size_t i)196 static inline uint64_t GetOp41(size_t i) { return i; } GetEmit41(size_t,size_t emit)197 static inline uint64_t GetEmit41(size_t, size_t emit) { 198 return ((void)emit, 249); 199 } GetOp42(size_t i)200 static inline uint64_t GetOp42(size_t i) { 201 return (i < 2 ? (i) : ((i - 2) ? 2 : 0)); 202 } GetEmit42(size_t,size_t emit)203 static inline uint64_t GetEmit42(size_t, size_t emit) { 204 return ((void)emit, 249); 205 } GetOp40(size_t i)206 static inline uint64_t GetOp40(size_t i) { 207 return table40_0_inner_[(i < 3 ? (((void)i, 0)) : ((i - 3)))]; 208 } GetEmit40(size_t,size_t emit)209 static inline uint64_t GetEmit40(size_t, size_t emit) { 210 return (emit < 2 ? (emit ? 10 : 249) : ((emit - 2) ? 22 : 13)); 211 } 212 213 private: 214 static const uint8_t table2_0_emit_[10]; 215 static const uint8_t table2_0_ops_[32]; 216 static const uint8_t table3_0_emit_[36]; 217 static const uint8_t table3_0_ops_[64]; 218 static const uint8_t table4_0_emit_[22]; 219 static const uint8_t table4_0_ops_[64]; 220 static const uint8_t table4_1_emit_[46]; 221 static const uint8_t table4_1_ops_[64]; 222 static const uint8_t* const table4_emit_[2]; 223 static const uint8_t* const table4_ops_[2]; 224 static const uint8_t table5_0_ops_[128]; 225 static const uint8_t table5_1_emit_[52]; 226 static const uint8_t table5_1_ops_[128]; 227 static const uint8_t* const table5_emit_[2]; 228 static const uint8_t* const table5_ops_[2]; 229 static const uint8_t table6_0_emit_[2]; 230 static const uint8_t table6_0_ops_[32]; 231 static const uint8_t table6_1_emit_[2]; 232 static const uint8_t table6_2_emit_[2]; 233 static const uint8_t table6_3_emit_[2]; 234 static const uint8_t table6_4_emit_[2]; 235 static const uint8_t table6_5_emit_[4]; 236 static const uint8_t table6_5_ops_[32]; 237 static const uint8_t table6_6_emit_[4]; 238 static const uint8_t table6_7_emit_[4]; 239 static const uint8_t table6_8_emit_[4]; 240 static const uint8_t table6_9_emit_[4]; 241 static const uint8_t table6_10_emit_[4]; 242 static const uint8_t table6_11_emit_[6]; 243 static const uint8_t table6_11_ops_[32]; 244 static const uint8_t table6_12_emit_[8]; 245 static const uint8_t table6_12_ops_[32]; 246 static const uint8_t table6_13_emit_[8]; 247 static const uint8_t table6_14_emit_[8]; 248 static const uint8_t table6_15_emit_[10]; 249 static const uint8_t table6_15_ops_[32]; 250 static const uint8_t* const table6_emit_[16]; 251 static const uint8_t* const table6_ops_[16]; 252 static const uint8_t table7_0_emit_[36]; 253 static const uint8_t table7_0_ops_[64]; 254 static const uint8_t table7_1_emit_[36]; 255 static const uint8_t table7_1_ops_[64]; 256 static const uint8_t table7_2_emit_[36]; 257 static const uint8_t table7_2_ops_[64]; 258 static const uint8_t table7_3_emit_[36]; 259 static const uint8_t table7_3_ops_[64]; 260 static const uint8_t table7_4_emit_[38]; 261 static const uint8_t table7_4_ops_[64]; 262 static const uint8_t table7_5_ops_[64]; 263 static const uint8_t table7_11_ops_[64]; 264 static const uint8_t table7_12_ops_[64]; 265 static const uint8_t table7_15_emit_[15]; 266 static const uint8_t table7_15_ops_[64]; 267 static const uint8_t* const table7_emit_[16]; 268 static const uint8_t* const table7_ops_[16]; 269 static const uint8_t table8_0_emit_[71]; 270 static const uint16_t table8_0_inner_[38]; 271 static const uint8_t table8_0_outer_[64]; 272 static const uint8_t table8_1_emit_[71]; 273 static const uint16_t table8_1_inner_[38]; 274 static const uint8_t table8_2_emit_[71]; 275 static const uint16_t table8_2_inner_[38]; 276 static const uint8_t table8_3_emit_[71]; 277 static const uint16_t table8_3_inner_[38]; 278 static const uint8_t table8_4_emit_[71]; 279 static const uint16_t table8_4_inner_[38]; 280 static const uint8_t table8_5_emit_[71]; 281 static const uint16_t table8_5_inner_[38]; 282 static const uint8_t table8_6_emit_[71]; 283 static const uint16_t table8_6_inner_[38]; 284 static const uint8_t table8_7_emit_[71]; 285 static const uint16_t table8_7_inner_[38]; 286 static const uint8_t table8_8_emit_[71]; 287 static const uint16_t table8_8_inner_[38]; 288 static const uint8_t table8_9_emit_[71]; 289 static const uint16_t table8_9_inner_[38]; 290 static const uint8_t table8_10_emit_[40]; 291 static const uint16_t table8_10_inner_[23]; 292 static const uint8_t table8_10_outer_[64]; 293 static const uint8_t table8_11_emit_[40]; 294 static const uint8_t table8_12_emit_[40]; 295 static const uint8_t table8_13_emit_[40]; 296 static const uint8_t table8_14_emit_[40]; 297 static const uint8_t table8_15_emit_[40]; 298 static const uint8_t table8_16_emit_[40]; 299 static const uint8_t table8_17_emit_[40]; 300 static const uint8_t table8_18_emit_[40]; 301 static const uint8_t table8_19_emit_[40]; 302 static const uint8_t table8_20_emit_[40]; 303 static const uint8_t table8_21_emit_[40]; 304 static const uint8_t table8_22_emit_[40]; 305 static const uint8_t table8_23_emit_[4]; 306 static const uint16_t table8_23_inner_[5]; 307 static const uint8_t table8_23_outer_[64]; 308 static const uint8_t table8_24_emit_[4]; 309 static const uint8_t table8_25_emit_[4]; 310 static const uint8_t table8_26_emit_[4]; 311 static const uint8_t table8_27_emit_[4]; 312 static const uint8_t table8_28_emit_[4]; 313 static const uint8_t table8_29_emit_[4]; 314 static const uint8_t table8_30_emit_[4]; 315 static const uint8_t table8_31_emit_[14]; 316 static const uint16_t table8_31_inner_[16]; 317 static const uint8_t table8_31_outer_[64]; 318 static const uint8_t* const table8_emit_[32]; 319 static const uint16_t* const table8_inner_[32]; 320 static const uint8_t* const table8_outer_[32]; 321 static const uint8_t table1_0_emit_[135]; 322 static const uint16_t table1_0_inner_[69]; 323 static const uint8_t table1_0_outer_[128]; 324 static const uint8_t table1_1_emit_[135]; 325 static const uint16_t table1_1_inner_[69]; 326 static const uint8_t table1_2_emit_[135]; 327 static const uint16_t table1_2_inner_[69]; 328 static const uint8_t table1_3_emit_[135]; 329 static const uint16_t table1_3_inner_[69]; 330 static const uint8_t table1_4_emit_[135]; 331 static const uint16_t table1_4_inner_[69]; 332 static const uint8_t table1_5_emit_[135]; 333 static const uint16_t table1_5_inner_[69]; 334 static const uint8_t table1_6_emit_[135]; 335 static const uint16_t table1_6_inner_[69]; 336 static const uint8_t table1_7_emit_[135]; 337 static const uint16_t table1_7_inner_[69]; 338 static const uint8_t table1_8_emit_[135]; 339 static const uint16_t table1_8_inner_[69]; 340 static const uint8_t table1_9_emit_[135]; 341 static const uint16_t table1_9_inner_[69]; 342 static const uint8_t table1_10_emit_[140]; 343 static const uint16_t table1_10_inner_[74]; 344 static const uint8_t table1_10_outer_[128]; 345 static const uint8_t table1_11_emit_[140]; 346 static const uint16_t table1_11_inner_[74]; 347 static const uint8_t table1_12_emit_[140]; 348 static const uint16_t table1_12_inner_[74]; 349 static const uint8_t table1_13_emit_[140]; 350 static const uint16_t table1_13_inner_[74]; 351 static const uint8_t table1_14_emit_[140]; 352 static const uint16_t table1_14_inner_[74]; 353 static const uint8_t table1_15_emit_[140]; 354 static const uint16_t table1_15_inner_[74]; 355 static const uint8_t table1_16_emit_[140]; 356 static const uint16_t table1_16_inner_[74]; 357 static const uint8_t table1_17_emit_[140]; 358 static const uint16_t table1_17_inner_[74]; 359 static const uint8_t table1_18_emit_[140]; 360 static const uint16_t table1_18_inner_[74]; 361 static const uint8_t table1_19_emit_[140]; 362 static const uint16_t table1_19_inner_[74]; 363 static const uint8_t table1_20_emit_[140]; 364 static const uint16_t table1_20_inner_[74]; 365 static const uint8_t table1_21_emit_[140]; 366 static const uint16_t table1_21_inner_[74]; 367 static const uint8_t table1_22_emit_[142]; 368 static const uint16_t table1_22_inner_[74]; 369 static const uint8_t table1_23_emit_[80]; 370 static const uint16_t table1_23_inner_[44]; 371 static const uint8_t table1_23_outer_[128]; 372 static const uint8_t table1_24_emit_[80]; 373 static const uint8_t table1_25_emit_[80]; 374 static const uint8_t table1_26_emit_[80]; 375 static const uint8_t table1_27_emit_[80]; 376 static const uint8_t table1_28_emit_[80]; 377 static const uint8_t table1_29_emit_[80]; 378 static const uint8_t table1_30_emit_[80]; 379 static const uint8_t table1_31_emit_[16]; 380 static const uint16_t table1_31_inner_[20]; 381 static const uint8_t table1_31_outer_[128]; 382 static const uint8_t* const table1_emit_[32]; 383 static const uint16_t* const table1_inner_[32]; 384 static const uint8_t* const table1_outer_[32]; 385 static const uint8_t table14_0_emit_[5]; 386 static const uint8_t table14_0_inner_[7]; 387 static const uint8_t table14_0_outer_[8]; 388 static const uint8_t table15_0_outer_[16]; 389 static const uint8_t table16_0_ops_[32]; 390 static const uint8_t table17_0_ops_[64]; 391 static const uint8_t table18_0_emit_[46]; 392 static const uint8_t table18_0_ops_[128]; 393 static const uint8_t table19_0_emit_[44]; 394 static const uint8_t table19_0_ops_[32]; 395 static const uint8_t table19_1_emit_[28]; 396 static const uint8_t table19_1_ops_[32]; 397 static const uint8_t table19_2_emit_[44]; 398 static const uint8_t table19_3_emit_[28]; 399 static const uint8_t table19_4_emit_[20]; 400 static const uint8_t table19_4_ops_[32]; 401 static const uint8_t table19_5_emit_[20]; 402 static const uint8_t table19_6_emit_[20]; 403 static const uint8_t table19_7_emit_[11]; 404 static const uint8_t table19_7_ops_[32]; 405 static const uint8_t* const table19_emit_[8]; 406 static const uint8_t* const table19_ops_[8]; 407 static const uint16_t table20_0_ops_[64]; 408 static const uint8_t table20_1_emit_[92]; 409 static const uint16_t table20_1_ops_[64]; 410 static const uint8_t table20_3_emit_[92]; 411 static const uint8_t table20_4_emit_[72]; 412 static const uint16_t table20_4_ops_[64]; 413 static const uint8_t table20_5_emit_[72]; 414 static const uint8_t table20_6_emit_[72]; 415 static const uint8_t table20_7_emit_[24]; 416 static const uint16_t table20_7_ops_[64]; 417 static const uint8_t* const table20_emit_[8]; 418 static const uint16_t* const table20_ops_[8]; 419 static const uint16_t table21_0_ops_[128]; 420 static const uint8_t table21_1_emit_[104]; 421 static const uint16_t table21_1_ops_[128]; 422 static const uint8_t table21_3_emit_[104]; 423 static const uint8_t table21_4_emit_[136]; 424 static const uint16_t table21_4_ops_[128]; 425 static const uint8_t table21_5_emit_[136]; 426 static const uint8_t table21_6_emit_[136]; 427 static const uint8_t table21_7_emit_[50]; 428 static const uint16_t table21_7_ops_[128]; 429 static const uint8_t* const table21_emit_[8]; 430 static const uint16_t* const table21_ops_[8]; 431 static const uint8_t table22_0_emit_[16]; 432 static const uint16_t table22_0_ops_[128]; 433 static const uint8_t table22_1_emit_[28]; 434 static const uint16_t table22_1_ops_[128]; 435 static const uint8_t table22_2_emit_[36]; 436 static const uint16_t table22_2_ops_[128]; 437 static const uint8_t table22_3_emit_[68]; 438 static const uint16_t table22_3_ops_[128]; 439 static const uint8_t table22_4_emit_[16]; 440 static const uint8_t table22_5_emit_[28]; 441 static const uint8_t table22_6_emit_[36]; 442 static const uint8_t table22_7_emit_[68]; 443 static const uint8_t table22_8_emit_[44]; 444 static const uint8_t table22_9_emit_[104]; 445 static const uint8_t table22_10_emit_[44]; 446 static const uint8_t table22_11_emit_[104]; 447 static const uint8_t table22_12_emit_[44]; 448 static const uint8_t table22_13_emit_[104]; 449 static const uint8_t table22_14_emit_[15]; 450 static const uint16_t table22_14_ops_[128]; 451 static const uint8_t table22_15_emit_[64]; 452 static const uint16_t table22_15_ops_[128]; 453 static const uint8_t* const table22_emit_[16]; 454 static const uint16_t* const table22_ops_[16]; 455 static const uint8_t table23_0_emit_[60]; 456 static const uint16_t table23_0_ops_[64]; 457 static const uint8_t table23_1_emit_[60]; 458 static const uint8_t table23_2_emit_[60]; 459 static const uint8_t table23_3_emit_[60]; 460 static const uint8_t table23_4_emit_[60]; 461 static const uint8_t table23_5_emit_[8]; 462 static const uint16_t table23_5_ops_[64]; 463 static const uint8_t table23_6_emit_[8]; 464 static const uint8_t table23_7_emit_[8]; 465 static const uint8_t table23_8_emit_[8]; 466 static const uint8_t table23_9_emit_[8]; 467 static const uint8_t table23_10_emit_[8]; 468 static const uint8_t table23_11_emit_[12]; 469 static const uint16_t table23_11_ops_[64]; 470 static const uint8_t table23_12_emit_[16]; 471 static const uint16_t table23_12_ops_[64]; 472 static const uint8_t table23_13_emit_[16]; 473 static const uint8_t table23_14_emit_[16]; 474 static const uint8_t table23_15_emit_[30]; 475 static const uint16_t table23_15_ops_[64]; 476 static const uint8_t table23_16_emit_[60]; 477 static const uint8_t table23_17_emit_[60]; 478 static const uint8_t table23_18_emit_[60]; 479 static const uint8_t table23_19_emit_[60]; 480 static const uint8_t table23_20_emit_[60]; 481 static const uint8_t table23_21_emit_[8]; 482 static const uint8_t table23_22_emit_[8]; 483 static const uint8_t table23_23_emit_[8]; 484 static const uint8_t table23_24_emit_[8]; 485 static const uint8_t table23_25_emit_[8]; 486 static const uint8_t table23_26_emit_[8]; 487 static const uint8_t table23_27_emit_[12]; 488 static const uint8_t table23_28_emit_[16]; 489 static const uint8_t table23_29_emit_[16]; 490 static const uint8_t table23_30_emit_[16]; 491 static const uint8_t table23_31_emit_[30]; 492 static const uint8_t table23_32_emit_[8]; 493 static const uint8_t table23_33_emit_[8]; 494 static const uint8_t table23_34_emit_[12]; 495 static const uint8_t table23_35_emit_[16]; 496 static const uint8_t table23_36_emit_[16]; 497 static const uint8_t table23_37_emit_[20]; 498 static const uint16_t table23_37_ops_[64]; 499 static const uint8_t table23_38_emit_[32]; 500 static const uint16_t table23_38_ops_[64]; 501 static const uint8_t table23_39_emit_[36]; 502 static const uint16_t table23_39_ops_[64]; 503 static const uint8_t table23_40_emit_[8]; 504 static const uint8_t table23_41_emit_[8]; 505 static const uint8_t table23_42_emit_[12]; 506 static const uint8_t table23_43_emit_[16]; 507 static const uint8_t table23_44_emit_[16]; 508 static const uint8_t table23_45_emit_[20]; 509 static const uint8_t table23_46_emit_[32]; 510 static const uint8_t table23_47_emit_[36]; 511 static const uint8_t table23_48_emit_[8]; 512 static const uint8_t table23_49_emit_[8]; 513 static const uint8_t table23_50_emit_[12]; 514 static const uint8_t table23_51_emit_[16]; 515 static const uint8_t table23_52_emit_[16]; 516 static const uint8_t table23_53_emit_[20]; 517 static const uint8_t table23_54_emit_[32]; 518 static const uint8_t table23_55_emit_[36]; 519 static const uint8_t table23_56_emit_[40]; 520 static const uint16_t table23_56_ops_[64]; 521 static const uint8_t table23_57_emit_[22]; 522 static const uint16_t table23_57_ops_[64]; 523 static const uint8_t table23_58_emit_[4]; 524 static const uint16_t table23_58_ops_[64]; 525 static const uint8_t table23_59_emit_[6]; 526 static const uint16_t table23_59_ops_[64]; 527 static const uint8_t table23_60_emit_[8]; 528 static const uint16_t table23_60_ops_[64]; 529 static const uint8_t table23_61_emit_[15]; 530 static const uint16_t table23_61_ops_[64]; 531 static const uint8_t table23_62_emit_[20]; 532 static const uint16_t table23_62_ops_[64]; 533 static const uint8_t table23_63_emit_[33]; 534 static const uint16_t table23_63_ops_[64]; 535 static const uint8_t* const table23_emit_[64]; 536 static const uint16_t* const table23_ops_[64]; 537 static const uint8_t table24_0_emit_[108]; 538 static const uint16_t table24_0_ops_[64]; 539 static const uint8_t table24_1_emit_[108]; 540 static const uint8_t table24_2_emit_[108]; 541 static const uint8_t table24_3_emit_[108]; 542 static const uint8_t table24_4_emit_[108]; 543 static const uint8_t table24_5_emit_[108]; 544 static const uint8_t table24_6_emit_[108]; 545 static const uint8_t table24_7_emit_[108]; 546 static const uint8_t table24_8_emit_[108]; 547 static const uint8_t table24_9_emit_[108]; 548 static const uint8_t table24_10_emit_[60]; 549 static const uint16_t table24_10_ops_[64]; 550 static const uint8_t table24_11_emit_[60]; 551 static const uint8_t table24_12_emit_[60]; 552 static const uint8_t table24_13_emit_[60]; 553 static const uint8_t table24_14_emit_[60]; 554 static const uint8_t table24_15_emit_[60]; 555 static const uint8_t table24_16_emit_[60]; 556 static const uint8_t table24_17_emit_[60]; 557 static const uint8_t table24_18_emit_[60]; 558 static const uint8_t table24_19_emit_[60]; 559 static const uint8_t table24_20_emit_[60]; 560 static const uint8_t table24_21_emit_[60]; 561 static const uint8_t table24_22_emit_[60]; 562 static const uint8_t table24_23_emit_[8]; 563 static const uint16_t table24_23_ops_[64]; 564 static const uint8_t table24_24_emit_[8]; 565 static const uint8_t table24_25_emit_[8]; 566 static const uint8_t table24_26_emit_[8]; 567 static const uint8_t table24_27_emit_[8]; 568 static const uint8_t table24_28_emit_[8]; 569 static const uint8_t table24_29_emit_[8]; 570 static const uint8_t table24_30_emit_[8]; 571 static const uint8_t table24_31_emit_[28]; 572 static const uint16_t table24_31_ops_[64]; 573 static const uint8_t table24_32_emit_[108]; 574 static const uint8_t table24_33_emit_[108]; 575 static const uint8_t table24_34_emit_[108]; 576 static const uint8_t table24_35_emit_[108]; 577 static const uint8_t table24_36_emit_[108]; 578 static const uint8_t table24_37_emit_[108]; 579 static const uint8_t table24_38_emit_[108]; 580 static const uint8_t table24_39_emit_[108]; 581 static const uint8_t table24_40_emit_[108]; 582 static const uint8_t table24_41_emit_[108]; 583 static const uint8_t table24_42_emit_[60]; 584 static const uint8_t table24_43_emit_[60]; 585 static const uint8_t table24_44_emit_[60]; 586 static const uint8_t table24_45_emit_[60]; 587 static const uint8_t table24_46_emit_[60]; 588 static const uint8_t table24_47_emit_[60]; 589 static const uint8_t table24_48_emit_[60]; 590 static const uint8_t table24_49_emit_[60]; 591 static const uint8_t table24_50_emit_[60]; 592 static const uint8_t table24_51_emit_[60]; 593 static const uint8_t table24_52_emit_[60]; 594 static const uint8_t table24_53_emit_[60]; 595 static const uint8_t table24_54_emit_[60]; 596 static const uint8_t table24_55_emit_[8]; 597 static const uint8_t table24_56_emit_[8]; 598 static const uint8_t table24_57_emit_[8]; 599 static const uint8_t table24_58_emit_[8]; 600 static const uint8_t table24_59_emit_[8]; 601 static const uint8_t table24_60_emit_[8]; 602 static const uint8_t table24_61_emit_[8]; 603 static const uint8_t table24_62_emit_[8]; 604 static const uint8_t table24_63_emit_[28]; 605 static const uint8_t table24_64_emit_[60]; 606 static const uint8_t table24_65_emit_[60]; 607 static const uint8_t table24_66_emit_[60]; 608 static const uint8_t table24_67_emit_[60]; 609 static const uint8_t table24_68_emit_[60]; 610 static const uint8_t table24_69_emit_[8]; 611 static const uint8_t table24_70_emit_[8]; 612 static const uint8_t table24_71_emit_[8]; 613 static const uint8_t table24_72_emit_[8]; 614 static const uint8_t table24_73_emit_[8]; 615 static const uint8_t table24_74_emit_[8]; 616 static const uint8_t table24_75_emit_[12]; 617 static const uint16_t table24_75_ops_[64]; 618 static const uint8_t table24_76_emit_[16]; 619 static const uint16_t table24_76_ops_[64]; 620 static const uint8_t table24_77_emit_[16]; 621 static const uint8_t table24_78_emit_[16]; 622 static const uint8_t table24_79_emit_[30]; 623 static const uint16_t table24_79_ops_[64]; 624 static const uint8_t table24_80_emit_[60]; 625 static const uint8_t table24_81_emit_[60]; 626 static const uint8_t table24_82_emit_[60]; 627 static const uint8_t table24_83_emit_[60]; 628 static const uint8_t table24_84_emit_[60]; 629 static const uint8_t table24_85_emit_[8]; 630 static const uint8_t table24_86_emit_[8]; 631 static const uint8_t table24_87_emit_[8]; 632 static const uint8_t table24_88_emit_[8]; 633 static const uint8_t table24_89_emit_[8]; 634 static const uint8_t table24_90_emit_[8]; 635 static const uint8_t table24_91_emit_[12]; 636 static const uint8_t table24_92_emit_[16]; 637 static const uint8_t table24_93_emit_[16]; 638 static const uint8_t table24_94_emit_[16]; 639 static const uint8_t table24_95_emit_[30]; 640 static const uint8_t table24_96_emit_[60]; 641 static const uint8_t table24_97_emit_[60]; 642 static const uint8_t table24_98_emit_[60]; 643 static const uint8_t table24_99_emit_[60]; 644 static const uint8_t table24_100_emit_[60]; 645 static const uint8_t table24_101_emit_[8]; 646 static const uint8_t table24_102_emit_[8]; 647 static const uint8_t table24_103_emit_[8]; 648 static const uint8_t table24_104_emit_[8]; 649 static const uint8_t table24_105_emit_[8]; 650 static const uint8_t table24_106_emit_[8]; 651 static const uint8_t table24_107_emit_[12]; 652 static const uint8_t table24_108_emit_[16]; 653 static const uint8_t table24_109_emit_[16]; 654 static const uint8_t table24_110_emit_[16]; 655 static const uint8_t table24_111_emit_[30]; 656 static const uint8_t table24_112_emit_[72]; 657 static const uint16_t table24_112_ops_[64]; 658 static const uint8_t table24_113_emit_[72]; 659 static const uint8_t table24_114_emit_[72]; 660 static const uint8_t table24_115_emit_[40]; 661 static const uint16_t table24_115_ops_[64]; 662 static const uint8_t table24_116_emit_[40]; 663 static const uint8_t table24_117_emit_[40]; 664 static const uint8_t table24_118_emit_[40]; 665 static const uint8_t table24_119_emit_[4]; 666 static const uint16_t table24_119_ops_[64]; 667 static const uint8_t table24_120_emit_[4]; 668 static const uint8_t table24_121_emit_[4]; 669 static const uint8_t table24_122_emit_[7]; 670 static const uint16_t table24_122_ops_[64]; 671 static const uint8_t table24_123_emit_[8]; 672 static const uint16_t table24_123_ops_[64]; 673 static const uint8_t table24_124_emit_[8]; 674 static const uint8_t table24_125_emit_[12]; 675 static const uint16_t table24_125_ops_[64]; 676 static const uint8_t table24_126_emit_[16]; 677 static const uint16_t table24_126_ops_[64]; 678 static const uint8_t table24_127_emit_[21]; 679 static const uint16_t table24_127_ops_[64]; 680 static const uint8_t* const table24_emit_[128]; 681 static const uint16_t* const table24_ops_[128]; 682 static const uint8_t table25_0_emit_[204]; 683 static const uint16_t table25_0_ops_[128]; 684 static const uint8_t table25_1_emit_[204]; 685 static const uint8_t table25_2_emit_[204]; 686 static const uint8_t table25_3_emit_[204]; 687 static const uint8_t table25_4_emit_[204]; 688 static const uint8_t table25_5_emit_[204]; 689 static const uint8_t table25_6_emit_[204]; 690 static const uint8_t table25_7_emit_[204]; 691 static const uint8_t table25_8_emit_[204]; 692 static const uint8_t table25_9_emit_[204]; 693 static const uint8_t table25_10_emit_[216]; 694 static const uint16_t table25_10_ops_[128]; 695 static const uint8_t table25_11_emit_[216]; 696 static const uint8_t table25_12_emit_[216]; 697 static const uint8_t table25_13_emit_[216]; 698 static const uint8_t table25_14_emit_[216]; 699 static const uint8_t table25_15_emit_[216]; 700 static const uint8_t table25_16_emit_[216]; 701 static const uint8_t table25_17_emit_[216]; 702 static const uint8_t table25_18_emit_[216]; 703 static const uint8_t table25_19_emit_[216]; 704 static const uint8_t table25_20_emit_[216]; 705 static const uint8_t table25_21_emit_[216]; 706 static const uint8_t table25_22_emit_[216]; 707 static const uint8_t table25_23_emit_[120]; 708 static const uint16_t table25_23_ops_[128]; 709 static const uint8_t table25_24_emit_[120]; 710 static const uint8_t table25_25_emit_[120]; 711 static const uint8_t table25_26_emit_[120]; 712 static const uint8_t table25_27_emit_[120]; 713 static const uint8_t table25_28_emit_[120]; 714 static const uint8_t table25_29_emit_[120]; 715 static const uint8_t table25_30_emit_[120]; 716 static const uint8_t table25_31_emit_[32]; 717 static const uint16_t table25_31_ops_[128]; 718 static const uint8_t table25_32_emit_[204]; 719 static const uint8_t table25_33_emit_[204]; 720 static const uint8_t table25_34_emit_[204]; 721 static const uint8_t table25_35_emit_[204]; 722 static const uint8_t table25_36_emit_[204]; 723 static const uint8_t table25_37_emit_[204]; 724 static const uint8_t table25_38_emit_[204]; 725 static const uint8_t table25_39_emit_[204]; 726 static const uint8_t table25_40_emit_[204]; 727 static const uint8_t table25_41_emit_[204]; 728 static const uint8_t table25_42_emit_[216]; 729 static const uint8_t table25_43_emit_[216]; 730 static const uint8_t table25_44_emit_[216]; 731 static const uint8_t table25_45_emit_[216]; 732 static const uint8_t table25_46_emit_[216]; 733 static const uint8_t table25_47_emit_[216]; 734 static const uint8_t table25_48_emit_[216]; 735 static const uint8_t table25_49_emit_[216]; 736 static const uint8_t table25_50_emit_[216]; 737 static const uint8_t table25_51_emit_[216]; 738 static const uint8_t table25_52_emit_[216]; 739 static const uint8_t table25_53_emit_[216]; 740 static const uint8_t table25_54_emit_[216]; 741 static const uint8_t table25_55_emit_[120]; 742 static const uint8_t table25_56_emit_[120]; 743 static const uint8_t table25_57_emit_[120]; 744 static const uint8_t table25_58_emit_[120]; 745 static const uint8_t table25_59_emit_[120]; 746 static const uint8_t table25_60_emit_[120]; 747 static const uint8_t table25_61_emit_[120]; 748 static const uint8_t table25_62_emit_[120]; 749 static const uint8_t table25_63_emit_[32]; 750 static const uint8_t table25_64_emit_[216]; 751 static const uint8_t table25_65_emit_[216]; 752 static const uint8_t table25_66_emit_[216]; 753 static const uint8_t table25_67_emit_[216]; 754 static const uint8_t table25_68_emit_[216]; 755 static const uint8_t table25_69_emit_[120]; 756 static const uint8_t table25_70_emit_[120]; 757 static const uint8_t table25_71_emit_[120]; 758 static const uint8_t table25_72_emit_[120]; 759 static const uint8_t table25_73_emit_[120]; 760 static const uint8_t table25_74_emit_[120]; 761 static const uint8_t table25_75_emit_[68]; 762 static const uint16_t table25_75_ops_[128]; 763 static const uint16_t table25_76_ops_[128]; 764 static const uint8_t table25_79_emit_[36]; 765 static const uint16_t table25_79_ops_[128]; 766 static const uint8_t table25_80_emit_[216]; 767 static const uint8_t table25_81_emit_[216]; 768 static const uint8_t table25_82_emit_[216]; 769 static const uint8_t table25_83_emit_[216]; 770 static const uint8_t table25_84_emit_[216]; 771 static const uint8_t table25_85_emit_[120]; 772 static const uint8_t table25_86_emit_[120]; 773 static const uint8_t table25_87_emit_[120]; 774 static const uint8_t table25_88_emit_[120]; 775 static const uint8_t table25_89_emit_[120]; 776 static const uint8_t table25_90_emit_[120]; 777 static const uint8_t table25_91_emit_[68]; 778 static const uint8_t table25_95_emit_[36]; 779 static const uint8_t table25_96_emit_[216]; 780 static const uint8_t table25_97_emit_[216]; 781 static const uint8_t table25_98_emit_[216]; 782 static const uint8_t table25_99_emit_[216]; 783 static const uint8_t table25_100_emit_[216]; 784 static const uint8_t table25_101_emit_[120]; 785 static const uint8_t table25_102_emit_[120]; 786 static const uint8_t table25_103_emit_[120]; 787 static const uint8_t table25_104_emit_[120]; 788 static const uint8_t table25_105_emit_[120]; 789 static const uint8_t table25_106_emit_[120]; 790 static const uint8_t table25_107_emit_[68]; 791 static const uint8_t table25_111_emit_[36]; 792 static const uint8_t table25_112_emit_[136]; 793 static const uint16_t table25_112_ops_[128]; 794 static const uint8_t table25_113_emit_[136]; 795 static const uint8_t table25_114_emit_[136]; 796 static const uint8_t table25_115_emit_[144]; 797 static const uint16_t table25_115_ops_[128]; 798 static const uint8_t table25_116_emit_[144]; 799 static const uint8_t table25_117_emit_[144]; 800 static const uint8_t table25_118_emit_[144]; 801 static const uint8_t table25_119_emit_[80]; 802 static const uint16_t table25_119_ops_[128]; 803 static const uint8_t table25_120_emit_[80]; 804 static const uint8_t table25_121_emit_[80]; 805 static const uint8_t table25_122_emit_[26]; 806 static const uint16_t table25_122_ops_[128]; 807 static const uint16_t table25_123_ops_[128]; 808 static const uint16_t table25_125_ops_[128]; 809 static const uint16_t table25_126_ops_[128]; 810 static const uint8_t table25_127_emit_[36]; 811 static const uint16_t table25_127_ops_[128]; 812 static const uint8_t* const table25_emit_[128]; 813 static const uint16_t* const table25_ops_[128]; 814 static const uint8_t table12_0_emit_[1]; 815 static const uint16_t table12_0_ops_[256]; 816 static const uint8_t table12_32_emit_[1]; 817 static const uint8_t table12_64_emit_[1]; 818 static const uint16_t table12_64_ops_[256]; 819 static const uint8_t table12_80_emit_[1]; 820 static const uint8_t table12_96_emit_[1]; 821 static const uint8_t table12_112_emit_[1]; 822 static const uint16_t table12_112_ops_[256]; 823 static const uint8_t table12_113_emit_[1]; 824 static const uint8_t table12_114_emit_[1]; 825 static const uint8_t table12_115_emit_[2]; 826 static const uint16_t table12_115_ops_[256]; 827 static const uint8_t table12_116_emit_[2]; 828 static const uint8_t table12_117_emit_[2]; 829 static const uint8_t table12_118_emit_[2]; 830 static const uint16_t table12_119_ops_[256]; 831 static const uint16_t table12_122_ops_[256]; 832 static const uint16_t table12_123_ops_[256]; 833 static const uint16_t table12_125_ops_[256]; 834 static const uint16_t table12_126_ops_[256]; 835 static const uint8_t table12_127_emit_[55]; 836 static const uint16_t table12_127_ops_[256]; 837 static const uint8_t* const table12_emit_[128]; 838 static const uint16_t* const table12_ops_[128]; 839 static const uint8_t table40_0_inner_[5]; 840 }; 841 template <typename F> 842 class HuffDecoder : public HuffDecoderCommon { 843 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)844 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 845 : sink_(sink), begin_(begin), end_(end) {} Run()846 bool Run() { 847 while (!done_) { 848 if (!RefillTo12()) { 849 Done0(); 850 break; 851 } 852 const auto index = (buffer_ >> (buffer_len_ - 12)) & 0xfff; 853 const auto op = GetOp1(index); 854 const int consumed = op & 15; 855 buffer_len_ -= consumed; 856 const auto emit_ofs = op >> 7; 857 switch ((op >> 4) & 7) { 858 case 0: { 859 sink_(GetEmit1(index, emit_ofs + 0)); 860 sink_(GetEmit1(index, emit_ofs + 1)); 861 break; 862 } 863 case 1: { 864 sink_(GetEmit1(index, emit_ofs + 0)); 865 break; 866 } 867 case 2: { 868 DecodeStep0(); 869 break; 870 } 871 case 3: { 872 DecodeStep1(); 873 break; 874 } 875 case 4: { 876 DecodeStep2(); 877 break; 878 } 879 case 5: { 880 DecodeStep3(); 881 break; 882 } 883 } 884 } 885 return ok_; 886 } 887 888 private: RefillTo12()889 bool RefillTo12() { 890 switch (buffer_len_) { 891 case 0: { 892 return Read2to8Bytes(); 893 } 894 case 1: 895 case 2: 896 case 3: { 897 return Read2to7Bytes(); 898 } 899 case 4: 900 case 5: 901 case 6: 902 case 7: 903 case 8: { 904 return Read1to7Bytes(); 905 } 906 case 9: 907 case 10: 908 case 11: { 909 return Read1to6Bytes(); 910 } 911 } 912 return true; 913 } Read2to8Bytes()914 bool Read2to8Bytes() { 915 switch (end_ - begin_) { 916 case 0: 917 case 1: { 918 return false; 919 } 920 case 2: { 921 Fill2(); 922 return true; 923 } 924 case 3: { 925 Fill3(); 926 return true; 927 } 928 case 4: { 929 Fill4(); 930 return true; 931 } 932 case 5: { 933 Fill5(); 934 return true; 935 } 936 case 6: { 937 Fill6(); 938 return true; 939 } 940 case 7: { 941 Fill7(); 942 return true; 943 } 944 default: { 945 Fill8(); 946 return true; 947 } 948 } 949 } Fill2()950 void Fill2() { 951 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 952 (static_cast<uint64_t>(begin_[1]) << 0); 953 begin_ += 2; 954 buffer_len_ += 16; 955 } Fill3()956 void Fill3() { 957 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 958 (static_cast<uint64_t>(begin_[1]) << 8) | 959 (static_cast<uint64_t>(begin_[2]) << 0); 960 begin_ += 3; 961 buffer_len_ += 24; 962 } Fill4()963 void Fill4() { 964 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 965 (static_cast<uint64_t>(begin_[1]) << 16) | 966 (static_cast<uint64_t>(begin_[2]) << 8) | 967 (static_cast<uint64_t>(begin_[3]) << 0); 968 begin_ += 4; 969 buffer_len_ += 32; 970 } Fill5()971 void Fill5() { 972 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 973 (static_cast<uint64_t>(begin_[1]) << 24) | 974 (static_cast<uint64_t>(begin_[2]) << 16) | 975 (static_cast<uint64_t>(begin_[3]) << 8) | 976 (static_cast<uint64_t>(begin_[4]) << 0); 977 begin_ += 5; 978 buffer_len_ += 40; 979 } Fill6()980 void Fill6() { 981 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 982 (static_cast<uint64_t>(begin_[1]) << 32) | 983 (static_cast<uint64_t>(begin_[2]) << 24) | 984 (static_cast<uint64_t>(begin_[3]) << 16) | 985 (static_cast<uint64_t>(begin_[4]) << 8) | 986 (static_cast<uint64_t>(begin_[5]) << 0); 987 begin_ += 6; 988 buffer_len_ += 48; 989 } Fill7()990 void Fill7() { 991 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 992 (static_cast<uint64_t>(begin_[1]) << 40) | 993 (static_cast<uint64_t>(begin_[2]) << 32) | 994 (static_cast<uint64_t>(begin_[3]) << 24) | 995 (static_cast<uint64_t>(begin_[4]) << 16) | 996 (static_cast<uint64_t>(begin_[5]) << 8) | 997 (static_cast<uint64_t>(begin_[6]) << 0); 998 begin_ += 7; 999 buffer_len_ += 56; 1000 } Fill8()1001 void Fill8() { 1002 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 1003 (static_cast<uint64_t>(begin_[1]) << 48) | 1004 (static_cast<uint64_t>(begin_[2]) << 40) | 1005 (static_cast<uint64_t>(begin_[3]) << 32) | 1006 (static_cast<uint64_t>(begin_[4]) << 24) | 1007 (static_cast<uint64_t>(begin_[5]) << 16) | 1008 (static_cast<uint64_t>(begin_[6]) << 8) | 1009 (static_cast<uint64_t>(begin_[7]) << 0); 1010 begin_ += 8; 1011 buffer_len_ += 64; 1012 } Read2to7Bytes()1013 bool Read2to7Bytes() { 1014 switch (end_ - begin_) { 1015 case 0: 1016 case 1: { 1017 return false; 1018 } 1019 case 2: { 1020 Fill2(); 1021 return true; 1022 } 1023 case 3: { 1024 Fill3(); 1025 return true; 1026 } 1027 case 4: { 1028 Fill4(); 1029 return true; 1030 } 1031 case 5: { 1032 Fill5(); 1033 return true; 1034 } 1035 case 6: { 1036 Fill6(); 1037 return true; 1038 } 1039 default: { 1040 Fill7(); 1041 return true; 1042 } 1043 } 1044 } Read1to7Bytes()1045 bool Read1to7Bytes() { 1046 switch (end_ - begin_) { 1047 case 0: { 1048 return false; 1049 } 1050 case 1: { 1051 Fill1(); 1052 return true; 1053 } 1054 case 2: { 1055 Fill2(); 1056 return true; 1057 } 1058 case 3: { 1059 Fill3(); 1060 return true; 1061 } 1062 case 4: { 1063 Fill4(); 1064 return true; 1065 } 1066 case 5: { 1067 Fill5(); 1068 return true; 1069 } 1070 case 6: { 1071 Fill6(); 1072 return true; 1073 } 1074 default: { 1075 Fill7(); 1076 return true; 1077 } 1078 } 1079 } Fill1()1080 void Fill1() { 1081 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 1082 begin_ += 1; 1083 buffer_len_ += 8; 1084 } Read1to6Bytes()1085 bool Read1to6Bytes() { 1086 switch (end_ - begin_) { 1087 case 0: { 1088 return false; 1089 } 1090 case 1: { 1091 Fill1(); 1092 return true; 1093 } 1094 case 2: { 1095 Fill2(); 1096 return true; 1097 } 1098 case 3: { 1099 Fill3(); 1100 return true; 1101 } 1102 case 4: { 1103 Fill4(); 1104 return true; 1105 } 1106 case 5: { 1107 Fill5(); 1108 return true; 1109 } 1110 default: { 1111 Fill6(); 1112 return true; 1113 } 1114 } 1115 } Done0()1116 void Done0() { 1117 done_ = true; 1118 switch (end_ - begin_) { 1119 case 1: { 1120 Fill1(); 1121 break; 1122 } 1123 } 1124 switch (buffer_len_) { 1125 case 1: 1126 case 2: 1127 case 3: 1128 case 4: { 1129 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1130 return; 1131 } 1132 case 5: { 1133 const auto index = buffer_ & 31; 1134 const auto op = GetOp2(index); 1135 switch (op & 3) { 1136 case 0: { 1137 sink_(GetEmit2(index, (op >> 2) + 0)); 1138 break; 1139 } 1140 case 1: { 1141 ok_ = false; 1142 break; 1143 } 1144 } 1145 return; 1146 } 1147 case 6: { 1148 const auto index = buffer_ & 63; 1149 const auto op = GetOp3(index); 1150 switch (op & 3) { 1151 case 0: { 1152 ok_ = false; 1153 break; 1154 } 1155 case 1: { 1156 sink_(GetEmit3(index, (op >> 2) + 0)); 1157 break; 1158 } 1159 } 1160 return; 1161 } 1162 case 7: { 1163 const auto index = buffer_ & 127; 1164 const auto op = GetOp4(index); 1165 switch (op & 3) { 1166 case 0: { 1167 ok_ = false; 1168 break; 1169 } 1170 case 1: { 1171 sink_(GetEmit4(index, (op >> 2) + 0)); 1172 break; 1173 } 1174 } 1175 return; 1176 } 1177 case 8: { 1178 const auto index = buffer_ & 255; 1179 const auto op = GetOp5(index); 1180 switch (op & 3) { 1181 case 0: { 1182 ok_ = false; 1183 break; 1184 } 1185 case 1: { 1186 sink_(GetEmit5(index, (op >> 2) + 0)); 1187 break; 1188 } 1189 } 1190 return; 1191 } 1192 case 9: { 1193 const auto index = buffer_ & 511; 1194 const auto op = GetOp6(index); 1195 switch (op & 3) { 1196 case 0: { 1197 ok_ = false; 1198 break; 1199 } 1200 case 1: { 1201 sink_(GetEmit6(index, (op >> 2) + 0)); 1202 break; 1203 } 1204 } 1205 return; 1206 } 1207 case 10: { 1208 const auto index = buffer_ & 1023; 1209 const auto op = GetOp7(index); 1210 switch (op & 3) { 1211 case 0: { 1212 sink_(GetEmit7(index, (op >> 2) + 0)); 1213 sink_(GetEmit7(index, (op >> 2) + 1)); 1214 break; 1215 } 1216 case 1: { 1217 ok_ = false; 1218 break; 1219 } 1220 case 2: { 1221 sink_(GetEmit7(index, (op >> 2) + 0)); 1222 break; 1223 } 1224 } 1225 return; 1226 } 1227 case 11: { 1228 const auto index = buffer_ & 2047; 1229 const auto op = GetOp8(index); 1230 switch (op & 3) { 1231 case 0: { 1232 ok_ = false; 1233 break; 1234 } 1235 case 1: { 1236 sink_(GetEmit8(index, (op >> 2) + 0)); 1237 sink_(GetEmit8(index, (op >> 2) + 1)); 1238 break; 1239 } 1240 case 2: { 1241 sink_(GetEmit8(index, (op >> 2) + 0)); 1242 break; 1243 } 1244 } 1245 return; 1246 } 1247 case 0: { 1248 return; 1249 } 1250 } 1251 } DecodeStep0()1252 void DecodeStep0() { 1253 if (!RefillTo1()) { 1254 Done1(); 1255 return; 1256 } 1257 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1258 const auto op = GetOp9(index); 1259 const int consumed = op & 1; 1260 buffer_len_ -= consumed; 1261 const auto emit_ofs = op >> 1; 1262 sink_(GetEmit9(index, emit_ofs + 0)); 1263 } RefillTo1()1264 bool RefillTo1() { 1265 switch (buffer_len_) { 1266 case 0: { 1267 return Read1to8Bytes(); 1268 } 1269 } 1270 return true; 1271 } Read1to8Bytes()1272 bool Read1to8Bytes() { 1273 switch (end_ - begin_) { 1274 case 0: { 1275 return false; 1276 } 1277 case 1: { 1278 Fill1(); 1279 return true; 1280 } 1281 case 2: { 1282 Fill2(); 1283 return true; 1284 } 1285 case 3: { 1286 Fill3(); 1287 return true; 1288 } 1289 case 4: { 1290 Fill4(); 1291 return true; 1292 } 1293 case 5: { 1294 Fill5(); 1295 return true; 1296 } 1297 case 6: { 1298 Fill6(); 1299 return true; 1300 } 1301 case 7: { 1302 Fill7(); 1303 return true; 1304 } 1305 default: { 1306 Fill8(); 1307 return true; 1308 } 1309 } 1310 } Done1()1311 void Done1() { 1312 done_ = true; 1313 ok_ = false; 1314 } DecodeStep1()1315 void DecodeStep1() { 1316 if (!RefillTo1()) { 1317 Done2(); 1318 return; 1319 } 1320 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1321 const auto op = GetOp10(index); 1322 const int consumed = op & 1; 1323 buffer_len_ -= consumed; 1324 const auto emit_ofs = op >> 1; 1325 sink_(GetEmit10(index, emit_ofs + 0)); 1326 } Done2()1327 void Done2() { 1328 done_ = true; 1329 ok_ = false; 1330 } DecodeStep2()1331 void DecodeStep2() { 1332 if (!RefillTo1()) { 1333 Done3(); 1334 return; 1335 } 1336 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1337 const auto op = GetOp11(index); 1338 const int consumed = op & 1; 1339 buffer_len_ -= consumed; 1340 const auto emit_ofs = op >> 1; 1341 sink_(GetEmit11(index, emit_ofs + 0)); 1342 } Done3()1343 void Done3() { 1344 done_ = true; 1345 ok_ = false; 1346 } DecodeStep3()1347 void DecodeStep3() { 1348 if (!RefillTo15()) { 1349 Done4(); 1350 return; 1351 } 1352 const auto index = (buffer_ >> (buffer_len_ - 15)) & 0x7fff; 1353 const auto op = GetOp12(index); 1354 const int consumed = op & 15; 1355 buffer_len_ -= consumed; 1356 const auto emit_ofs = op >> 8; 1357 switch ((op >> 4) & 15) { 1358 case 0: { 1359 sink_(GetEmit12(index, emit_ofs + 0)); 1360 break; 1361 } 1362 case 1: { 1363 DecodeStep4(); 1364 break; 1365 } 1366 case 2: { 1367 DecodeStep5(); 1368 break; 1369 } 1370 case 3: { 1371 DecodeStep6(); 1372 break; 1373 } 1374 case 4: { 1375 DecodeStep7(); 1376 break; 1377 } 1378 case 5: { 1379 DecodeStep8(); 1380 break; 1381 } 1382 case 6: { 1383 DecodeStep9(); 1384 break; 1385 } 1386 case 7: { 1387 DecodeStep10(); 1388 break; 1389 } 1390 case 8: { 1391 DecodeStep11(); 1392 break; 1393 } 1394 case 9: { 1395 DecodeStep12(); 1396 break; 1397 } 1398 case 10: { 1399 DecodeStep13(); 1400 break; 1401 } 1402 case 11: { 1403 DecodeStep14(); 1404 break; 1405 } 1406 case 12: { 1407 DecodeStep15(); 1408 break; 1409 } 1410 case 13: { 1411 DecodeStep16(); 1412 break; 1413 } 1414 case 14: { 1415 DecodeStep17(); 1416 break; 1417 } 1418 case 15: { 1419 DecodeStep18(); 1420 break; 1421 } 1422 } 1423 } RefillTo15()1424 bool RefillTo15() { 1425 switch (buffer_len_) { 1426 case 0: { 1427 return Read2to8Bytes(); 1428 } 1429 case 1: 1430 case 2: 1431 case 3: 1432 case 4: 1433 case 5: 1434 case 6: { 1435 return Read2to7Bytes(); 1436 } 1437 case 7: 1438 case 8: { 1439 return Read1to7Bytes(); 1440 } 1441 case 9: 1442 case 10: 1443 case 11: 1444 case 12: 1445 case 13: 1446 case 14: { 1447 return Read1to6Bytes(); 1448 } 1449 } 1450 return true; 1451 } Done4()1452 void Done4() { 1453 done_ = true; 1454 switch (end_ - begin_) { 1455 case 1: { 1456 Fill1(); 1457 break; 1458 } 1459 } 1460 switch (buffer_len_) { 1461 case 1: { 1462 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1463 return; 1464 } 1465 case 2: { 1466 const auto index = buffer_ & 3; 1467 const auto op = GetOp13(index); 1468 switch (op & 3) { 1469 case 0: { 1470 sink_(GetEmit13(index, (op >> 2) + 0)); 1471 break; 1472 } 1473 case 1: { 1474 ok_ = false; 1475 break; 1476 } 1477 } 1478 return; 1479 } 1480 case 3: { 1481 const auto index = buffer_ & 7; 1482 const auto op = GetOp14(index); 1483 switch (op & 3) { 1484 case 0: { 1485 ok_ = false; 1486 break; 1487 } 1488 case 1: { 1489 sink_(GetEmit14(index, (op >> 2) + 0)); 1490 break; 1491 } 1492 } 1493 return; 1494 } 1495 case 4: { 1496 const auto index = buffer_ & 15; 1497 const auto op = GetOp15(index); 1498 switch (op & 3) { 1499 case 0: { 1500 ok_ = false; 1501 break; 1502 } 1503 case 1: { 1504 sink_(GetEmit15(index, (op >> 2) + 0)); 1505 break; 1506 } 1507 } 1508 return; 1509 } 1510 case 5: { 1511 const auto index = buffer_ & 31; 1512 const auto op = GetOp16(index); 1513 switch (op & 3) { 1514 case 0: { 1515 ok_ = false; 1516 break; 1517 } 1518 case 1: { 1519 sink_(GetEmit16(index, (op >> 2) + 0)); 1520 break; 1521 } 1522 } 1523 return; 1524 } 1525 case 6: { 1526 const auto index = buffer_ & 63; 1527 const auto op = GetOp17(index); 1528 switch (op & 3) { 1529 case 0: { 1530 ok_ = false; 1531 break; 1532 } 1533 case 1: { 1534 sink_(GetEmit17(index, (op >> 2) + 0)); 1535 break; 1536 } 1537 } 1538 return; 1539 } 1540 case 7: { 1541 const auto index = buffer_ & 127; 1542 const auto op = GetOp18(index); 1543 switch (op & 3) { 1544 case 0: { 1545 sink_(GetEmit18(index, (op >> 2) + 0)); 1546 sink_(GetEmit18(index, (op >> 2) + 1)); 1547 break; 1548 } 1549 case 1: { 1550 ok_ = false; 1551 break; 1552 } 1553 case 2: { 1554 sink_(GetEmit18(index, (op >> 2) + 0)); 1555 break; 1556 } 1557 } 1558 return; 1559 } 1560 case 8: { 1561 const auto index = buffer_ & 255; 1562 const auto op = GetOp19(index); 1563 switch (op & 3) { 1564 case 0: { 1565 ok_ = false; 1566 break; 1567 } 1568 case 1: { 1569 sink_(GetEmit19(index, (op >> 2) + 0)); 1570 sink_(GetEmit19(index, (op >> 2) + 1)); 1571 break; 1572 } 1573 case 2: { 1574 sink_(GetEmit19(index, (op >> 2) + 0)); 1575 break; 1576 } 1577 } 1578 return; 1579 } 1580 case 9: { 1581 const auto index = buffer_ & 511; 1582 const auto op = GetOp20(index); 1583 switch (op & 3) { 1584 case 0: { 1585 ok_ = false; 1586 break; 1587 } 1588 case 1: { 1589 sink_(GetEmit20(index, (op >> 2) + 0)); 1590 sink_(GetEmit20(index, (op >> 2) + 1)); 1591 break; 1592 } 1593 case 2: { 1594 sink_(GetEmit20(index, (op >> 2) + 0)); 1595 break; 1596 } 1597 } 1598 return; 1599 } 1600 case 10: { 1601 const auto index = buffer_ & 1023; 1602 const auto op = GetOp21(index); 1603 switch (op & 3) { 1604 case 0: { 1605 ok_ = false; 1606 break; 1607 } 1608 case 1: { 1609 sink_(GetEmit21(index, (op >> 2) + 0)); 1610 sink_(GetEmit21(index, (op >> 2) + 1)); 1611 break; 1612 } 1613 case 2: { 1614 sink_(GetEmit21(index, (op >> 2) + 0)); 1615 break; 1616 } 1617 } 1618 return; 1619 } 1620 case 11: { 1621 const auto index = buffer_ & 2047; 1622 const auto op = GetOp22(index); 1623 switch (op & 3) { 1624 case 0: { 1625 ok_ = false; 1626 break; 1627 } 1628 case 1: { 1629 sink_(GetEmit22(index, (op >> 2) + 0)); 1630 sink_(GetEmit22(index, (op >> 2) + 1)); 1631 break; 1632 } 1633 case 2: { 1634 sink_(GetEmit22(index, (op >> 2) + 0)); 1635 break; 1636 } 1637 } 1638 return; 1639 } 1640 case 12: { 1641 const auto index = buffer_ & 4095; 1642 const auto op = GetOp23(index); 1643 switch (op & 7) { 1644 case 0: { 1645 sink_(GetEmit23(index, (op >> 3) + 0)); 1646 sink_(GetEmit23(index, (op >> 3) + 1)); 1647 sink_(GetEmit23(index, (op >> 3) + 2)); 1648 break; 1649 } 1650 case 1: { 1651 ok_ = false; 1652 break; 1653 } 1654 case 2: { 1655 sink_(GetEmit23(index, (op >> 3) + 0)); 1656 sink_(GetEmit23(index, (op >> 3) + 1)); 1657 break; 1658 } 1659 case 3: { 1660 sink_(GetEmit23(index, (op >> 3) + 0)); 1661 break; 1662 } 1663 } 1664 return; 1665 } 1666 case 13: { 1667 const auto index = buffer_ & 8191; 1668 const auto op = GetOp24(index); 1669 switch (op & 7) { 1670 case 0: { 1671 ok_ = false; 1672 break; 1673 } 1674 case 1: { 1675 sink_(GetEmit24(index, (op >> 3) + 0)); 1676 sink_(GetEmit24(index, (op >> 3) + 1)); 1677 sink_(GetEmit24(index, (op >> 3) + 2)); 1678 break; 1679 } 1680 case 2: { 1681 sink_(GetEmit24(index, (op >> 3) + 0)); 1682 sink_(GetEmit24(index, (op >> 3) + 1)); 1683 break; 1684 } 1685 case 3: { 1686 sink_(GetEmit24(index, (op >> 3) + 0)); 1687 break; 1688 } 1689 } 1690 return; 1691 } 1692 case 14: { 1693 const auto index = buffer_ & 16383; 1694 const auto op = GetOp25(index); 1695 switch (op & 7) { 1696 case 0: { 1697 ok_ = false; 1698 break; 1699 } 1700 case 1: { 1701 sink_(GetEmit25(index, (op >> 3) + 0)); 1702 sink_(GetEmit25(index, (op >> 3) + 1)); 1703 sink_(GetEmit25(index, (op >> 3) + 2)); 1704 break; 1705 } 1706 case 2: { 1707 sink_(GetEmit25(index, (op >> 3) + 0)); 1708 sink_(GetEmit25(index, (op >> 3) + 1)); 1709 break; 1710 } 1711 case 3: { 1712 sink_(GetEmit25(index, (op >> 3) + 0)); 1713 break; 1714 } 1715 } 1716 return; 1717 } 1718 case 0: { 1719 return; 1720 } 1721 } 1722 } DecodeStep4()1723 void DecodeStep4() { 1724 if (!RefillTo1()) { 1725 Done5(); 1726 return; 1727 } 1728 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1729 const auto op = GetOp26(index); 1730 const int consumed = op & 1; 1731 buffer_len_ -= consumed; 1732 const auto emit_ofs = op >> 1; 1733 sink_(GetEmit26(index, emit_ofs + 0)); 1734 } Done5()1735 void Done5() { 1736 done_ = true; 1737 ok_ = false; 1738 } DecodeStep5()1739 void DecodeStep5() { 1740 if (!RefillTo1()) { 1741 Done6(); 1742 return; 1743 } 1744 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1745 const auto op = GetOp27(index); 1746 const int consumed = op & 1; 1747 buffer_len_ -= consumed; 1748 const auto emit_ofs = op >> 1; 1749 sink_(GetEmit27(index, emit_ofs + 0)); 1750 } Done6()1751 void Done6() { 1752 done_ = true; 1753 ok_ = false; 1754 } DecodeStep6()1755 void DecodeStep6() { 1756 if (!RefillTo1()) { 1757 Done7(); 1758 return; 1759 } 1760 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1761 const auto op = GetOp28(index); 1762 const int consumed = op & 1; 1763 buffer_len_ -= consumed; 1764 const auto emit_ofs = op >> 1; 1765 sink_(GetEmit28(index, emit_ofs + 0)); 1766 } Done7()1767 void Done7() { 1768 done_ = true; 1769 ok_ = false; 1770 } DecodeStep7()1771 void DecodeStep7() { 1772 if (!RefillTo1()) { 1773 Done8(); 1774 return; 1775 } 1776 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1777 const auto op = GetOp29(index); 1778 const int consumed = op & 1; 1779 buffer_len_ -= consumed; 1780 const auto emit_ofs = op >> 1; 1781 sink_(GetEmit29(index, emit_ofs + 0)); 1782 } Done8()1783 void Done8() { 1784 done_ = true; 1785 ok_ = false; 1786 } DecodeStep8()1787 void DecodeStep8() { 1788 if (!RefillTo1()) { 1789 Done9(); 1790 return; 1791 } 1792 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1793 const auto op = GetOp30(index); 1794 const int consumed = op & 1; 1795 buffer_len_ -= consumed; 1796 const auto emit_ofs = op >> 1; 1797 sink_(GetEmit30(index, emit_ofs + 0)); 1798 } Done9()1799 void Done9() { 1800 done_ = true; 1801 ok_ = false; 1802 } DecodeStep9()1803 void DecodeStep9() { 1804 if (!RefillTo1()) { 1805 Done10(); 1806 return; 1807 } 1808 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1809 const auto op = GetOp31(index); 1810 const int consumed = op & 1; 1811 buffer_len_ -= consumed; 1812 const auto emit_ofs = op >> 1; 1813 sink_(GetEmit31(index, emit_ofs + 0)); 1814 } Done10()1815 void Done10() { 1816 done_ = true; 1817 ok_ = false; 1818 } DecodeStep10()1819 void DecodeStep10() { 1820 if (!RefillTo1()) { 1821 Done11(); 1822 return; 1823 } 1824 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1825 const auto op = GetOp32(index); 1826 const int consumed = op & 1; 1827 buffer_len_ -= consumed; 1828 const auto emit_ofs = op >> 1; 1829 sink_(GetEmit32(index, emit_ofs + 0)); 1830 } Done11()1831 void Done11() { 1832 done_ = true; 1833 ok_ = false; 1834 } DecodeStep11()1835 void DecodeStep11() { 1836 if (!RefillTo1()) { 1837 Done12(); 1838 return; 1839 } 1840 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1841 const auto op = GetOp33(index); 1842 const int consumed = op & 1; 1843 buffer_len_ -= consumed; 1844 const auto emit_ofs = op >> 1; 1845 sink_(GetEmit33(index, emit_ofs + 0)); 1846 } Done12()1847 void Done12() { 1848 done_ = true; 1849 ok_ = false; 1850 } DecodeStep12()1851 void DecodeStep12() { 1852 if (!RefillTo1()) { 1853 Done13(); 1854 return; 1855 } 1856 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1857 const auto op = GetOp34(index); 1858 const int consumed = op & 1; 1859 buffer_len_ -= consumed; 1860 const auto emit_ofs = op >> 1; 1861 sink_(GetEmit34(index, emit_ofs + 0)); 1862 } Done13()1863 void Done13() { 1864 done_ = true; 1865 ok_ = false; 1866 } DecodeStep13()1867 void DecodeStep13() { 1868 if (!RefillTo1()) { 1869 Done14(); 1870 return; 1871 } 1872 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1873 const auto op = GetOp35(index); 1874 const int consumed = op & 1; 1875 buffer_len_ -= consumed; 1876 const auto emit_ofs = op >> 1; 1877 sink_(GetEmit35(index, emit_ofs + 0)); 1878 } Done14()1879 void Done14() { 1880 done_ = true; 1881 ok_ = false; 1882 } DecodeStep14()1883 void DecodeStep14() { 1884 if (!RefillTo1()) { 1885 Done15(); 1886 return; 1887 } 1888 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1889 const auto op = GetOp36(index); 1890 const int consumed = op & 1; 1891 buffer_len_ -= consumed; 1892 const auto emit_ofs = op >> 1; 1893 sink_(GetEmit36(index, emit_ofs + 0)); 1894 } Done15()1895 void Done15() { 1896 done_ = true; 1897 ok_ = false; 1898 } DecodeStep15()1899 void DecodeStep15() { 1900 if (!RefillTo1()) { 1901 Done16(); 1902 return; 1903 } 1904 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1905 const auto op = GetOp37(index); 1906 const int consumed = op & 1; 1907 buffer_len_ -= consumed; 1908 const auto emit_ofs = op >> 1; 1909 sink_(GetEmit37(index, emit_ofs + 0)); 1910 } Done16()1911 void Done16() { 1912 done_ = true; 1913 ok_ = false; 1914 } DecodeStep16()1915 void DecodeStep16() { 1916 if (!RefillTo1()) { 1917 Done17(); 1918 return; 1919 } 1920 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1921 const auto op = GetOp38(index); 1922 const int consumed = op & 1; 1923 buffer_len_ -= consumed; 1924 const auto emit_ofs = op >> 1; 1925 sink_(GetEmit38(index, emit_ofs + 0)); 1926 } Done17()1927 void Done17() { 1928 done_ = true; 1929 ok_ = false; 1930 } DecodeStep17()1931 void DecodeStep17() { 1932 if (!RefillTo1()) { 1933 Done18(); 1934 return; 1935 } 1936 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1937 const auto op = GetOp39(index); 1938 const int consumed = op & 1; 1939 buffer_len_ -= consumed; 1940 const auto emit_ofs = op >> 1; 1941 sink_(GetEmit39(index, emit_ofs + 0)); 1942 } Done18()1943 void Done18() { 1944 done_ = true; 1945 ok_ = false; 1946 } DecodeStep18()1947 void DecodeStep18() { 1948 if (!RefillTo3()) { 1949 Done19(); 1950 return; 1951 } 1952 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1953 const auto op = GetOp40(index); 1954 const int consumed = op & 3; 1955 buffer_len_ -= consumed; 1956 const auto emit_ofs = op >> 3; 1957 switch ((op >> 2) & 1) { 1958 case 0: { 1959 sink_(GetEmit40(index, emit_ofs + 0)); 1960 break; 1961 } 1962 case 1: { 1963 begin_ = end_; 1964 buffer_len_ = 0; 1965 break; 1966 } 1967 } 1968 } RefillTo3()1969 bool RefillTo3() { 1970 switch (buffer_len_) { 1971 case 0: { 1972 return Read1to8Bytes(); 1973 } 1974 case 1: 1975 case 2: { 1976 return Read1to7Bytes(); 1977 } 1978 } 1979 return true; 1980 } Done19()1981 void Done19() { 1982 done_ = true; 1983 switch (buffer_len_) { 1984 case 1: { 1985 const auto index = buffer_ & 1; 1986 const auto op = GetOp41(index); 1987 switch (op & 1) { 1988 case 0: { 1989 sink_(GetEmit41(index, (op >> 1) + 0)); 1990 break; 1991 } 1992 } 1993 return; 1994 } 1995 case 2: { 1996 const auto index = buffer_ & 3; 1997 const auto op = GetOp42(index); 1998 switch (op & 3) { 1999 case 0: { 2000 ok_ = false; 2001 break; 2002 } 2003 case 1: { 2004 sink_(GetEmit42(index, (op >> 2) + 0)); 2005 break; 2006 } 2007 } 2008 return; 2009 } 2010 case 0: { 2011 return; 2012 } 2013 } 2014 } 2015 F sink_; 2016 const uint8_t* begin_; 2017 const uint8_t* const end_; 2018 uint64_t buffer_ = 0; 2019 int buffer_len_ = 0; 2020 bool ok_ = true; 2021 bool done_ = false; 2022 }; 2023 } // namespace geometry_12_15 2024 } // namespace grpc_core 2025 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_12_15_H 2026