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