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_10_6_14_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_10_6_14_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_10_6_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 } 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 } GetOp1(size_t i)54 static inline uint64_t GetOp1(size_t i) { 55 return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]]; 56 } GetEmit1(size_t i,size_t emit)57 static inline uint64_t GetEmit1(size_t i, size_t emit) { 58 return table1_emit_[i >> 6][emit]; 59 } GetOp7(size_t i)60 static inline uint64_t GetOp7(size_t i) { return i ? 3 : 1; } GetEmit7(size_t,size_t emit)61 static inline uint64_t GetEmit7(size_t, size_t emit) { 62 return emit ? 43 : 39; 63 } GetOp9(size_t i)64 static inline uint64_t GetOp9(size_t i) { return table9_0_inner_[i]; } GetEmit9(size_t,size_t emit)65 static inline uint64_t GetEmit9(size_t, size_t emit) { 66 return table9_0_emit_[emit]; 67 } GetOp10(size_t i)68 static inline uint64_t GetOp10(size_t i) { 69 return table10_0_inner_[table10_0_outer_[i]]; 70 } GetEmit10(size_t,size_t emit)71 static inline uint64_t GetEmit10(size_t, size_t emit) { 72 return table10_0_emit_[emit]; 73 } GetOp11(size_t i)74 static inline uint64_t GetOp11(size_t i) { return table11_0_ops_[i]; } GetEmit11(size_t,size_t emit)75 static inline uint64_t GetEmit11(size_t, size_t emit) { 76 return table11_0_emit_[emit]; 77 } GetOp8(size_t i)78 static inline uint64_t GetOp8(size_t i) { 79 return table8_ops_[i >> 5][i & 0x1f]; 80 } GetEmit8(size_t i,size_t emit)81 static inline uint64_t GetEmit8(size_t i, size_t emit) { 82 return table8_emit_[i >> 5][emit]; 83 } GetOp13(size_t i)84 static inline uint64_t GetOp13(size_t i) { 85 return ((i < 3 ? (i) : (((void)(i - 3), 3))) < 2 86 ? ((i < 3 ? (i) : (((void)(i - 3), 3))) ? 2 : 0) 87 : (((i < 3 ? (i) : (((void)(i - 3), 3))) - 2) ? 1 : 4)); 88 } GetEmit13(size_t,size_t emit)89 static inline uint64_t GetEmit13(size_t, size_t emit) { 90 return (emit < 1 ? (((void)emit, 92)) : ((emit - 1) ? 208 : 195)); 91 } GetOp14(size_t i)92 static inline uint64_t GetOp14(size_t i) { 93 return table14_0_inner_[table14_0_outer_[i]]; 94 } GetEmit14(size_t,size_t emit)95 static inline uint64_t GetEmit14(size_t, size_t emit) { 96 return table14_0_emit_[emit]; 97 } GetOp12(size_t i)98 static inline uint64_t GetOp12(size_t i) { return table12_0_ops_[i]; } GetEmit12(size_t,size_t emit)99 static inline uint64_t GetEmit12(size_t, size_t emit) { 100 return table12_0_emit_[emit]; 101 } GetOp16(size_t i)102 static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; } GetEmit16(size_t,size_t emit)103 static inline uint64_t GetEmit16(size_t, size_t emit) { 104 return table16_0_emit_[emit]; 105 } GetOp17(size_t i)106 static inline uint64_t GetOp17(size_t i) { return table17_0_ops_[i]; } GetEmit17(size_t,size_t emit)107 static inline uint64_t GetEmit17(size_t, size_t emit) { 108 return table17_0_emit_[emit]; 109 } GetOp18(size_t i)110 static inline uint64_t GetOp18(size_t i) { return table18_0_ops_[i]; } GetEmit18(size_t,size_t emit)111 static inline uint64_t GetEmit18(size_t, size_t emit) { 112 return table18_0_emit_[emit]; 113 } GetOp19(size_t i)114 static inline uint64_t GetOp19(size_t i) { 115 return table19_ops_[i >> 7][i & 0x7f]; 116 } GetEmit19(size_t i,size_t emit)117 static inline uint64_t GetEmit19(size_t i, size_t emit) { 118 return table19_emit_[i >> 7][emit]; 119 } GetOp20(size_t i)120 static inline uint64_t GetOp20(size_t i) { 121 return table20_ops_[i >> 8][i & 0xff]; 122 } GetEmit20(size_t i,size_t emit)123 static inline uint64_t GetEmit20(size_t i, size_t emit) { 124 return table20_emit_[i >> 8][emit]; 125 } GetOp21(size_t i)126 static inline uint64_t GetOp21(size_t i) { 127 return table21_ops_[i >> 6][i & 0x3f]; 128 } GetEmit21(size_t i,size_t emit)129 static inline uint64_t GetEmit21(size_t i, size_t emit) { 130 return table21_emit_[i >> 6][emit]; 131 } GetOp22(size_t i)132 static inline uint64_t GetOp22(size_t i) { 133 return table22_ops_[i >> 6][i & 0x3f]; 134 } GetEmit22(size_t i,size_t emit)135 static inline uint64_t GetEmit22(size_t i, size_t emit) { 136 return table22_emit_[i >> 6][emit]; 137 } GetOp23(size_t i)138 static inline uint64_t GetOp23(size_t i) { 139 return table23_ops_[i >> 7][i & 0x7f]; 140 } GetEmit23(size_t i,size_t emit)141 static inline uint64_t GetEmit23(size_t i, size_t emit) { 142 return table23_emit_[i >> 7][emit]; 143 } GetOp24(size_t i)144 static inline uint64_t GetOp24(size_t i) { 145 return table24_ops_[i >> 7][i & 0x7f]; 146 } GetEmit24(size_t i,size_t emit)147 static inline uint64_t GetEmit24(size_t i, size_t emit) { 148 return table24_emit_[i >> 7][emit]; 149 } GetOp15(size_t i)150 static inline uint64_t GetOp15(size_t i) { 151 return table15_ops_[i >> 8][i & 0xff]; 152 } GetEmit15(size_t i,size_t emit)153 static inline uint64_t GetEmit15(size_t i, size_t emit) { 154 return table15_emit_[i >> 8][emit]; 155 } GetOp26(size_t i)156 static inline uint64_t GetOp26(size_t i) { return i; } GetEmit26(size_t,size_t emit)157 static inline uint64_t GetEmit26(size_t, size_t emit) { 158 return ((void)emit, 124); 159 } GetOp25(size_t i)160 static inline uint64_t GetOp25(size_t i) { 161 return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1 162 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1)) 163 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6)); 164 } GetEmit25(size_t,size_t emit)165 static inline uint64_t GetEmit25(size_t, size_t emit) { 166 return (emit < 1 ? (((void)emit, 124)) : ((emit - 1) ? 62 : 35)); 167 } 168 169 private: 170 static const uint8_t table2_0_emit_[10]; 171 static const uint8_t table2_0_ops_[32]; 172 static const uint8_t table3_0_emit_[36]; 173 static const uint8_t table3_0_ops_[64]; 174 static const uint8_t table4_0_emit_[22]; 175 static const uint8_t table4_0_ops_[64]; 176 static const uint8_t table4_1_emit_[46]; 177 static const uint8_t table4_1_ops_[64]; 178 static const uint8_t* const table4_emit_[2]; 179 static const uint8_t* const table4_ops_[2]; 180 static const uint8_t table5_0_ops_[128]; 181 static const uint8_t table5_1_emit_[52]; 182 static const uint8_t table5_1_ops_[128]; 183 static const uint8_t* const table5_emit_[2]; 184 static const uint8_t* const table5_ops_[2]; 185 static const uint8_t table6_0_emit_[2]; 186 static const uint8_t table6_0_ops_[32]; 187 static const uint8_t table6_1_emit_[2]; 188 static const uint8_t table6_2_emit_[2]; 189 static const uint8_t table6_3_emit_[2]; 190 static const uint8_t table6_4_emit_[2]; 191 static const uint8_t table6_5_emit_[4]; 192 static const uint8_t table6_5_ops_[32]; 193 static const uint8_t table6_6_emit_[4]; 194 static const uint8_t table6_7_emit_[4]; 195 static const uint8_t table6_8_emit_[4]; 196 static const uint8_t table6_9_emit_[4]; 197 static const uint8_t table6_10_emit_[4]; 198 static const uint8_t table6_11_emit_[6]; 199 static const uint8_t table6_11_ops_[32]; 200 static const uint8_t table6_12_emit_[8]; 201 static const uint8_t table6_12_ops_[32]; 202 static const uint8_t table6_13_emit_[8]; 203 static const uint8_t table6_14_emit_[8]; 204 static const uint8_t table6_15_emit_[10]; 205 static const uint8_t table6_15_ops_[32]; 206 static const uint8_t* const table6_emit_[16]; 207 static const uint8_t* const table6_ops_[16]; 208 static const uint8_t table1_0_emit_[36]; 209 static const uint16_t table1_0_inner_[22]; 210 static const uint8_t table1_0_outer_[64]; 211 static const uint8_t table1_1_emit_[36]; 212 static const uint16_t table1_1_inner_[22]; 213 static const uint8_t table1_2_emit_[36]; 214 static const uint16_t table1_2_inner_[22]; 215 static const uint8_t table1_3_emit_[36]; 216 static const uint16_t table1_3_inner_[22]; 217 static const uint8_t table1_4_emit_[38]; 218 static const uint16_t table1_4_inner_[22]; 219 static const uint16_t table1_5_inner_[4]; 220 static const uint8_t table1_5_outer_[64]; 221 static const uint16_t table1_11_inner_[6]; 222 static const uint8_t table1_11_outer_[64]; 223 static const uint16_t table1_12_inner_[8]; 224 static const uint8_t table1_12_outer_[64]; 225 static const uint8_t table1_15_emit_[15]; 226 static const uint16_t table1_15_inner_[18]; 227 static const uint8_t table1_15_outer_[64]; 228 static const uint8_t* const table1_emit_[16]; 229 static const uint16_t* const table1_inner_[16]; 230 static const uint8_t* const table1_outer_[16]; 231 static const uint8_t table9_0_emit_[6]; 232 static const uint8_t table9_0_inner_[8]; 233 static const uint8_t table10_0_emit_[8]; 234 static const uint8_t table10_0_inner_[10]; 235 static const uint8_t table10_0_outer_[16]; 236 static const uint8_t table11_0_emit_[11]; 237 static const uint8_t table11_0_ops_[32]; 238 static const uint8_t table8_0_emit_[4]; 239 static const uint8_t table8_0_ops_[32]; 240 static const uint8_t table8_1_emit_[7]; 241 static const uint8_t table8_1_ops_[32]; 242 static const uint8_t* const table8_emit_[2]; 243 static const uint8_t* const table8_ops_[2]; 244 static const uint8_t table14_0_emit_[11]; 245 static const uint8_t table14_0_inner_[12]; 246 static const uint8_t table14_0_outer_[16]; 247 static const uint8_t table12_0_emit_[15]; 248 static const uint8_t table12_0_ops_[32]; 249 static const uint8_t table16_0_emit_[9]; 250 static const uint8_t table16_0_ops_[32]; 251 static const uint8_t table17_0_emit_[35]; 252 static const uint8_t table17_0_ops_[64]; 253 static const uint8_t table18_0_emit_[64]; 254 static const uint8_t table18_0_ops_[128]; 255 static const uint8_t table19_0_emit_[23]; 256 static const uint8_t table19_0_ops_[128]; 257 static const uint8_t table19_1_emit_[53]; 258 static const uint8_t table19_1_ops_[128]; 259 static const uint8_t* const table19_emit_[2]; 260 static const uint8_t* const table19_ops_[2]; 261 static const uint8_t table20_0_ops_[256]; 262 static const uint8_t table20_1_emit_[57]; 263 static const uint8_t table20_1_ops_[256]; 264 static const uint8_t* const table20_emit_[2]; 265 static const uint8_t* const table20_ops_[2]; 266 static const uint8_t table21_0_emit_[40]; 267 static const uint8_t table21_0_ops_[64]; 268 static const uint8_t table21_1_emit_[40]; 269 static const uint8_t table21_2_emit_[40]; 270 static const uint8_t table21_3_emit_[40]; 271 static const uint8_t table21_4_emit_[22]; 272 static const uint8_t table21_4_ops_[64]; 273 static const uint8_t table21_5_emit_[4]; 274 static const uint8_t table21_5_ops_[64]; 275 static const uint8_t table21_6_emit_[4]; 276 static const uint8_t table21_7_emit_[4]; 277 static const uint8_t table21_8_emit_[4]; 278 static const uint8_t table21_9_emit_[4]; 279 static const uint8_t table21_10_emit_[4]; 280 static const uint8_t table21_11_emit_[8]; 281 static const uint8_t table21_11_ops_[64]; 282 static const uint8_t table21_12_emit_[8]; 283 static const uint8_t table21_13_emit_[8]; 284 static const uint8_t table21_14_emit_[11]; 285 static const uint8_t table21_14_ops_[64]; 286 static const uint8_t table21_15_emit_[25]; 287 static const uint8_t table21_15_ops_[64]; 288 static const uint8_t* const table21_emit_[16]; 289 static const uint8_t* const table21_ops_[16]; 290 static const uint8_t table22_0_emit_[72]; 291 static const uint16_t table22_0_ops_[64]; 292 static const uint8_t table22_1_emit_[72]; 293 static const uint8_t table22_2_emit_[72]; 294 static const uint8_t table22_3_emit_[72]; 295 static const uint8_t table22_4_emit_[72]; 296 static const uint8_t table22_5_emit_[72]; 297 static const uint8_t table22_6_emit_[72]; 298 static const uint8_t table22_7_emit_[72]; 299 static const uint8_t table22_8_emit_[72]; 300 static const uint8_t table22_9_emit_[40]; 301 static const uint16_t table22_9_ops_[64]; 302 static const uint8_t table22_10_emit_[40]; 303 static const uint8_t table22_11_emit_[40]; 304 static const uint8_t table22_12_emit_[40]; 305 static const uint8_t table22_13_emit_[40]; 306 static const uint8_t table22_14_emit_[40]; 307 static const uint8_t table22_15_emit_[40]; 308 static const uint8_t table22_16_emit_[40]; 309 static const uint8_t table22_17_emit_[40]; 310 static const uint8_t table22_18_emit_[40]; 311 static const uint8_t table22_19_emit_[40]; 312 static const uint8_t table22_20_emit_[40]; 313 static const uint8_t table22_21_emit_[40]; 314 static const uint8_t table22_22_emit_[4]; 315 static const uint16_t table22_22_ops_[64]; 316 static const uint8_t table22_23_emit_[4]; 317 static const uint8_t table22_24_emit_[4]; 318 static const uint8_t table22_25_emit_[4]; 319 static const uint8_t table22_26_emit_[4]; 320 static const uint8_t table22_27_emit_[4]; 321 static const uint8_t table22_28_emit_[4]; 322 static const uint8_t table22_29_emit_[7]; 323 static const uint16_t table22_29_ops_[64]; 324 static const uint8_t table22_30_emit_[10]; 325 static const uint16_t table22_30_ops_[64]; 326 static const uint8_t table22_31_emit_[34]; 327 static const uint16_t table22_31_ops_[64]; 328 static const uint8_t* const table22_emit_[32]; 329 static const uint16_t* const table22_ops_[32]; 330 static const uint8_t table23_0_emit_[136]; 331 static const uint16_t table23_0_ops_[128]; 332 static const uint8_t table23_1_emit_[136]; 333 static const uint8_t table23_2_emit_[136]; 334 static const uint8_t table23_3_emit_[136]; 335 static const uint8_t table23_4_emit_[136]; 336 static const uint8_t table23_5_emit_[136]; 337 static const uint8_t table23_6_emit_[136]; 338 static const uint8_t table23_7_emit_[136]; 339 static const uint8_t table23_8_emit_[136]; 340 static const uint8_t table23_9_emit_[144]; 341 static const uint16_t table23_9_ops_[128]; 342 static const uint8_t table23_10_emit_[144]; 343 static const uint8_t table23_11_emit_[144]; 344 static const uint8_t table23_12_emit_[144]; 345 static const uint8_t table23_13_emit_[144]; 346 static const uint8_t table23_14_emit_[144]; 347 static const uint8_t table23_15_emit_[144]; 348 static const uint8_t table23_16_emit_[144]; 349 static const uint8_t table23_17_emit_[144]; 350 static const uint8_t table23_18_emit_[144]; 351 static const uint8_t table23_19_emit_[144]; 352 static const uint8_t table23_20_emit_[144]; 353 static const uint8_t table23_21_emit_[144]; 354 static const uint8_t table23_22_emit_[80]; 355 static const uint16_t table23_22_ops_[128]; 356 static const uint8_t table23_23_emit_[80]; 357 static const uint8_t table23_24_emit_[80]; 358 static const uint8_t table23_25_emit_[80]; 359 static const uint8_t table23_26_emit_[80]; 360 static const uint8_t table23_27_emit_[80]; 361 static const uint8_t table23_28_emit_[80]; 362 static const uint8_t table23_29_emit_[26]; 363 static const uint16_t table23_29_ops_[128]; 364 static const uint16_t table23_30_ops_[128]; 365 static const uint8_t table23_31_emit_[63]; 366 static const uint16_t table23_31_ops_[128]; 367 static const uint8_t* const table23_emit_[32]; 368 static const uint16_t* const table23_ops_[32]; 369 static const uint8_t table24_0_emit_[44]; 370 static const uint16_t table24_0_ops_[128]; 371 static const uint8_t table24_1_emit_[104]; 372 static const uint16_t table24_1_ops_[128]; 373 static const uint8_t table24_2_emit_[44]; 374 static const uint8_t table24_3_emit_[104]; 375 static const uint8_t table24_4_emit_[44]; 376 static const uint8_t table24_5_emit_[104]; 377 static const uint8_t table24_6_emit_[44]; 378 static const uint8_t table24_7_emit_[104]; 379 static const uint8_t table24_8_emit_[44]; 380 static const uint8_t table24_9_emit_[104]; 381 static const uint8_t table24_10_emit_[44]; 382 static const uint8_t table24_11_emit_[104]; 383 static const uint8_t table24_12_emit_[44]; 384 static const uint8_t table24_13_emit_[104]; 385 static const uint8_t table24_14_emit_[44]; 386 static const uint8_t table24_15_emit_[104]; 387 static const uint8_t table24_16_emit_[44]; 388 static const uint8_t table24_17_emit_[104]; 389 static const uint8_t table24_18_emit_[136]; 390 static const uint8_t table24_19_emit_[136]; 391 static const uint8_t table24_20_emit_[136]; 392 static const uint8_t table24_21_emit_[136]; 393 static const uint8_t table24_22_emit_[136]; 394 static const uint8_t table24_23_emit_[136]; 395 static const uint8_t table24_24_emit_[136]; 396 static const uint8_t table24_25_emit_[136]; 397 static const uint8_t table24_26_emit_[136]; 398 static const uint8_t table24_27_emit_[136]; 399 static const uint8_t table24_28_emit_[136]; 400 static const uint8_t table24_29_emit_[136]; 401 static const uint8_t table24_30_emit_[136]; 402 static const uint8_t table24_31_emit_[136]; 403 static const uint8_t table24_32_emit_[136]; 404 static const uint8_t table24_33_emit_[136]; 405 static const uint8_t table24_34_emit_[136]; 406 static const uint8_t table24_35_emit_[136]; 407 static const uint8_t table24_36_emit_[136]; 408 static const uint8_t table24_37_emit_[136]; 409 static const uint8_t table24_38_emit_[136]; 410 static const uint8_t table24_39_emit_[136]; 411 static const uint8_t table24_40_emit_[136]; 412 static const uint8_t table24_41_emit_[136]; 413 static const uint8_t table24_42_emit_[136]; 414 static const uint8_t table24_43_emit_[136]; 415 static const uint8_t table24_44_emit_[144]; 416 static const uint8_t table24_45_emit_[144]; 417 static const uint8_t table24_46_emit_[144]; 418 static const uint8_t table24_47_emit_[144]; 419 static const uint8_t table24_48_emit_[144]; 420 static const uint8_t table24_49_emit_[144]; 421 static const uint8_t table24_50_emit_[144]; 422 static const uint8_t table24_51_emit_[144]; 423 static const uint8_t table24_52_emit_[144]; 424 static const uint8_t table24_53_emit_[144]; 425 static const uint8_t table24_54_emit_[144]; 426 static const uint8_t table24_55_emit_[144]; 427 static const uint8_t table24_56_emit_[144]; 428 static const uint8_t table24_57_emit_[144]; 429 static const uint8_t table24_58_emit_[112]; 430 static const uint16_t table24_58_ops_[128]; 431 static const uint8_t table24_59_emit_[80]; 432 static const uint8_t table24_60_emit_[80]; 433 static const uint8_t table24_61_emit_[44]; 434 static const uint16_t table24_61_ops_[128]; 435 static const uint8_t table24_62_emit_[17]; 436 static const uint16_t table24_62_ops_[128]; 437 static const uint8_t table24_63_emit_[46]; 438 static const uint16_t table24_63_ops_[128]; 439 static const uint8_t* const table24_emit_[64]; 440 static const uint16_t* const table24_ops_[64]; 441 static const uint8_t table15_0_emit_[1]; 442 static const uint16_t table15_0_ops_[256]; 443 static const uint8_t table15_2_emit_[1]; 444 static const uint8_t table15_4_emit_[1]; 445 static const uint8_t table15_6_emit_[1]; 446 static const uint8_t table15_8_emit_[1]; 447 static const uint8_t table15_10_emit_[1]; 448 static const uint8_t table15_12_emit_[1]; 449 static const uint8_t table15_14_emit_[1]; 450 static const uint8_t table15_16_emit_[1]; 451 static const uint8_t table15_18_emit_[1]; 452 static const uint16_t table15_18_ops_[256]; 453 static const uint8_t table15_19_emit_[1]; 454 static const uint8_t table15_20_emit_[1]; 455 static const uint8_t table15_21_emit_[1]; 456 static const uint8_t table15_22_emit_[1]; 457 static const uint8_t table15_23_emit_[1]; 458 static const uint8_t table15_24_emit_[1]; 459 static const uint8_t table15_25_emit_[1]; 460 static const uint8_t table15_26_emit_[1]; 461 static const uint8_t table15_27_emit_[1]; 462 static const uint8_t table15_28_emit_[1]; 463 static const uint8_t table15_29_emit_[1]; 464 static const uint8_t table15_30_emit_[1]; 465 static const uint8_t table15_31_emit_[1]; 466 static const uint8_t table15_32_emit_[1]; 467 static const uint8_t table15_33_emit_[1]; 468 static const uint8_t table15_34_emit_[1]; 469 static const uint8_t table15_35_emit_[1]; 470 static const uint8_t table15_36_emit_[1]; 471 static const uint8_t table15_37_emit_[1]; 472 static const uint8_t table15_38_emit_[1]; 473 static const uint8_t table15_39_emit_[1]; 474 static const uint8_t table15_40_emit_[1]; 475 static const uint8_t table15_41_emit_[1]; 476 static const uint8_t table15_42_emit_[1]; 477 static const uint8_t table15_43_emit_[1]; 478 static const uint8_t table15_44_emit_[2]; 479 static const uint16_t table15_44_ops_[256]; 480 static const uint8_t table15_45_emit_[2]; 481 static const uint8_t table15_46_emit_[2]; 482 static const uint8_t table15_47_emit_[2]; 483 static const uint8_t table15_48_emit_[2]; 484 static const uint8_t table15_49_emit_[2]; 485 static const uint8_t table15_50_emit_[2]; 486 static const uint8_t table15_51_emit_[2]; 487 static const uint8_t table15_52_emit_[2]; 488 static const uint8_t table15_53_emit_[2]; 489 static const uint8_t table15_54_emit_[2]; 490 static const uint8_t table15_55_emit_[2]; 491 static const uint8_t table15_56_emit_[2]; 492 static const uint8_t table15_57_emit_[2]; 493 static const uint8_t table15_58_emit_[3]; 494 static const uint16_t table15_58_ops_[256]; 495 static const uint8_t table15_59_emit_[4]; 496 static const uint16_t table15_59_ops_[256]; 497 static const uint8_t table15_60_emit_[4]; 498 static const uint8_t table15_61_emit_[6]; 499 static const uint16_t table15_61_ops_[256]; 500 static const uint16_t table15_62_ops_[256]; 501 static const uint8_t table15_63_emit_[49]; 502 static const uint16_t table15_63_ops_[256]; 503 static const uint8_t* const table15_emit_[64]; 504 static const uint16_t* const table15_ops_[64]; 505 }; 506 template <typename F> 507 class HuffDecoder : public HuffDecoderCommon { 508 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)509 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 510 : sink_(sink), begin_(begin), end_(end) {} Run()511 bool Run() { 512 while (!done_) { 513 if (!RefillTo10()) { 514 Done0(); 515 break; 516 } 517 const auto index = (buffer_ >> (buffer_len_ - 10)) & 0x3ff; 518 const auto op = GetOp1(index); 519 const int consumed = op & 15; 520 buffer_len_ -= consumed; 521 const auto emit_ofs = op >> 7; 522 switch ((op >> 4) & 7) { 523 case 0: { 524 sink_(GetEmit1(index, emit_ofs + 0)); 525 sink_(GetEmit1(index, emit_ofs + 1)); 526 break; 527 } 528 case 1: { 529 sink_(GetEmit1(index, emit_ofs + 0)); 530 break; 531 } 532 case 2: { 533 DecodeStep0(); 534 break; 535 } 536 case 3: { 537 DecodeStep4(); 538 break; 539 } 540 case 4: { 541 DecodeStep1(); 542 break; 543 } 544 } 545 } 546 return ok_; 547 } 548 549 private: RefillTo10()550 bool RefillTo10() { 551 switch (buffer_len_) { 552 case 0: { 553 return Read2to8Bytes(); 554 } 555 case 1: { 556 return Read2to7Bytes(); 557 } 558 case 2: 559 case 3: 560 case 4: 561 case 5: 562 case 6: 563 case 7: 564 case 8: { 565 return Read1to7Bytes(); 566 } 567 case 9: { 568 return Read1to6Bytes(); 569 } 570 } 571 return true; 572 } Read2to8Bytes()573 bool Read2to8Bytes() { 574 switch (end_ - begin_) { 575 case 0: 576 case 1: { 577 return false; 578 } 579 case 2: { 580 Fill2(); 581 return true; 582 } 583 case 3: { 584 Fill3(); 585 return true; 586 } 587 case 4: { 588 Fill4(); 589 return true; 590 } 591 case 5: { 592 Fill5(); 593 return true; 594 } 595 case 6: { 596 Fill6(); 597 return true; 598 } 599 case 7: { 600 Fill7(); 601 return true; 602 } 603 default: { 604 Fill8(); 605 return true; 606 } 607 } 608 } Fill2()609 void Fill2() { 610 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 611 (static_cast<uint64_t>(begin_[1]) << 0); 612 begin_ += 2; 613 buffer_len_ += 16; 614 } Fill3()615 void Fill3() { 616 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 617 (static_cast<uint64_t>(begin_[1]) << 8) | 618 (static_cast<uint64_t>(begin_[2]) << 0); 619 begin_ += 3; 620 buffer_len_ += 24; 621 } Fill4()622 void Fill4() { 623 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 624 (static_cast<uint64_t>(begin_[1]) << 16) | 625 (static_cast<uint64_t>(begin_[2]) << 8) | 626 (static_cast<uint64_t>(begin_[3]) << 0); 627 begin_ += 4; 628 buffer_len_ += 32; 629 } Fill5()630 void Fill5() { 631 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 632 (static_cast<uint64_t>(begin_[1]) << 24) | 633 (static_cast<uint64_t>(begin_[2]) << 16) | 634 (static_cast<uint64_t>(begin_[3]) << 8) | 635 (static_cast<uint64_t>(begin_[4]) << 0); 636 begin_ += 5; 637 buffer_len_ += 40; 638 } Fill6()639 void Fill6() { 640 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 641 (static_cast<uint64_t>(begin_[1]) << 32) | 642 (static_cast<uint64_t>(begin_[2]) << 24) | 643 (static_cast<uint64_t>(begin_[3]) << 16) | 644 (static_cast<uint64_t>(begin_[4]) << 8) | 645 (static_cast<uint64_t>(begin_[5]) << 0); 646 begin_ += 6; 647 buffer_len_ += 48; 648 } Fill7()649 void Fill7() { 650 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 651 (static_cast<uint64_t>(begin_[1]) << 40) | 652 (static_cast<uint64_t>(begin_[2]) << 32) | 653 (static_cast<uint64_t>(begin_[3]) << 24) | 654 (static_cast<uint64_t>(begin_[4]) << 16) | 655 (static_cast<uint64_t>(begin_[5]) << 8) | 656 (static_cast<uint64_t>(begin_[6]) << 0); 657 begin_ += 7; 658 buffer_len_ += 56; 659 } Fill8()660 void Fill8() { 661 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 662 (static_cast<uint64_t>(begin_[1]) << 48) | 663 (static_cast<uint64_t>(begin_[2]) << 40) | 664 (static_cast<uint64_t>(begin_[3]) << 32) | 665 (static_cast<uint64_t>(begin_[4]) << 24) | 666 (static_cast<uint64_t>(begin_[5]) << 16) | 667 (static_cast<uint64_t>(begin_[6]) << 8) | 668 (static_cast<uint64_t>(begin_[7]) << 0); 669 begin_ += 8; 670 buffer_len_ += 64; 671 } Read2to7Bytes()672 bool Read2to7Bytes() { 673 switch (end_ - begin_) { 674 case 0: 675 case 1: { 676 return false; 677 } 678 case 2: { 679 Fill2(); 680 return true; 681 } 682 case 3: { 683 Fill3(); 684 return true; 685 } 686 case 4: { 687 Fill4(); 688 return true; 689 } 690 case 5: { 691 Fill5(); 692 return true; 693 } 694 case 6: { 695 Fill6(); 696 return true; 697 } 698 default: { 699 Fill7(); 700 return true; 701 } 702 } 703 } Read1to7Bytes()704 bool Read1to7Bytes() { 705 switch (end_ - begin_) { 706 case 0: { 707 return false; 708 } 709 case 1: { 710 Fill1(); 711 return true; 712 } 713 case 2: { 714 Fill2(); 715 return true; 716 } 717 case 3: { 718 Fill3(); 719 return true; 720 } 721 case 4: { 722 Fill4(); 723 return true; 724 } 725 case 5: { 726 Fill5(); 727 return true; 728 } 729 case 6: { 730 Fill6(); 731 return true; 732 } 733 default: { 734 Fill7(); 735 return true; 736 } 737 } 738 } Fill1()739 void Fill1() { 740 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 741 begin_ += 1; 742 buffer_len_ += 8; 743 } Read1to6Bytes()744 bool Read1to6Bytes() { 745 switch (end_ - begin_) { 746 case 0: { 747 return false; 748 } 749 case 1: { 750 Fill1(); 751 return true; 752 } 753 case 2: { 754 Fill2(); 755 return true; 756 } 757 case 3: { 758 Fill3(); 759 return true; 760 } 761 case 4: { 762 Fill4(); 763 return true; 764 } 765 case 5: { 766 Fill5(); 767 return true; 768 } 769 default: { 770 Fill6(); 771 return true; 772 } 773 } 774 } Done0()775 void Done0() { 776 done_ = true; 777 switch (end_ - begin_) { 778 case 1: { 779 Fill1(); 780 break; 781 } 782 } 783 switch (buffer_len_) { 784 case 1: 785 case 2: 786 case 3: 787 case 4: { 788 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 789 return; 790 } 791 case 5: { 792 const auto index = buffer_ & 31; 793 const auto op = GetOp2(index); 794 switch (op & 3) { 795 case 0: { 796 sink_(GetEmit2(index, (op >> 2) + 0)); 797 break; 798 } 799 case 1: { 800 ok_ = false; 801 break; 802 } 803 } 804 return; 805 } 806 case 6: { 807 const auto index = buffer_ & 63; 808 const auto op = GetOp3(index); 809 switch (op & 3) { 810 case 0: { 811 ok_ = false; 812 break; 813 } 814 case 1: { 815 sink_(GetEmit3(index, (op >> 2) + 0)); 816 break; 817 } 818 } 819 return; 820 } 821 case 7: { 822 const auto index = buffer_ & 127; 823 const auto op = GetOp4(index); 824 switch (op & 3) { 825 case 0: { 826 ok_ = false; 827 break; 828 } 829 case 1: { 830 sink_(GetEmit4(index, (op >> 2) + 0)); 831 break; 832 } 833 } 834 return; 835 } 836 case 8: { 837 const auto index = buffer_ & 255; 838 const auto op = GetOp5(index); 839 switch (op & 3) { 840 case 0: { 841 ok_ = false; 842 break; 843 } 844 case 1: { 845 sink_(GetEmit5(index, (op >> 2) + 0)); 846 break; 847 } 848 } 849 return; 850 } 851 case 9: { 852 const auto index = buffer_ & 511; 853 const auto op = GetOp6(index); 854 switch (op & 3) { 855 case 0: { 856 ok_ = false; 857 break; 858 } 859 case 1: { 860 sink_(GetEmit6(index, (op >> 2) + 0)); 861 break; 862 } 863 } 864 return; 865 } 866 case 0: { 867 return; 868 } 869 } 870 } DecodeStep0()871 void DecodeStep0() { 872 if (!RefillTo1()) { 873 Done1(); 874 return; 875 } 876 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 877 const auto op = GetOp7(index); 878 const int consumed = op & 1; 879 buffer_len_ -= consumed; 880 const auto emit_ofs = op >> 1; 881 sink_(GetEmit7(index, emit_ofs + 0)); 882 } RefillTo1()883 bool RefillTo1() { 884 switch (buffer_len_) { 885 case 0: { 886 return Read1to8Bytes(); 887 } 888 } 889 return true; 890 } Read1to8Bytes()891 bool Read1to8Bytes() { 892 switch (end_ - begin_) { 893 case 0: { 894 return false; 895 } 896 case 1: { 897 Fill1(); 898 return true; 899 } 900 case 2: { 901 Fill2(); 902 return true; 903 } 904 case 3: { 905 Fill3(); 906 return true; 907 } 908 case 4: { 909 Fill4(); 910 return true; 911 } 912 case 5: { 913 Fill5(); 914 return true; 915 } 916 case 6: { 917 Fill6(); 918 return true; 919 } 920 case 7: { 921 Fill7(); 922 return true; 923 } 924 default: { 925 Fill8(); 926 return true; 927 } 928 } 929 } Done1()930 void Done1() { 931 done_ = true; 932 ok_ = false; 933 } DecodeStep1()934 void DecodeStep1() { 935 if (!RefillTo6()) { 936 Done2(); 937 return; 938 } 939 const auto index = (buffer_ >> (buffer_len_ - 6)) & 0x3f; 940 const auto op = GetOp8(index); 941 const int consumed = op & 7; 942 buffer_len_ -= consumed; 943 const auto emit_ofs = op >> 5; 944 switch ((op >> 3) & 3) { 945 case 0: { 946 sink_(GetEmit8(index, emit_ofs + 0)); 947 break; 948 } 949 case 1: { 950 DecodeStep2(); 951 break; 952 } 953 case 2: { 954 DecodeStep3(); 955 break; 956 } 957 } 958 } RefillTo6()959 bool RefillTo6() { 960 switch (buffer_len_) { 961 case 0: { 962 return Read1to8Bytes(); 963 } 964 case 1: 965 case 2: 966 case 3: 967 case 4: 968 case 5: { 969 return Read1to7Bytes(); 970 } 971 } 972 return true; 973 } Done2()974 void Done2() { 975 done_ = true; 976 switch (buffer_len_) { 977 case 1: 978 case 2: { 979 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 980 return; 981 } 982 case 3: { 983 const auto index = buffer_ & 7; 984 const auto op = GetOp9(index); 985 switch (op & 3) { 986 case 0: { 987 sink_(GetEmit9(index, (op >> 2) + 0)); 988 break; 989 } 990 case 1: { 991 ok_ = false; 992 break; 993 } 994 } 995 return; 996 } 997 case 4: { 998 const auto index = buffer_ & 15; 999 const auto op = GetOp10(index); 1000 switch (op & 3) { 1001 case 0: { 1002 ok_ = false; 1003 break; 1004 } 1005 case 1: { 1006 sink_(GetEmit10(index, (op >> 2) + 0)); 1007 break; 1008 } 1009 } 1010 return; 1011 } 1012 case 5: { 1013 const auto index = buffer_ & 31; 1014 const auto op = GetOp11(index); 1015 switch (op & 3) { 1016 case 0: { 1017 ok_ = false; 1018 break; 1019 } 1020 case 1: { 1021 sink_(GetEmit11(index, (op >> 2) + 0)); 1022 break; 1023 } 1024 } 1025 return; 1026 } 1027 case 0: { 1028 return; 1029 } 1030 } 1031 } DecodeStep2()1032 void DecodeStep2() { 1033 if (!RefillTo5()) { 1034 Done3(); 1035 return; 1036 } 1037 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 1038 const auto op = GetOp12(index); 1039 const int consumed = op & 7; 1040 buffer_len_ -= consumed; 1041 const auto emit_ofs = op >> 3; 1042 sink_(GetEmit12(index, emit_ofs + 0)); 1043 } RefillTo5()1044 bool RefillTo5() { 1045 switch (buffer_len_) { 1046 case 0: { 1047 return Read1to8Bytes(); 1048 } 1049 case 1: 1050 case 2: 1051 case 3: 1052 case 4: { 1053 return Read1to7Bytes(); 1054 } 1055 } 1056 return true; 1057 } Done3()1058 void Done3() { 1059 done_ = true; 1060 switch (buffer_len_) { 1061 case 1: 1062 case 2: 1063 case 0: { 1064 ok_ = false; 1065 return; 1066 } 1067 case 3: { 1068 const auto index = buffer_ & 7; 1069 const auto op = GetOp13(index); 1070 switch (op & 1) { 1071 case 0: { 1072 sink_(GetEmit13(index, (op >> 1) + 0)); 1073 break; 1074 } 1075 case 1: { 1076 ok_ = false; 1077 break; 1078 } 1079 } 1080 return; 1081 } 1082 case 4: { 1083 const auto index = buffer_ & 15; 1084 const auto op = GetOp14(index); 1085 switch (op & 1) { 1086 case 0: { 1087 ok_ = false; 1088 break; 1089 } 1090 case 1: { 1091 sink_(GetEmit14(index, (op >> 1) + 0)); 1092 break; 1093 } 1094 } 1095 return; 1096 } 1097 } 1098 } DecodeStep3()1099 void DecodeStep3() { 1100 if (!RefillTo14()) { 1101 Done4(); 1102 return; 1103 } 1104 const auto index = (buffer_ >> (buffer_len_ - 14)) & 0x3fff; 1105 const auto op = GetOp15(index); 1106 const int consumed = op & 15; 1107 buffer_len_ -= consumed; 1108 const auto emit_ofs = op >> 5; 1109 switch ((op >> 4) & 1) { 1110 case 0: { 1111 sink_(GetEmit15(index, emit_ofs + 0)); 1112 break; 1113 } 1114 case 1: { 1115 begin_ = end_; 1116 buffer_len_ = 0; 1117 break; 1118 } 1119 } 1120 } RefillTo14()1121 bool RefillTo14() { 1122 switch (buffer_len_) { 1123 case 0: { 1124 return Read2to8Bytes(); 1125 } 1126 case 1: 1127 case 2: 1128 case 3: 1129 case 4: 1130 case 5: { 1131 return Read2to7Bytes(); 1132 } 1133 case 6: 1134 case 7: 1135 case 8: { 1136 return Read1to7Bytes(); 1137 } 1138 case 9: 1139 case 10: 1140 case 11: 1141 case 12: 1142 case 13: { 1143 return Read1to6Bytes(); 1144 } 1145 } 1146 return true; 1147 } Done4()1148 void Done4() { 1149 done_ = true; 1150 switch (end_ - begin_) { 1151 case 1: { 1152 Fill1(); 1153 break; 1154 } 1155 } 1156 switch (buffer_len_) { 1157 case 1: 1158 case 2: 1159 case 3: 1160 case 4: { 1161 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1162 return; 1163 } 1164 case 5: { 1165 const auto index = buffer_ & 31; 1166 const auto op = GetOp16(index); 1167 switch (op & 3) { 1168 case 0: { 1169 sink_(GetEmit16(index, (op >> 2) + 0)); 1170 break; 1171 } 1172 case 1: { 1173 ok_ = false; 1174 break; 1175 } 1176 } 1177 return; 1178 } 1179 case 6: { 1180 const auto index = buffer_ & 63; 1181 const auto op = GetOp17(index); 1182 switch (op & 3) { 1183 case 0: { 1184 ok_ = false; 1185 break; 1186 } 1187 case 1: { 1188 sink_(GetEmit17(index, (op >> 2) + 0)); 1189 break; 1190 } 1191 } 1192 return; 1193 } 1194 case 7: { 1195 const auto index = buffer_ & 127; 1196 const auto op = GetOp18(index); 1197 switch (op & 3) { 1198 case 0: { 1199 ok_ = false; 1200 break; 1201 } 1202 case 1: { 1203 sink_(GetEmit18(index, (op >> 2) + 0)); 1204 break; 1205 } 1206 } 1207 return; 1208 } 1209 case 8: { 1210 const auto index = buffer_ & 255; 1211 const auto op = GetOp19(index); 1212 switch (op & 3) { 1213 case 0: { 1214 ok_ = false; 1215 break; 1216 } 1217 case 1: { 1218 sink_(GetEmit19(index, (op >> 2) + 0)); 1219 break; 1220 } 1221 } 1222 return; 1223 } 1224 case 9: { 1225 const auto index = buffer_ & 511; 1226 const auto op = GetOp20(index); 1227 switch (op & 3) { 1228 case 0: { 1229 ok_ = false; 1230 break; 1231 } 1232 case 1: { 1233 sink_(GetEmit20(index, (op >> 2) + 0)); 1234 break; 1235 } 1236 } 1237 return; 1238 } 1239 case 10: { 1240 const auto index = buffer_ & 1023; 1241 const auto op = GetOp21(index); 1242 switch (op & 3) { 1243 case 0: { 1244 sink_(GetEmit21(index, (op >> 2) + 0)); 1245 sink_(GetEmit21(index, (op >> 2) + 1)); 1246 break; 1247 } 1248 case 1: { 1249 ok_ = false; 1250 break; 1251 } 1252 case 2: { 1253 sink_(GetEmit21(index, (op >> 2) + 0)); 1254 break; 1255 } 1256 } 1257 return; 1258 } 1259 case 11: { 1260 const auto index = buffer_ & 2047; 1261 const auto op = GetOp22(index); 1262 switch (op & 3) { 1263 case 0: { 1264 ok_ = false; 1265 break; 1266 } 1267 case 1: { 1268 sink_(GetEmit22(index, (op >> 2) + 0)); 1269 sink_(GetEmit22(index, (op >> 2) + 1)); 1270 break; 1271 } 1272 case 2: { 1273 sink_(GetEmit22(index, (op >> 2) + 0)); 1274 break; 1275 } 1276 } 1277 return; 1278 } 1279 case 12: { 1280 const auto index = buffer_ & 4095; 1281 const auto op = GetOp23(index); 1282 switch (op & 3) { 1283 case 0: { 1284 ok_ = false; 1285 break; 1286 } 1287 case 1: { 1288 sink_(GetEmit23(index, (op >> 2) + 0)); 1289 sink_(GetEmit23(index, (op >> 2) + 1)); 1290 break; 1291 } 1292 case 2: { 1293 sink_(GetEmit23(index, (op >> 2) + 0)); 1294 break; 1295 } 1296 } 1297 return; 1298 } 1299 case 13: { 1300 const auto index = buffer_ & 8191; 1301 const auto op = GetOp24(index); 1302 switch (op & 3) { 1303 case 0: { 1304 ok_ = false; 1305 break; 1306 } 1307 case 1: { 1308 sink_(GetEmit24(index, (op >> 2) + 0)); 1309 sink_(GetEmit24(index, (op >> 2) + 1)); 1310 break; 1311 } 1312 case 2: { 1313 sink_(GetEmit24(index, (op >> 2) + 0)); 1314 break; 1315 } 1316 } 1317 return; 1318 } 1319 case 0: { 1320 return; 1321 } 1322 } 1323 } DecodeStep4()1324 void DecodeStep4() { 1325 if (!RefillTo2()) { 1326 Done5(); 1327 return; 1328 } 1329 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1330 const auto op = GetOp25(index); 1331 const int consumed = op & 3; 1332 buffer_len_ -= consumed; 1333 const auto emit_ofs = op >> 2; 1334 sink_(GetEmit25(index, emit_ofs + 0)); 1335 } RefillTo2()1336 bool RefillTo2() { 1337 switch (buffer_len_) { 1338 case 0: { 1339 return Read1to8Bytes(); 1340 } 1341 case 1: { 1342 return Read1to7Bytes(); 1343 } 1344 } 1345 return true; 1346 } Done5()1347 void Done5() { 1348 done_ = true; 1349 switch (buffer_len_) { 1350 case 1: { 1351 const auto index = buffer_ & 1; 1352 const auto op = GetOp26(index); 1353 switch (op & 1) { 1354 case 0: { 1355 sink_(GetEmit26(index, (op >> 1) + 0)); 1356 break; 1357 } 1358 case 1: { 1359 ok_ = false; 1360 break; 1361 } 1362 } 1363 return; 1364 } 1365 case 0: { 1366 ok_ = false; 1367 return; 1368 } 1369 } 1370 } 1371 F sink_; 1372 const uint8_t* begin_; 1373 const uint8_t* const end_; 1374 uint64_t buffer_ = 0; 1375 int buffer_len_ = 0; 1376 bool ok_ = true; 1377 bool done_ = false; 1378 }; 1379 } // namespace geometry_10_6_14 1380 } // namespace grpc_core 1381 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_10_6_14_H 1382