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