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_9_7_14_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_7_14_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_9_7_14 { 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 } GetOp1(size_t i)48 static inline uint64_t GetOp1(size_t i) { 49 return table1_ops_[i >> 5][i & 0x1f]; 50 } GetEmit1(size_t i,size_t emit)51 static inline uint64_t GetEmit1(size_t i, size_t emit) { 52 return table1_emit_[i >> 5][emit]; 53 } GetOp6(size_t i)54 static inline uint64_t GetOp6(size_t i) { return i ? 3 : 1; } GetEmit6(size_t,size_t emit)55 static inline uint64_t GetEmit6(size_t, size_t emit) { return emit + 33; } GetOp7(size_t i)56 static inline uint64_t GetOp7(size_t i) { return i ? 3 : 1; } GetEmit7(size_t,size_t emit)57 static inline uint64_t GetEmit7(size_t, size_t emit) { return emit + 40; } GetOp9(size_t i)58 static inline uint64_t GetOp9(size_t i) { return i; } GetEmit9(size_t,size_t emit)59 static inline uint64_t GetEmit9(size_t, size_t emit) { 60 return ((void)emit, 63); 61 } GetOp8(size_t i)62 static inline uint64_t GetOp8(size_t i) { 63 return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1 64 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1)) 65 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6)); 66 } GetEmit8(size_t,size_t emit)67 static inline uint64_t GetEmit8(size_t, size_t emit) { 68 return (emit < 1 ? (((void)emit, 63)) : ((emit - 1) ? 43 : 39)); 69 } GetOp11(size_t i)70 static inline uint64_t GetOp11(size_t i) { 71 return (i < 2 ? (i) : ((i - 2) + 1)); 72 } GetEmit11(size_t,size_t emit)73 static inline uint64_t GetEmit11(size_t, size_t emit) { 74 return ((void)emit, 124); 75 } GetOp12(size_t i)76 static inline uint64_t GetOp12(size_t i) { 77 return table12_0_inner_[table12_0_outer_[i]]; 78 } GetEmit12(size_t,size_t emit)79 static inline uint64_t GetEmit12(size_t, size_t emit) { 80 return (emit < 1 ? (((void)emit, 124)) : ((emit - 1) ? 62 : 35)); 81 } GetOp13(size_t i)82 static inline uint64_t GetOp13(size_t i) { 83 return table13_0_inner_[table13_0_outer_[i]]; 84 } GetEmit13(size_t,size_t emit)85 static inline uint64_t GetEmit13(size_t, size_t emit) { 86 return table13_0_emit_[emit]; 87 } GetOp14(size_t i)88 static inline uint64_t GetOp14(size_t i) { return table14_0_ops_[i]; } GetEmit14(size_t,size_t emit)89 static inline uint64_t GetEmit14(size_t, size_t emit) { 90 return table14_0_emit_[emit]; 91 } GetOp15(size_t i)92 static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; } GetEmit15(size_t,size_t emit)93 static inline uint64_t GetEmit15(size_t, size_t emit) { 94 return table15_0_emit_[emit]; 95 } GetOp10(size_t i)96 static inline uint64_t GetOp10(size_t i) { 97 return table10_ops_[i >> 5][i & 0x1f]; 98 } GetEmit10(size_t i,size_t emit)99 static inline uint64_t GetEmit10(size_t i, size_t emit) { 100 return table10_emit_[i >> 5][emit]; 101 } GetOp17(size_t i)102 static inline uint64_t GetOp17(size_t i) { 103 return ((i < 3 ? (i) : (((void)(i - 3), 3))) < 2 104 ? ((i < 3 ? (i) : (((void)(i - 3), 3))) ? 2 : 0) 105 : (((i < 3 ? (i) : (((void)(i - 3), 3))) - 2) ? 1 : 4)); 106 } GetEmit17(size_t,size_t emit)107 static inline uint64_t GetEmit17(size_t, size_t emit) { 108 return (emit < 1 ? (((void)emit, 92)) : ((emit - 1) ? 208 : 195)); 109 } GetOp18(size_t i)110 static inline uint64_t GetOp18(size_t i) { 111 return table18_0_inner_[table18_0_outer_[i]]; 112 } GetEmit18(size_t,size_t emit)113 static inline uint64_t GetEmit18(size_t, size_t emit) { 114 return table18_0_emit_[emit]; 115 } GetOp16(size_t i)116 static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; } GetEmit16(size_t,size_t emit)117 static inline uint64_t GetEmit16(size_t, size_t emit) { 118 return table16_0_emit_[emit]; 119 } GetOp20(size_t i)120 static inline uint64_t GetOp20(size_t i) { return table20_0_ops_[i]; } GetEmit20(size_t,size_t emit)121 static inline uint64_t GetEmit20(size_t, size_t emit) { 122 return table20_0_emit_[emit]; 123 } GetOp21(size_t i)124 static inline uint64_t GetOp21(size_t i) { return table21_0_ops_[i]; } GetEmit21(size_t,size_t emit)125 static inline uint64_t GetEmit21(size_t, size_t emit) { 126 return table21_0_emit_[emit]; 127 } GetOp22(size_t i)128 static inline uint64_t GetOp22(size_t i) { return table22_0_ops_[i]; } GetEmit22(size_t,size_t emit)129 static inline uint64_t GetEmit22(size_t, size_t emit) { 130 return table22_0_emit_[emit]; 131 } GetOp23(size_t i)132 static inline uint64_t GetOp23(size_t i) { 133 return table23_ops_[i >> 7][i & 0x7f]; 134 } GetEmit23(size_t i,size_t emit)135 static inline uint64_t GetEmit23(size_t i, size_t emit) { 136 return table23_emit_[i >> 7][emit]; 137 } GetOp24(size_t i)138 static inline uint64_t GetOp24(size_t i) { 139 return table24_ops_[i >> 8][i & 0xff]; 140 } GetEmit24(size_t i,size_t emit)141 static inline uint64_t GetEmit24(size_t i, size_t emit) { 142 return table24_emit_[i >> 8][emit]; 143 } GetOp25(size_t i)144 static inline uint64_t GetOp25(size_t i) { 145 return table25_ops_[i >> 6][i & 0x3f]; 146 } GetEmit25(size_t i,size_t emit)147 static inline uint64_t GetEmit25(size_t i, size_t emit) { 148 return table25_emit_[i >> 6][emit]; 149 } GetOp26(size_t i)150 static inline uint64_t GetOp26(size_t i) { 151 return table26_ops_[i >> 6][i & 0x3f]; 152 } GetEmit26(size_t i,size_t emit)153 static inline uint64_t GetEmit26(size_t i, size_t emit) { 154 return table26_emit_[i >> 6][emit]; 155 } GetOp27(size_t i)156 static inline uint64_t GetOp27(size_t i) { 157 return table27_ops_[i >> 7][i & 0x7f]; 158 } GetEmit27(size_t i,size_t emit)159 static inline uint64_t GetEmit27(size_t i, size_t emit) { 160 return table27_emit_[i >> 7][emit]; 161 } GetOp28(size_t i)162 static inline uint64_t GetOp28(size_t i) { 163 return table28_ops_[i >> 7][i & 0x7f]; 164 } GetEmit28(size_t i,size_t emit)165 static inline uint64_t GetEmit28(size_t i, size_t emit) { 166 return table28_emit_[i >> 7][emit]; 167 } GetOp19(size_t i)168 static inline uint64_t GetOp19(size_t i) { 169 return table19_ops_[i >> 8][i & 0xff]; 170 } GetEmit19(size_t i,size_t emit)171 static inline uint64_t GetEmit19(size_t i, size_t emit) { 172 return table19_emit_[i >> 8][emit]; 173 } 174 175 private: 176 static const uint8_t table2_0_emit_[10]; 177 static const uint8_t table2_0_ops_[32]; 178 static const uint8_t table3_0_emit_[36]; 179 static const uint8_t table3_0_ops_[64]; 180 static const uint8_t table4_0_emit_[22]; 181 static const uint8_t table4_0_ops_[64]; 182 static const uint8_t table4_1_emit_[46]; 183 static const uint8_t table4_1_ops_[64]; 184 static const uint8_t* const table4_emit_[2]; 185 static const uint8_t* const table4_ops_[2]; 186 static const uint8_t table5_0_ops_[128]; 187 static const uint8_t table5_1_emit_[52]; 188 static const uint8_t table5_1_ops_[128]; 189 static const uint8_t* const table5_emit_[2]; 190 static const uint8_t* const table5_ops_[2]; 191 static const uint8_t table1_0_emit_[2]; 192 static const uint16_t table1_0_ops_[32]; 193 static const uint8_t table1_1_emit_[2]; 194 static const uint8_t table1_2_emit_[2]; 195 static const uint8_t table1_3_emit_[2]; 196 static const uint8_t table1_4_emit_[2]; 197 static const uint8_t table1_5_emit_[4]; 198 static const uint16_t table1_5_ops_[32]; 199 static const uint8_t table1_6_emit_[4]; 200 static const uint8_t table1_7_emit_[4]; 201 static const uint8_t table1_8_emit_[4]; 202 static const uint8_t table1_9_emit_[4]; 203 static const uint8_t table1_10_emit_[4]; 204 static const uint8_t table1_11_emit_[6]; 205 static const uint16_t table1_11_ops_[32]; 206 static const uint8_t table1_12_emit_[8]; 207 static const uint16_t table1_12_ops_[32]; 208 static const uint8_t table1_13_emit_[8]; 209 static const uint8_t table1_14_emit_[8]; 210 static const uint8_t table1_15_emit_[10]; 211 static const uint16_t table1_15_ops_[32]; 212 static const uint8_t* const table1_emit_[16]; 213 static const uint16_t* const table1_ops_[16]; 214 static const uint8_t table12_0_inner_[5]; 215 static const uint8_t table12_0_outer_[8]; 216 static const uint8_t table13_0_emit_[9]; 217 static const uint8_t table13_0_inner_[11]; 218 static const uint8_t table13_0_outer_[16]; 219 static const uint8_t table14_0_emit_[11]; 220 static const uint8_t table14_0_ops_[32]; 221 static const uint8_t table15_0_emit_[14]; 222 static const uint8_t table15_0_ops_[64]; 223 static const uint8_t table10_0_emit_[1]; 224 static const uint8_t table10_0_ops_[32]; 225 static const uint8_t table10_1_emit_[2]; 226 static const uint8_t table10_1_ops_[32]; 227 static const uint8_t table10_2_emit_[4]; 228 static const uint8_t table10_2_ops_[32]; 229 static const uint8_t table10_3_emit_[7]; 230 static const uint8_t table10_3_ops_[32]; 231 static const uint8_t* const table10_emit_[4]; 232 static const uint8_t* const table10_ops_[4]; 233 static const uint8_t table18_0_emit_[11]; 234 static const uint8_t table18_0_inner_[12]; 235 static const uint8_t table18_0_outer_[16]; 236 static const uint8_t table16_0_emit_[15]; 237 static const uint8_t table16_0_ops_[32]; 238 static const uint8_t table20_0_emit_[9]; 239 static const uint8_t table20_0_ops_[32]; 240 static const uint8_t table21_0_emit_[35]; 241 static const uint8_t table21_0_ops_[64]; 242 static const uint8_t table22_0_emit_[64]; 243 static const uint8_t table22_0_ops_[128]; 244 static const uint8_t table23_0_emit_[23]; 245 static const uint8_t table23_0_ops_[128]; 246 static const uint8_t table23_1_emit_[53]; 247 static const uint8_t table23_1_ops_[128]; 248 static const uint8_t* const table23_emit_[2]; 249 static const uint8_t* const table23_ops_[2]; 250 static const uint8_t table24_0_ops_[256]; 251 static const uint8_t table24_1_emit_[57]; 252 static const uint8_t table24_1_ops_[256]; 253 static const uint8_t* const table24_emit_[2]; 254 static const uint8_t* const table24_ops_[2]; 255 static const uint8_t table25_0_emit_[40]; 256 static const uint8_t table25_0_ops_[64]; 257 static const uint8_t table25_1_emit_[40]; 258 static const uint8_t table25_2_emit_[40]; 259 static const uint8_t table25_3_emit_[40]; 260 static const uint8_t table25_4_emit_[22]; 261 static const uint8_t table25_4_ops_[64]; 262 static const uint8_t table25_5_emit_[4]; 263 static const uint8_t table25_5_ops_[64]; 264 static const uint8_t table25_6_emit_[4]; 265 static const uint8_t table25_7_emit_[4]; 266 static const uint8_t table25_8_emit_[4]; 267 static const uint8_t table25_9_emit_[4]; 268 static const uint8_t table25_10_emit_[4]; 269 static const uint8_t table25_11_emit_[8]; 270 static const uint8_t table25_11_ops_[64]; 271 static const uint8_t table25_12_emit_[8]; 272 static const uint8_t table25_13_emit_[8]; 273 static const uint8_t table25_14_emit_[11]; 274 static const uint8_t table25_14_ops_[64]; 275 static const uint8_t table25_15_emit_[25]; 276 static const uint8_t table25_15_ops_[64]; 277 static const uint8_t* const table25_emit_[16]; 278 static const uint8_t* const table25_ops_[16]; 279 static const uint8_t table26_0_emit_[72]; 280 static const uint16_t table26_0_ops_[64]; 281 static const uint8_t table26_1_emit_[72]; 282 static const uint8_t table26_2_emit_[72]; 283 static const uint8_t table26_3_emit_[72]; 284 static const uint8_t table26_4_emit_[72]; 285 static const uint8_t table26_5_emit_[72]; 286 static const uint8_t table26_6_emit_[72]; 287 static const uint8_t table26_7_emit_[72]; 288 static const uint8_t table26_8_emit_[72]; 289 static const uint8_t table26_9_emit_[40]; 290 static const uint16_t table26_9_ops_[64]; 291 static const uint8_t table26_10_emit_[40]; 292 static const uint8_t table26_11_emit_[40]; 293 static const uint8_t table26_12_emit_[40]; 294 static const uint8_t table26_13_emit_[40]; 295 static const uint8_t table26_14_emit_[40]; 296 static const uint8_t table26_15_emit_[40]; 297 static const uint8_t table26_16_emit_[40]; 298 static const uint8_t table26_17_emit_[40]; 299 static const uint8_t table26_18_emit_[40]; 300 static const uint8_t table26_19_emit_[40]; 301 static const uint8_t table26_20_emit_[40]; 302 static const uint8_t table26_21_emit_[40]; 303 static const uint8_t table26_22_emit_[4]; 304 static const uint16_t table26_22_ops_[64]; 305 static const uint8_t table26_23_emit_[4]; 306 static const uint8_t table26_24_emit_[4]; 307 static const uint8_t table26_25_emit_[4]; 308 static const uint8_t table26_26_emit_[4]; 309 static const uint8_t table26_27_emit_[4]; 310 static const uint8_t table26_28_emit_[4]; 311 static const uint8_t table26_29_emit_[7]; 312 static const uint16_t table26_29_ops_[64]; 313 static const uint8_t table26_30_emit_[10]; 314 static const uint16_t table26_30_ops_[64]; 315 static const uint8_t table26_31_emit_[34]; 316 static const uint16_t table26_31_ops_[64]; 317 static const uint8_t* const table26_emit_[32]; 318 static const uint16_t* const table26_ops_[32]; 319 static const uint8_t table27_0_emit_[136]; 320 static const uint16_t table27_0_ops_[128]; 321 static const uint8_t table27_1_emit_[136]; 322 static const uint8_t table27_2_emit_[136]; 323 static const uint8_t table27_3_emit_[136]; 324 static const uint8_t table27_4_emit_[136]; 325 static const uint8_t table27_5_emit_[136]; 326 static const uint8_t table27_6_emit_[136]; 327 static const uint8_t table27_7_emit_[136]; 328 static const uint8_t table27_8_emit_[136]; 329 static const uint8_t table27_9_emit_[144]; 330 static const uint16_t table27_9_ops_[128]; 331 static const uint8_t table27_10_emit_[144]; 332 static const uint8_t table27_11_emit_[144]; 333 static const uint8_t table27_12_emit_[144]; 334 static const uint8_t table27_13_emit_[144]; 335 static const uint8_t table27_14_emit_[144]; 336 static const uint8_t table27_15_emit_[144]; 337 static const uint8_t table27_16_emit_[144]; 338 static const uint8_t table27_17_emit_[144]; 339 static const uint8_t table27_18_emit_[144]; 340 static const uint8_t table27_19_emit_[144]; 341 static const uint8_t table27_20_emit_[144]; 342 static const uint8_t table27_21_emit_[144]; 343 static const uint8_t table27_22_emit_[80]; 344 static const uint16_t table27_22_ops_[128]; 345 static const uint8_t table27_23_emit_[80]; 346 static const uint8_t table27_24_emit_[80]; 347 static const uint8_t table27_25_emit_[80]; 348 static const uint8_t table27_26_emit_[80]; 349 static const uint8_t table27_27_emit_[80]; 350 static const uint8_t table27_28_emit_[80]; 351 static const uint8_t table27_29_emit_[26]; 352 static const uint16_t table27_29_ops_[128]; 353 static const uint16_t table27_30_ops_[128]; 354 static const uint8_t table27_31_emit_[63]; 355 static const uint16_t table27_31_ops_[128]; 356 static const uint8_t* const table27_emit_[32]; 357 static const uint16_t* const table27_ops_[32]; 358 static const uint8_t table28_0_emit_[44]; 359 static const uint16_t table28_0_ops_[128]; 360 static const uint8_t table28_1_emit_[104]; 361 static const uint16_t table28_1_ops_[128]; 362 static const uint8_t table28_2_emit_[44]; 363 static const uint8_t table28_3_emit_[104]; 364 static const uint8_t table28_4_emit_[44]; 365 static const uint8_t table28_5_emit_[104]; 366 static const uint8_t table28_6_emit_[44]; 367 static const uint8_t table28_7_emit_[104]; 368 static const uint8_t table28_8_emit_[44]; 369 static const uint8_t table28_9_emit_[104]; 370 static const uint8_t table28_10_emit_[44]; 371 static const uint8_t table28_11_emit_[104]; 372 static const uint8_t table28_12_emit_[44]; 373 static const uint8_t table28_13_emit_[104]; 374 static const uint8_t table28_14_emit_[44]; 375 static const uint8_t table28_15_emit_[104]; 376 static const uint8_t table28_16_emit_[44]; 377 static const uint8_t table28_17_emit_[104]; 378 static const uint8_t table28_18_emit_[136]; 379 static const uint8_t table28_19_emit_[136]; 380 static const uint8_t table28_20_emit_[136]; 381 static const uint8_t table28_21_emit_[136]; 382 static const uint8_t table28_22_emit_[136]; 383 static const uint8_t table28_23_emit_[136]; 384 static const uint8_t table28_24_emit_[136]; 385 static const uint8_t table28_25_emit_[136]; 386 static const uint8_t table28_26_emit_[136]; 387 static const uint8_t table28_27_emit_[136]; 388 static const uint8_t table28_28_emit_[136]; 389 static const uint8_t table28_29_emit_[136]; 390 static const uint8_t table28_30_emit_[136]; 391 static const uint8_t table28_31_emit_[136]; 392 static const uint8_t table28_32_emit_[136]; 393 static const uint8_t table28_33_emit_[136]; 394 static const uint8_t table28_34_emit_[136]; 395 static const uint8_t table28_35_emit_[136]; 396 static const uint8_t table28_36_emit_[136]; 397 static const uint8_t table28_37_emit_[136]; 398 static const uint8_t table28_38_emit_[136]; 399 static const uint8_t table28_39_emit_[136]; 400 static const uint8_t table28_40_emit_[136]; 401 static const uint8_t table28_41_emit_[136]; 402 static const uint8_t table28_42_emit_[136]; 403 static const uint8_t table28_43_emit_[136]; 404 static const uint8_t table28_44_emit_[144]; 405 static const uint8_t table28_45_emit_[144]; 406 static const uint8_t table28_46_emit_[144]; 407 static const uint8_t table28_47_emit_[144]; 408 static const uint8_t table28_48_emit_[144]; 409 static const uint8_t table28_49_emit_[144]; 410 static const uint8_t table28_50_emit_[144]; 411 static const uint8_t table28_51_emit_[144]; 412 static const uint8_t table28_52_emit_[144]; 413 static const uint8_t table28_53_emit_[144]; 414 static const uint8_t table28_54_emit_[144]; 415 static const uint8_t table28_55_emit_[144]; 416 static const uint8_t table28_56_emit_[144]; 417 static const uint8_t table28_57_emit_[144]; 418 static const uint8_t table28_58_emit_[112]; 419 static const uint16_t table28_58_ops_[128]; 420 static const uint8_t table28_59_emit_[80]; 421 static const uint8_t table28_60_emit_[80]; 422 static const uint8_t table28_61_emit_[44]; 423 static const uint16_t table28_61_ops_[128]; 424 static const uint8_t table28_62_emit_[17]; 425 static const uint16_t table28_62_ops_[128]; 426 static const uint8_t table28_63_emit_[46]; 427 static const uint16_t table28_63_ops_[128]; 428 static const uint8_t* const table28_emit_[64]; 429 static const uint16_t* const table28_ops_[64]; 430 static const uint8_t table19_0_emit_[1]; 431 static const uint16_t table19_0_ops_[256]; 432 static const uint8_t table19_2_emit_[1]; 433 static const uint8_t table19_4_emit_[1]; 434 static const uint8_t table19_6_emit_[1]; 435 static const uint8_t table19_8_emit_[1]; 436 static const uint8_t table19_10_emit_[1]; 437 static const uint8_t table19_12_emit_[1]; 438 static const uint8_t table19_14_emit_[1]; 439 static const uint8_t table19_16_emit_[1]; 440 static const uint8_t table19_18_emit_[1]; 441 static const uint16_t table19_18_ops_[256]; 442 static const uint8_t table19_19_emit_[1]; 443 static const uint8_t table19_20_emit_[1]; 444 static const uint8_t table19_21_emit_[1]; 445 static const uint8_t table19_22_emit_[1]; 446 static const uint8_t table19_23_emit_[1]; 447 static const uint8_t table19_24_emit_[1]; 448 static const uint8_t table19_25_emit_[1]; 449 static const uint8_t table19_26_emit_[1]; 450 static const uint8_t table19_27_emit_[1]; 451 static const uint8_t table19_28_emit_[1]; 452 static const uint8_t table19_29_emit_[1]; 453 static const uint8_t table19_30_emit_[1]; 454 static const uint8_t table19_31_emit_[1]; 455 static const uint8_t table19_32_emit_[1]; 456 static const uint8_t table19_33_emit_[1]; 457 static const uint8_t table19_34_emit_[1]; 458 static const uint8_t table19_35_emit_[1]; 459 static const uint8_t table19_36_emit_[1]; 460 static const uint8_t table19_37_emit_[1]; 461 static const uint8_t table19_38_emit_[1]; 462 static const uint8_t table19_39_emit_[1]; 463 static const uint8_t table19_40_emit_[1]; 464 static const uint8_t table19_41_emit_[1]; 465 static const uint8_t table19_42_emit_[1]; 466 static const uint8_t table19_43_emit_[1]; 467 static const uint8_t table19_44_emit_[2]; 468 static const uint16_t table19_44_ops_[256]; 469 static const uint8_t table19_45_emit_[2]; 470 static const uint8_t table19_46_emit_[2]; 471 static const uint8_t table19_47_emit_[2]; 472 static const uint8_t table19_48_emit_[2]; 473 static const uint8_t table19_49_emit_[2]; 474 static const uint8_t table19_50_emit_[2]; 475 static const uint8_t table19_51_emit_[2]; 476 static const uint8_t table19_52_emit_[2]; 477 static const uint8_t table19_53_emit_[2]; 478 static const uint8_t table19_54_emit_[2]; 479 static const uint8_t table19_55_emit_[2]; 480 static const uint8_t table19_56_emit_[2]; 481 static const uint8_t table19_57_emit_[2]; 482 static const uint8_t table19_58_emit_[3]; 483 static const uint16_t table19_58_ops_[256]; 484 static const uint8_t table19_59_emit_[4]; 485 static const uint16_t table19_59_ops_[256]; 486 static const uint8_t table19_60_emit_[4]; 487 static const uint8_t table19_61_emit_[6]; 488 static const uint16_t table19_61_ops_[256]; 489 static const uint16_t table19_62_ops_[256]; 490 static const uint8_t table19_63_emit_[49]; 491 static const uint16_t table19_63_ops_[256]; 492 static const uint8_t* const table19_emit_[64]; 493 static const uint16_t* const table19_ops_[64]; 494 }; 495 template <typename F> 496 class HuffDecoder : public HuffDecoderCommon { 497 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)498 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 499 : sink_(sink), begin_(begin), end_(end) {} Run()500 bool Run() { 501 while (!done_) { 502 if (!RefillTo9()) { 503 Done0(); 504 break; 505 } 506 const auto index = (buffer_ >> (buffer_len_ - 9)) & 0x1ff; 507 const auto op = GetOp1(index); 508 const int consumed = op & 15; 509 buffer_len_ -= consumed; 510 const auto emit_ofs = op >> 7; 511 switch ((op >> 4) & 7) { 512 case 0: { 513 sink_(GetEmit1(index, emit_ofs + 0)); 514 break; 515 } 516 case 1: { 517 DecodeStep0(); 518 break; 519 } 520 case 2: { 521 DecodeStep1(); 522 break; 523 } 524 case 3: { 525 DecodeStep2(); 526 break; 527 } 528 case 4: { 529 DecodeStep3(); 530 break; 531 } 532 } 533 } 534 return ok_; 535 } 536 537 private: RefillTo9()538 bool RefillTo9() { 539 switch (buffer_len_) { 540 case 0: { 541 return Read2to8Bytes(); 542 } 543 case 1: 544 case 2: 545 case 3: 546 case 4: 547 case 5: 548 case 6: 549 case 7: 550 case 8: { 551 return Read1to7Bytes(); 552 } 553 } 554 return true; 555 } Read2to8Bytes()556 bool Read2to8Bytes() { 557 switch (end_ - begin_) { 558 case 0: 559 case 1: { 560 return false; 561 } 562 case 2: { 563 Fill2(); 564 return true; 565 } 566 case 3: { 567 Fill3(); 568 return true; 569 } 570 case 4: { 571 Fill4(); 572 return true; 573 } 574 case 5: { 575 Fill5(); 576 return true; 577 } 578 case 6: { 579 Fill6(); 580 return true; 581 } 582 case 7: { 583 Fill7(); 584 return true; 585 } 586 default: { 587 Fill8(); 588 return true; 589 } 590 } 591 } Fill2()592 void Fill2() { 593 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 594 (static_cast<uint64_t>(begin_[1]) << 0); 595 begin_ += 2; 596 buffer_len_ += 16; 597 } Fill3()598 void Fill3() { 599 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 600 (static_cast<uint64_t>(begin_[1]) << 8) | 601 (static_cast<uint64_t>(begin_[2]) << 0); 602 begin_ += 3; 603 buffer_len_ += 24; 604 } Fill4()605 void Fill4() { 606 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 607 (static_cast<uint64_t>(begin_[1]) << 16) | 608 (static_cast<uint64_t>(begin_[2]) << 8) | 609 (static_cast<uint64_t>(begin_[3]) << 0); 610 begin_ += 4; 611 buffer_len_ += 32; 612 } Fill5()613 void Fill5() { 614 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 615 (static_cast<uint64_t>(begin_[1]) << 24) | 616 (static_cast<uint64_t>(begin_[2]) << 16) | 617 (static_cast<uint64_t>(begin_[3]) << 8) | 618 (static_cast<uint64_t>(begin_[4]) << 0); 619 begin_ += 5; 620 buffer_len_ += 40; 621 } Fill6()622 void Fill6() { 623 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 624 (static_cast<uint64_t>(begin_[1]) << 32) | 625 (static_cast<uint64_t>(begin_[2]) << 24) | 626 (static_cast<uint64_t>(begin_[3]) << 16) | 627 (static_cast<uint64_t>(begin_[4]) << 8) | 628 (static_cast<uint64_t>(begin_[5]) << 0); 629 begin_ += 6; 630 buffer_len_ += 48; 631 } Fill7()632 void Fill7() { 633 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 634 (static_cast<uint64_t>(begin_[1]) << 40) | 635 (static_cast<uint64_t>(begin_[2]) << 32) | 636 (static_cast<uint64_t>(begin_[3]) << 24) | 637 (static_cast<uint64_t>(begin_[4]) << 16) | 638 (static_cast<uint64_t>(begin_[5]) << 8) | 639 (static_cast<uint64_t>(begin_[6]) << 0); 640 begin_ += 7; 641 buffer_len_ += 56; 642 } Fill8()643 void Fill8() { 644 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 645 (static_cast<uint64_t>(begin_[1]) << 48) | 646 (static_cast<uint64_t>(begin_[2]) << 40) | 647 (static_cast<uint64_t>(begin_[3]) << 32) | 648 (static_cast<uint64_t>(begin_[4]) << 24) | 649 (static_cast<uint64_t>(begin_[5]) << 16) | 650 (static_cast<uint64_t>(begin_[6]) << 8) | 651 (static_cast<uint64_t>(begin_[7]) << 0); 652 begin_ += 8; 653 buffer_len_ += 64; 654 } Read1to7Bytes()655 bool Read1to7Bytes() { 656 switch (end_ - begin_) { 657 case 0: { 658 return false; 659 } 660 case 1: { 661 Fill1(); 662 return true; 663 } 664 case 2: { 665 Fill2(); 666 return true; 667 } 668 case 3: { 669 Fill3(); 670 return true; 671 } 672 case 4: { 673 Fill4(); 674 return true; 675 } 676 case 5: { 677 Fill5(); 678 return true; 679 } 680 case 6: { 681 Fill6(); 682 return true; 683 } 684 default: { 685 Fill7(); 686 return true; 687 } 688 } 689 } Fill1()690 void Fill1() { 691 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 692 begin_ += 1; 693 buffer_len_ += 8; 694 } Done0()695 void Done0() { 696 done_ = true; 697 switch (end_ - begin_) { 698 case 1: { 699 Fill1(); 700 break; 701 } 702 } 703 switch (buffer_len_) { 704 case 1: 705 case 2: 706 case 3: 707 case 4: { 708 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 709 return; 710 } 711 case 5: { 712 const auto index = buffer_ & 31; 713 const auto op = GetOp2(index); 714 switch (op & 3) { 715 case 0: { 716 sink_(GetEmit2(index, (op >> 2) + 0)); 717 break; 718 } 719 case 1: { 720 ok_ = false; 721 break; 722 } 723 } 724 return; 725 } 726 case 6: { 727 const auto index = buffer_ & 63; 728 const auto op = GetOp3(index); 729 switch (op & 3) { 730 case 0: { 731 ok_ = false; 732 break; 733 } 734 case 1: { 735 sink_(GetEmit3(index, (op >> 2) + 0)); 736 break; 737 } 738 } 739 return; 740 } 741 case 7: { 742 const auto index = buffer_ & 127; 743 const auto op = GetOp4(index); 744 switch (op & 3) { 745 case 0: { 746 ok_ = false; 747 break; 748 } 749 case 1: { 750 sink_(GetEmit4(index, (op >> 2) + 0)); 751 break; 752 } 753 } 754 return; 755 } 756 case 8: { 757 const auto index = buffer_ & 255; 758 const auto op = GetOp5(index); 759 switch (op & 3) { 760 case 0: { 761 ok_ = false; 762 break; 763 } 764 case 1: { 765 sink_(GetEmit5(index, (op >> 2) + 0)); 766 break; 767 } 768 } 769 return; 770 } 771 case 0: { 772 return; 773 } 774 } 775 } DecodeStep0()776 void DecodeStep0() { 777 if (!RefillTo1()) { 778 Done1(); 779 return; 780 } 781 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 782 const auto op = GetOp6(index); 783 const int consumed = op & 1; 784 buffer_len_ -= consumed; 785 const auto emit_ofs = op >> 1; 786 sink_(GetEmit6(index, emit_ofs + 0)); 787 } RefillTo1()788 bool RefillTo1() { 789 switch (buffer_len_) { 790 case 0: { 791 return Read1to8Bytes(); 792 } 793 } 794 return true; 795 } Read1to8Bytes()796 bool Read1to8Bytes() { 797 switch (end_ - begin_) { 798 case 0: { 799 return false; 800 } 801 case 1: { 802 Fill1(); 803 return true; 804 } 805 case 2: { 806 Fill2(); 807 return true; 808 } 809 case 3: { 810 Fill3(); 811 return true; 812 } 813 case 4: { 814 Fill4(); 815 return true; 816 } 817 case 5: { 818 Fill5(); 819 return true; 820 } 821 case 6: { 822 Fill6(); 823 return true; 824 } 825 case 7: { 826 Fill7(); 827 return true; 828 } 829 default: { 830 Fill8(); 831 return true; 832 } 833 } 834 } Done1()835 void Done1() { 836 done_ = true; 837 ok_ = false; 838 } DecodeStep1()839 void DecodeStep1() { 840 if (!RefillTo1()) { 841 Done2(); 842 return; 843 } 844 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 845 const auto op = GetOp7(index); 846 const int consumed = op & 1; 847 buffer_len_ -= consumed; 848 const auto emit_ofs = op >> 1; 849 sink_(GetEmit7(index, emit_ofs + 0)); 850 } Done2()851 void Done2() { 852 done_ = true; 853 ok_ = false; 854 } DecodeStep2()855 void DecodeStep2() { 856 if (!RefillTo2()) { 857 Done3(); 858 return; 859 } 860 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 861 const auto op = GetOp8(index); 862 const int consumed = op & 3; 863 buffer_len_ -= consumed; 864 const auto emit_ofs = op >> 2; 865 sink_(GetEmit8(index, emit_ofs + 0)); 866 } RefillTo2()867 bool RefillTo2() { 868 switch (buffer_len_) { 869 case 0: { 870 return Read1to8Bytes(); 871 } 872 case 1: { 873 return Read1to7Bytes(); 874 } 875 } 876 return true; 877 } Done3()878 void Done3() { 879 done_ = true; 880 switch (buffer_len_) { 881 case 1: { 882 const auto index = buffer_ & 1; 883 const auto op = GetOp9(index); 884 switch (op & 1) { 885 case 0: { 886 sink_(GetEmit9(index, (op >> 1) + 0)); 887 break; 888 } 889 case 1: { 890 ok_ = false; 891 break; 892 } 893 } 894 return; 895 } 896 case 0: { 897 ok_ = false; 898 return; 899 } 900 } 901 } DecodeStep3()902 void DecodeStep3() { 903 if (!RefillTo7()) { 904 Done4(); 905 return; 906 } 907 const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f; 908 const auto op = GetOp10(index); 909 const int consumed = op & 7; 910 buffer_len_ -= consumed; 911 const auto emit_ofs = op >> 5; 912 switch ((op >> 3) & 3) { 913 case 0: { 914 sink_(GetEmit10(index, emit_ofs + 0)); 915 break; 916 } 917 case 1: { 918 DecodeStep4(); 919 break; 920 } 921 case 2: { 922 DecodeStep5(); 923 break; 924 } 925 } 926 } RefillTo7()927 bool RefillTo7() { 928 switch (buffer_len_) { 929 case 0: { 930 return Read1to8Bytes(); 931 } 932 case 1: 933 case 2: 934 case 3: 935 case 4: 936 case 5: 937 case 6: { 938 return Read1to7Bytes(); 939 } 940 } 941 return true; 942 } Done4()943 void Done4() { 944 done_ = true; 945 switch (buffer_len_) { 946 case 1: { 947 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 948 return; 949 } 950 case 2: { 951 const auto index = buffer_ & 3; 952 const auto op = GetOp11(index); 953 switch (op & 3) { 954 case 0: { 955 sink_(GetEmit11(index, (op >> 2) + 0)); 956 break; 957 } 958 case 1: { 959 ok_ = false; 960 break; 961 } 962 } 963 return; 964 } 965 case 3: { 966 const auto index = buffer_ & 7; 967 const auto op = GetOp12(index); 968 switch (op & 3) { 969 case 0: { 970 ok_ = false; 971 break; 972 } 973 case 1: { 974 sink_(GetEmit12(index, (op >> 2) + 0)); 975 break; 976 } 977 } 978 return; 979 } 980 case 4: { 981 const auto index = buffer_ & 15; 982 const auto op = GetOp13(index); 983 switch (op & 3) { 984 case 0: { 985 ok_ = false; 986 break; 987 } 988 case 1: { 989 sink_(GetEmit13(index, (op >> 2) + 0)); 990 break; 991 } 992 } 993 return; 994 } 995 case 5: { 996 const auto index = buffer_ & 31; 997 const auto op = GetOp14(index); 998 switch (op & 3) { 999 case 0: { 1000 ok_ = false; 1001 break; 1002 } 1003 case 1: { 1004 sink_(GetEmit14(index, (op >> 2) + 0)); 1005 break; 1006 } 1007 } 1008 return; 1009 } 1010 case 6: { 1011 const auto index = buffer_ & 63; 1012 const auto op = GetOp15(index); 1013 switch (op & 3) { 1014 case 0: { 1015 ok_ = false; 1016 break; 1017 } 1018 case 1: { 1019 sink_(GetEmit15(index, (op >> 2) + 0)); 1020 break; 1021 } 1022 } 1023 return; 1024 } 1025 case 0: { 1026 return; 1027 } 1028 } 1029 } DecodeStep4()1030 void DecodeStep4() { 1031 if (!RefillTo5()) { 1032 Done5(); 1033 return; 1034 } 1035 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 1036 const auto op = GetOp16(index); 1037 const int consumed = op & 7; 1038 buffer_len_ -= consumed; 1039 const auto emit_ofs = op >> 3; 1040 sink_(GetEmit16(index, emit_ofs + 0)); 1041 } RefillTo5()1042 bool RefillTo5() { 1043 switch (buffer_len_) { 1044 case 0: { 1045 return Read1to8Bytes(); 1046 } 1047 case 1: 1048 case 2: 1049 case 3: 1050 case 4: { 1051 return Read1to7Bytes(); 1052 } 1053 } 1054 return true; 1055 } Done5()1056 void Done5() { 1057 done_ = true; 1058 switch (buffer_len_) { 1059 case 1: 1060 case 2: 1061 case 0: { 1062 ok_ = false; 1063 return; 1064 } 1065 case 3: { 1066 const auto index = buffer_ & 7; 1067 const auto op = GetOp17(index); 1068 switch (op & 1) { 1069 case 0: { 1070 sink_(GetEmit17(index, (op >> 1) + 0)); 1071 break; 1072 } 1073 case 1: { 1074 ok_ = false; 1075 break; 1076 } 1077 } 1078 return; 1079 } 1080 case 4: { 1081 const auto index = buffer_ & 15; 1082 const auto op = GetOp18(index); 1083 switch (op & 1) { 1084 case 0: { 1085 ok_ = false; 1086 break; 1087 } 1088 case 1: { 1089 sink_(GetEmit18(index, (op >> 1) + 0)); 1090 break; 1091 } 1092 } 1093 return; 1094 } 1095 } 1096 } DecodeStep5()1097 void DecodeStep5() { 1098 if (!RefillTo14()) { 1099 Done6(); 1100 return; 1101 } 1102 const auto index = (buffer_ >> (buffer_len_ - 14)) & 0x3fff; 1103 const auto op = GetOp19(index); 1104 const int consumed = op & 15; 1105 buffer_len_ -= consumed; 1106 const auto emit_ofs = op >> 5; 1107 switch ((op >> 4) & 1) { 1108 case 0: { 1109 sink_(GetEmit19(index, emit_ofs + 0)); 1110 break; 1111 } 1112 case 1: { 1113 begin_ = end_; 1114 buffer_len_ = 0; 1115 break; 1116 } 1117 } 1118 } RefillTo14()1119 bool RefillTo14() { 1120 switch (buffer_len_) { 1121 case 0: { 1122 return Read2to8Bytes(); 1123 } 1124 case 1: 1125 case 2: 1126 case 3: 1127 case 4: 1128 case 5: { 1129 return Read2to7Bytes(); 1130 } 1131 case 6: 1132 case 7: 1133 case 8: { 1134 return Read1to7Bytes(); 1135 } 1136 case 9: 1137 case 10: 1138 case 11: 1139 case 12: 1140 case 13: { 1141 return Read1to6Bytes(); 1142 } 1143 } 1144 return true; 1145 } Read2to7Bytes()1146 bool Read2to7Bytes() { 1147 switch (end_ - begin_) { 1148 case 0: 1149 case 1: { 1150 return false; 1151 } 1152 case 2: { 1153 Fill2(); 1154 return true; 1155 } 1156 case 3: { 1157 Fill3(); 1158 return true; 1159 } 1160 case 4: { 1161 Fill4(); 1162 return true; 1163 } 1164 case 5: { 1165 Fill5(); 1166 return true; 1167 } 1168 case 6: { 1169 Fill6(); 1170 return true; 1171 } 1172 default: { 1173 Fill7(); 1174 return true; 1175 } 1176 } 1177 } Read1to6Bytes()1178 bool Read1to6Bytes() { 1179 switch (end_ - begin_) { 1180 case 0: { 1181 return false; 1182 } 1183 case 1: { 1184 Fill1(); 1185 return true; 1186 } 1187 case 2: { 1188 Fill2(); 1189 return true; 1190 } 1191 case 3: { 1192 Fill3(); 1193 return true; 1194 } 1195 case 4: { 1196 Fill4(); 1197 return true; 1198 } 1199 case 5: { 1200 Fill5(); 1201 return true; 1202 } 1203 default: { 1204 Fill6(); 1205 return true; 1206 } 1207 } 1208 } Done6()1209 void Done6() { 1210 done_ = true; 1211 switch (end_ - begin_) { 1212 case 1: { 1213 Fill1(); 1214 break; 1215 } 1216 } 1217 switch (buffer_len_) { 1218 case 1: 1219 case 2: 1220 case 3: 1221 case 4: { 1222 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1223 return; 1224 } 1225 case 5: { 1226 const auto index = buffer_ & 31; 1227 const auto op = GetOp20(index); 1228 switch (op & 3) { 1229 case 0: { 1230 sink_(GetEmit20(index, (op >> 2) + 0)); 1231 break; 1232 } 1233 case 1: { 1234 ok_ = false; 1235 break; 1236 } 1237 } 1238 return; 1239 } 1240 case 6: { 1241 const auto index = buffer_ & 63; 1242 const auto op = GetOp21(index); 1243 switch (op & 3) { 1244 case 0: { 1245 ok_ = false; 1246 break; 1247 } 1248 case 1: { 1249 sink_(GetEmit21(index, (op >> 2) + 0)); 1250 break; 1251 } 1252 } 1253 return; 1254 } 1255 case 7: { 1256 const auto index = buffer_ & 127; 1257 const auto op = GetOp22(index); 1258 switch (op & 3) { 1259 case 0: { 1260 ok_ = false; 1261 break; 1262 } 1263 case 1: { 1264 sink_(GetEmit22(index, (op >> 2) + 0)); 1265 break; 1266 } 1267 } 1268 return; 1269 } 1270 case 8: { 1271 const auto index = buffer_ & 255; 1272 const auto op = GetOp23(index); 1273 switch (op & 3) { 1274 case 0: { 1275 ok_ = false; 1276 break; 1277 } 1278 case 1: { 1279 sink_(GetEmit23(index, (op >> 2) + 0)); 1280 break; 1281 } 1282 } 1283 return; 1284 } 1285 case 9: { 1286 const auto index = buffer_ & 511; 1287 const auto op = GetOp24(index); 1288 switch (op & 3) { 1289 case 0: { 1290 ok_ = false; 1291 break; 1292 } 1293 case 1: { 1294 sink_(GetEmit24(index, (op >> 2) + 0)); 1295 break; 1296 } 1297 } 1298 return; 1299 } 1300 case 10: { 1301 const auto index = buffer_ & 1023; 1302 const auto op = GetOp25(index); 1303 switch (op & 3) { 1304 case 0: { 1305 sink_(GetEmit25(index, (op >> 2) + 0)); 1306 sink_(GetEmit25(index, (op >> 2) + 1)); 1307 break; 1308 } 1309 case 1: { 1310 ok_ = false; 1311 break; 1312 } 1313 case 2: { 1314 sink_(GetEmit25(index, (op >> 2) + 0)); 1315 break; 1316 } 1317 } 1318 return; 1319 } 1320 case 11: { 1321 const auto index = buffer_ & 2047; 1322 const auto op = GetOp26(index); 1323 switch (op & 3) { 1324 case 0: { 1325 ok_ = false; 1326 break; 1327 } 1328 case 1: { 1329 sink_(GetEmit26(index, (op >> 2) + 0)); 1330 sink_(GetEmit26(index, (op >> 2) + 1)); 1331 break; 1332 } 1333 case 2: { 1334 sink_(GetEmit26(index, (op >> 2) + 0)); 1335 break; 1336 } 1337 } 1338 return; 1339 } 1340 case 12: { 1341 const auto index = buffer_ & 4095; 1342 const auto op = GetOp27(index); 1343 switch (op & 3) { 1344 case 0: { 1345 ok_ = false; 1346 break; 1347 } 1348 case 1: { 1349 sink_(GetEmit27(index, (op >> 2) + 0)); 1350 sink_(GetEmit27(index, (op >> 2) + 1)); 1351 break; 1352 } 1353 case 2: { 1354 sink_(GetEmit27(index, (op >> 2) + 0)); 1355 break; 1356 } 1357 } 1358 return; 1359 } 1360 case 13: { 1361 const auto index = buffer_ & 8191; 1362 const auto op = GetOp28(index); 1363 switch (op & 3) { 1364 case 0: { 1365 ok_ = false; 1366 break; 1367 } 1368 case 1: { 1369 sink_(GetEmit28(index, (op >> 2) + 0)); 1370 sink_(GetEmit28(index, (op >> 2) + 1)); 1371 break; 1372 } 1373 case 2: { 1374 sink_(GetEmit28(index, (op >> 2) + 0)); 1375 break; 1376 } 1377 } 1378 return; 1379 } 1380 case 0: { 1381 return; 1382 } 1383 } 1384 } 1385 F sink_; 1386 const uint8_t* begin_; 1387 const uint8_t* const end_; 1388 uint64_t buffer_ = 0; 1389 int buffer_len_ = 0; 1390 bool ok_ = true; 1391 bool done_ = false; 1392 }; 1393 } // namespace geometry_9_7_14 1394 } // namespace grpc_core 1395 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_7_14_H 1396