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_11_5_14_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_5_14_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_11_5_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 } 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 } GetOp1(size_t i)60 static inline uint64_t GetOp1(size_t i) { 61 return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]]; 62 } GetEmit1(size_t i,size_t emit)63 static inline uint64_t GetEmit1(size_t i, size_t emit) { 64 return table1_emit_[i >> 6][emit]; 65 } GetOp8(size_t i)66 static inline uint64_t GetOp8(size_t i) { return i ? 3 : 1; } GetEmit8(size_t,size_t emit)67 static inline uint64_t GetEmit8(size_t, size_t emit) { 68 return emit ? 62 : 35; 69 } GetOp9(size_t i)70 static inline uint64_t GetOp9(size_t i) { 71 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 72 } GetEmit9(size_t,size_t emit)73 static inline uint64_t GetEmit9(size_t, size_t emit) { 74 return (emit < 2 ? (emit ? 36 : 0) : ((emit - 2) ? 91 : 64)); 75 } GetOp11(size_t i)76 static inline uint64_t GetOp11(size_t i) { 77 return (i < 2 ? (i ? 4 : 0) : ((i - 2) + 1)); 78 } GetEmit11(size_t,size_t emit)79 static inline uint64_t GetEmit11(size_t, size_t emit) { 80 return emit ? 126 : 93; 81 } GetOp12(size_t i)82 static inline uint64_t GetOp12(size_t i) { 83 return table12_0_inner_[table12_0_outer_[i]]; 84 } GetEmit12(size_t,size_t emit)85 static inline uint64_t GetEmit12(size_t, size_t emit) { 86 return (emit < 2 ? (emit ? 126 : 93) : ((emit - 2) ? 125 : 94)); 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 table13_0_emit_[emit]; 93 } GetOp10(size_t i)94 static inline uint64_t GetOp10(size_t i) { return table10_0_ops_[i]; } GetEmit10(size_t,size_t emit)95 static inline uint64_t GetEmit10(size_t, size_t emit) { 96 return table13_0_emit_[emit]; 97 } GetOp15(size_t i)98 static inline uint64_t GetOp15(size_t i) { 99 return ((i < 3 ? (i) : (((void)(i - 3), 3))) < 2 100 ? ((i < 3 ? (i) : (((void)(i - 3), 3))) ? 2 : 0) 101 : (((i < 3 ? (i) : (((void)(i - 3), 3))) - 2) ? 1 : 4)); 102 } GetEmit15(size_t,size_t emit)103 static inline uint64_t GetEmit15(size_t, size_t emit) { 104 return (emit < 1 ? (((void)emit, 92)) : ((emit - 1) ? 208 : 195)); 105 } GetOp16(size_t i)106 static inline uint64_t GetOp16(size_t i) { 107 return table16_0_inner_[table16_0_outer_[i]]; 108 } GetEmit16(size_t,size_t emit)109 static inline uint64_t GetEmit16(size_t, size_t emit) { 110 return table16_0_emit_[emit]; 111 } GetOp14(size_t i)112 static inline uint64_t GetOp14(size_t i) { return table14_0_ops_[i]; } GetEmit14(size_t,size_t emit)113 static inline uint64_t GetEmit14(size_t, size_t emit) { 114 return table14_0_emit_[emit]; 115 } GetOp18(size_t i)116 static inline uint64_t GetOp18(size_t i) { return table18_0_ops_[i]; } GetEmit18(size_t,size_t emit)117 static inline uint64_t GetEmit18(size_t, size_t emit) { 118 return table18_0_emit_[emit]; 119 } GetOp19(size_t i)120 static inline uint64_t GetOp19(size_t i) { return table19_0_ops_[i]; } GetEmit19(size_t,size_t emit)121 static inline uint64_t GetEmit19(size_t, size_t emit) { 122 return table19_0_emit_[emit]; 123 } GetOp20(size_t i)124 static inline uint64_t GetOp20(size_t i) { return table20_0_ops_[i]; } GetEmit20(size_t,size_t emit)125 static inline uint64_t GetEmit20(size_t, size_t emit) { 126 return table20_0_emit_[emit]; 127 } GetOp21(size_t i)128 static inline uint64_t GetOp21(size_t i) { 129 return table21_ops_[i >> 7][i & 0x7f]; 130 } GetEmit21(size_t i,size_t emit)131 static inline uint64_t GetEmit21(size_t i, size_t emit) { 132 return table21_emit_[i >> 7][emit]; 133 } GetOp22(size_t i)134 static inline uint64_t GetOp22(size_t i) { 135 return table22_ops_[i >> 8][i & 0xff]; 136 } GetEmit22(size_t i,size_t emit)137 static inline uint64_t GetEmit22(size_t i, size_t emit) { 138 return table22_emit_[i >> 8][emit]; 139 } GetOp23(size_t i)140 static inline uint64_t GetOp23(size_t i) { 141 return table23_ops_[i >> 6][i & 0x3f]; 142 } GetEmit23(size_t i,size_t emit)143 static inline uint64_t GetEmit23(size_t i, size_t emit) { 144 return table23_emit_[i >> 6][emit]; 145 } GetOp24(size_t i)146 static inline uint64_t GetOp24(size_t i) { 147 return table24_ops_[i >> 6][i & 0x3f]; 148 } GetEmit24(size_t i,size_t emit)149 static inline uint64_t GetEmit24(size_t i, size_t emit) { 150 return table24_emit_[i >> 6][emit]; 151 } GetOp25(size_t i)152 static inline uint64_t GetOp25(size_t i) { 153 return table25_ops_[i >> 7][i & 0x7f]; 154 } GetEmit25(size_t i,size_t emit)155 static inline uint64_t GetEmit25(size_t i, size_t emit) { 156 return table25_emit_[i >> 7][emit]; 157 } GetOp26(size_t i)158 static inline uint64_t GetOp26(size_t i) { 159 return table26_ops_[i >> 7][i & 0x7f]; 160 } GetEmit26(size_t i,size_t emit)161 static inline uint64_t GetEmit26(size_t i, size_t emit) { 162 return table26_emit_[i >> 7][emit]; 163 } GetOp17(size_t i)164 static inline uint64_t GetOp17(size_t i) { 165 return table17_ops_[i >> 8][i & 0xff]; 166 } GetEmit17(size_t i,size_t emit)167 static inline uint64_t GetEmit17(size_t i, size_t emit) { 168 return table17_emit_[i >> 8][emit]; 169 } 170 171 private: 172 static const uint8_t table2_0_emit_[10]; 173 static const uint8_t table2_0_ops_[32]; 174 static const uint8_t table3_0_emit_[36]; 175 static const uint8_t table3_0_ops_[64]; 176 static const uint8_t table4_0_emit_[22]; 177 static const uint8_t table4_0_ops_[64]; 178 static const uint8_t table4_1_emit_[46]; 179 static const uint8_t table4_1_ops_[64]; 180 static const uint8_t* const table4_emit_[2]; 181 static const uint8_t* const table4_ops_[2]; 182 static const uint8_t table5_0_ops_[128]; 183 static const uint8_t table5_1_emit_[52]; 184 static const uint8_t table5_1_ops_[128]; 185 static const uint8_t* const table5_emit_[2]; 186 static const uint8_t* const table5_ops_[2]; 187 static const uint8_t table6_0_emit_[2]; 188 static const uint8_t table6_0_ops_[32]; 189 static const uint8_t table6_1_emit_[2]; 190 static const uint8_t table6_2_emit_[2]; 191 static const uint8_t table6_3_emit_[2]; 192 static const uint8_t table6_4_emit_[2]; 193 static const uint8_t table6_5_emit_[4]; 194 static const uint8_t table6_5_ops_[32]; 195 static const uint8_t table6_6_emit_[4]; 196 static const uint8_t table6_7_emit_[4]; 197 static const uint8_t table6_8_emit_[4]; 198 static const uint8_t table6_9_emit_[4]; 199 static const uint8_t table6_10_emit_[4]; 200 static const uint8_t table6_11_emit_[6]; 201 static const uint8_t table6_11_ops_[32]; 202 static const uint8_t table6_12_emit_[8]; 203 static const uint8_t table6_12_ops_[32]; 204 static const uint8_t table6_13_emit_[8]; 205 static const uint8_t table6_14_emit_[8]; 206 static const uint8_t table6_15_emit_[10]; 207 static const uint8_t table6_15_ops_[32]; 208 static const uint8_t* const table6_emit_[16]; 209 static const uint8_t* const table6_ops_[16]; 210 static const uint8_t table7_0_emit_[36]; 211 static const uint8_t table7_0_ops_[64]; 212 static const uint8_t table7_1_emit_[36]; 213 static const uint8_t table7_1_ops_[64]; 214 static const uint8_t table7_2_emit_[36]; 215 static const uint8_t table7_2_ops_[64]; 216 static const uint8_t table7_3_emit_[36]; 217 static const uint8_t table7_3_ops_[64]; 218 static const uint8_t table7_4_emit_[38]; 219 static const uint8_t table7_4_ops_[64]; 220 static const uint8_t table7_5_ops_[64]; 221 static const uint8_t table7_11_ops_[64]; 222 static const uint8_t table7_12_ops_[64]; 223 static const uint8_t table7_15_emit_[15]; 224 static const uint8_t table7_15_ops_[64]; 225 static const uint8_t* const table7_emit_[16]; 226 static const uint8_t* const table7_ops_[16]; 227 static const uint8_t table1_0_emit_[71]; 228 static const uint16_t table1_0_inner_[37]; 229 static const uint8_t table1_0_outer_[64]; 230 static const uint8_t table1_1_emit_[71]; 231 static const uint16_t table1_1_inner_[37]; 232 static const uint8_t table1_2_emit_[71]; 233 static const uint16_t table1_2_inner_[37]; 234 static const uint8_t table1_3_emit_[71]; 235 static const uint16_t table1_3_inner_[37]; 236 static const uint8_t table1_4_emit_[71]; 237 static const uint16_t table1_4_inner_[37]; 238 static const uint8_t table1_5_emit_[71]; 239 static const uint16_t table1_5_inner_[37]; 240 static const uint8_t table1_6_emit_[71]; 241 static const uint16_t table1_6_inner_[37]; 242 static const uint8_t table1_7_emit_[71]; 243 static const uint16_t table1_7_inner_[37]; 244 static const uint8_t table1_8_emit_[71]; 245 static const uint16_t table1_8_inner_[37]; 246 static const uint8_t table1_9_emit_[71]; 247 static const uint16_t table1_9_inner_[37]; 248 static const uint8_t table1_10_emit_[40]; 249 static const uint16_t table1_10_inner_[22]; 250 static const uint8_t table1_10_outer_[64]; 251 static const uint8_t table1_11_emit_[40]; 252 static const uint8_t table1_12_emit_[40]; 253 static const uint8_t table1_13_emit_[40]; 254 static const uint8_t table1_14_emit_[40]; 255 static const uint8_t table1_15_emit_[40]; 256 static const uint8_t table1_16_emit_[40]; 257 static const uint8_t table1_17_emit_[40]; 258 static const uint8_t table1_18_emit_[40]; 259 static const uint8_t table1_19_emit_[40]; 260 static const uint8_t table1_20_emit_[40]; 261 static const uint8_t table1_21_emit_[40]; 262 static const uint8_t table1_22_emit_[40]; 263 static const uint8_t table1_23_emit_[4]; 264 static const uint16_t table1_23_inner_[4]; 265 static const uint8_t table1_23_outer_[64]; 266 static const uint8_t table1_24_emit_[4]; 267 static const uint8_t table1_25_emit_[4]; 268 static const uint8_t table1_26_emit_[4]; 269 static const uint8_t table1_27_emit_[4]; 270 static const uint8_t table1_28_emit_[4]; 271 static const uint8_t table1_29_emit_[4]; 272 static const uint8_t table1_30_emit_[4]; 273 static const uint8_t table1_31_emit_[14]; 274 static const uint16_t table1_31_inner_[17]; 275 static const uint8_t table1_31_outer_[64]; 276 static const uint8_t* const table1_emit_[32]; 277 static const uint16_t* const table1_inner_[32]; 278 static const uint8_t* const table1_outer_[32]; 279 static const uint8_t table12_0_inner_[6]; 280 static const uint8_t table12_0_outer_[8]; 281 static const uint8_t table13_0_emit_[7]; 282 static const uint8_t table13_0_inner_[9]; 283 static const uint8_t table13_0_outer_[16]; 284 static const uint8_t table10_0_ops_[32]; 285 static const uint8_t table16_0_emit_[11]; 286 static const uint8_t table16_0_inner_[12]; 287 static const uint8_t table16_0_outer_[16]; 288 static const uint8_t table14_0_emit_[15]; 289 static const uint8_t table14_0_ops_[32]; 290 static const uint8_t table18_0_emit_[9]; 291 static const uint8_t table18_0_ops_[32]; 292 static const uint8_t table19_0_emit_[35]; 293 static const uint8_t table19_0_ops_[64]; 294 static const uint8_t table20_0_emit_[64]; 295 static const uint8_t table20_0_ops_[128]; 296 static const uint8_t table21_0_emit_[23]; 297 static const uint8_t table21_0_ops_[128]; 298 static const uint8_t table21_1_emit_[53]; 299 static const uint8_t table21_1_ops_[128]; 300 static const uint8_t* const table21_emit_[2]; 301 static const uint8_t* const table21_ops_[2]; 302 static const uint8_t table22_0_ops_[256]; 303 static const uint8_t table22_1_emit_[57]; 304 static const uint8_t table22_1_ops_[256]; 305 static const uint8_t* const table22_emit_[2]; 306 static const uint8_t* const table22_ops_[2]; 307 static const uint8_t table23_0_emit_[40]; 308 static const uint8_t table23_0_ops_[64]; 309 static const uint8_t table23_1_emit_[40]; 310 static const uint8_t table23_2_emit_[40]; 311 static const uint8_t table23_3_emit_[40]; 312 static const uint8_t table23_4_emit_[22]; 313 static const uint8_t table23_4_ops_[64]; 314 static const uint8_t table23_5_emit_[4]; 315 static const uint8_t table23_6_emit_[4]; 316 static const uint8_t table23_7_emit_[4]; 317 static const uint8_t table23_8_emit_[4]; 318 static const uint8_t table23_9_emit_[4]; 319 static const uint8_t table23_10_emit_[4]; 320 static const uint8_t table23_11_emit_[8]; 321 static const uint8_t table23_12_emit_[8]; 322 static const uint8_t table23_13_emit_[8]; 323 static const uint8_t table23_14_emit_[11]; 324 static const uint8_t table23_14_ops_[64]; 325 static const uint8_t table23_15_emit_[25]; 326 static const uint8_t table23_15_ops_[64]; 327 static const uint8_t* const table23_emit_[16]; 328 static const uint8_t* const table23_ops_[16]; 329 static const uint8_t table24_0_emit_[72]; 330 static const uint16_t table24_0_ops_[64]; 331 static const uint8_t table24_1_emit_[72]; 332 static const uint8_t table24_2_emit_[72]; 333 static const uint8_t table24_3_emit_[72]; 334 static const uint8_t table24_4_emit_[72]; 335 static const uint8_t table24_5_emit_[72]; 336 static const uint8_t table24_6_emit_[72]; 337 static const uint8_t table24_7_emit_[72]; 338 static const uint8_t table24_8_emit_[72]; 339 static const uint8_t table24_9_emit_[40]; 340 static const uint16_t table24_9_ops_[64]; 341 static const uint8_t table24_10_emit_[40]; 342 static const uint8_t table24_11_emit_[40]; 343 static const uint8_t table24_12_emit_[40]; 344 static const uint8_t table24_13_emit_[40]; 345 static const uint8_t table24_14_emit_[40]; 346 static const uint8_t table24_15_emit_[40]; 347 static const uint8_t table24_16_emit_[40]; 348 static const uint8_t table24_17_emit_[40]; 349 static const uint8_t table24_18_emit_[40]; 350 static const uint8_t table24_19_emit_[40]; 351 static const uint8_t table24_20_emit_[40]; 352 static const uint8_t table24_21_emit_[40]; 353 static const uint8_t table24_22_emit_[4]; 354 static const uint16_t table24_22_ops_[64]; 355 static const uint8_t table24_23_emit_[4]; 356 static const uint8_t table24_24_emit_[4]; 357 static const uint8_t table24_25_emit_[4]; 358 static const uint8_t table24_26_emit_[4]; 359 static const uint8_t table24_27_emit_[4]; 360 static const uint8_t table24_28_emit_[4]; 361 static const uint8_t table24_29_emit_[7]; 362 static const uint16_t table24_29_ops_[64]; 363 static const uint8_t table24_30_emit_[10]; 364 static const uint16_t table24_30_ops_[64]; 365 static const uint8_t table24_31_emit_[34]; 366 static const uint16_t table24_31_ops_[64]; 367 static const uint8_t* const table24_emit_[32]; 368 static const uint16_t* const table24_ops_[32]; 369 static const uint8_t table25_0_emit_[136]; 370 static const uint16_t table25_0_ops_[128]; 371 static const uint8_t table25_1_emit_[136]; 372 static const uint8_t table25_2_emit_[136]; 373 static const uint8_t table25_3_emit_[136]; 374 static const uint8_t table25_4_emit_[136]; 375 static const uint8_t table25_5_emit_[136]; 376 static const uint8_t table25_6_emit_[136]; 377 static const uint8_t table25_7_emit_[136]; 378 static const uint8_t table25_8_emit_[136]; 379 static const uint8_t table25_9_emit_[144]; 380 static const uint16_t table25_9_ops_[128]; 381 static const uint8_t table25_10_emit_[144]; 382 static const uint8_t table25_11_emit_[144]; 383 static const uint8_t table25_12_emit_[144]; 384 static const uint8_t table25_13_emit_[144]; 385 static const uint8_t table25_14_emit_[144]; 386 static const uint8_t table25_15_emit_[144]; 387 static const uint8_t table25_16_emit_[144]; 388 static const uint8_t table25_17_emit_[144]; 389 static const uint8_t table25_18_emit_[144]; 390 static const uint8_t table25_19_emit_[144]; 391 static const uint8_t table25_20_emit_[144]; 392 static const uint8_t table25_21_emit_[144]; 393 static const uint8_t table25_22_emit_[80]; 394 static const uint16_t table25_22_ops_[128]; 395 static const uint8_t table25_23_emit_[80]; 396 static const uint8_t table25_24_emit_[80]; 397 static const uint8_t table25_25_emit_[80]; 398 static const uint8_t table25_26_emit_[80]; 399 static const uint8_t table25_27_emit_[80]; 400 static const uint8_t table25_28_emit_[80]; 401 static const uint8_t table25_29_emit_[26]; 402 static const uint16_t table25_29_ops_[128]; 403 static const uint16_t table25_30_ops_[128]; 404 static const uint8_t table25_31_emit_[63]; 405 static const uint16_t table25_31_ops_[128]; 406 static const uint8_t* const table25_emit_[32]; 407 static const uint16_t* const table25_ops_[32]; 408 static const uint8_t table26_0_emit_[44]; 409 static const uint16_t table26_0_ops_[128]; 410 static const uint8_t table26_1_emit_[104]; 411 static const uint16_t table26_1_ops_[128]; 412 static const uint8_t table26_2_emit_[44]; 413 static const uint8_t table26_3_emit_[104]; 414 static const uint8_t table26_4_emit_[44]; 415 static const uint8_t table26_5_emit_[104]; 416 static const uint8_t table26_6_emit_[44]; 417 static const uint8_t table26_7_emit_[104]; 418 static const uint8_t table26_8_emit_[44]; 419 static const uint8_t table26_9_emit_[104]; 420 static const uint8_t table26_10_emit_[44]; 421 static const uint8_t table26_11_emit_[104]; 422 static const uint8_t table26_12_emit_[44]; 423 static const uint8_t table26_13_emit_[104]; 424 static const uint8_t table26_14_emit_[44]; 425 static const uint8_t table26_15_emit_[104]; 426 static const uint8_t table26_16_emit_[44]; 427 static const uint8_t table26_17_emit_[104]; 428 static const uint8_t table26_18_emit_[136]; 429 static const uint8_t table26_19_emit_[136]; 430 static const uint8_t table26_20_emit_[136]; 431 static const uint8_t table26_21_emit_[136]; 432 static const uint8_t table26_22_emit_[136]; 433 static const uint8_t table26_23_emit_[136]; 434 static const uint8_t table26_24_emit_[136]; 435 static const uint8_t table26_25_emit_[136]; 436 static const uint8_t table26_26_emit_[136]; 437 static const uint8_t table26_27_emit_[136]; 438 static const uint8_t table26_28_emit_[136]; 439 static const uint8_t table26_29_emit_[136]; 440 static const uint8_t table26_30_emit_[136]; 441 static const uint8_t table26_31_emit_[136]; 442 static const uint8_t table26_32_emit_[136]; 443 static const uint8_t table26_33_emit_[136]; 444 static const uint8_t table26_34_emit_[136]; 445 static const uint8_t table26_35_emit_[136]; 446 static const uint8_t table26_36_emit_[136]; 447 static const uint8_t table26_37_emit_[136]; 448 static const uint8_t table26_38_emit_[136]; 449 static const uint8_t table26_39_emit_[136]; 450 static const uint8_t table26_40_emit_[136]; 451 static const uint8_t table26_41_emit_[136]; 452 static const uint8_t table26_42_emit_[136]; 453 static const uint8_t table26_43_emit_[136]; 454 static const uint8_t table26_44_emit_[144]; 455 static const uint8_t table26_45_emit_[144]; 456 static const uint8_t table26_46_emit_[144]; 457 static const uint8_t table26_47_emit_[144]; 458 static const uint8_t table26_48_emit_[144]; 459 static const uint8_t table26_49_emit_[144]; 460 static const uint8_t table26_50_emit_[144]; 461 static const uint8_t table26_51_emit_[144]; 462 static const uint8_t table26_52_emit_[144]; 463 static const uint8_t table26_53_emit_[144]; 464 static const uint8_t table26_54_emit_[144]; 465 static const uint8_t table26_55_emit_[144]; 466 static const uint8_t table26_56_emit_[144]; 467 static const uint8_t table26_57_emit_[144]; 468 static const uint8_t table26_58_emit_[112]; 469 static const uint16_t table26_58_ops_[128]; 470 static const uint8_t table26_59_emit_[80]; 471 static const uint8_t table26_60_emit_[80]; 472 static const uint8_t table26_61_emit_[44]; 473 static const uint16_t table26_61_ops_[128]; 474 static const uint8_t table26_62_emit_[17]; 475 static const uint16_t table26_62_ops_[128]; 476 static const uint8_t table26_63_emit_[46]; 477 static const uint16_t table26_63_ops_[128]; 478 static const uint8_t* const table26_emit_[64]; 479 static const uint16_t* const table26_ops_[64]; 480 static const uint8_t table17_0_emit_[1]; 481 static const uint16_t table17_0_ops_[256]; 482 static const uint8_t table17_2_emit_[1]; 483 static const uint8_t table17_4_emit_[1]; 484 static const uint8_t table17_6_emit_[1]; 485 static const uint8_t table17_8_emit_[1]; 486 static const uint8_t table17_10_emit_[1]; 487 static const uint8_t table17_12_emit_[1]; 488 static const uint8_t table17_14_emit_[1]; 489 static const uint8_t table17_16_emit_[1]; 490 static const uint8_t table17_18_emit_[1]; 491 static const uint16_t table17_18_ops_[256]; 492 static const uint8_t table17_19_emit_[1]; 493 static const uint8_t table17_20_emit_[1]; 494 static const uint8_t table17_21_emit_[1]; 495 static const uint8_t table17_22_emit_[1]; 496 static const uint8_t table17_23_emit_[1]; 497 static const uint8_t table17_24_emit_[1]; 498 static const uint8_t table17_25_emit_[1]; 499 static const uint8_t table17_26_emit_[1]; 500 static const uint8_t table17_27_emit_[1]; 501 static const uint8_t table17_28_emit_[1]; 502 static const uint8_t table17_29_emit_[1]; 503 static const uint8_t table17_30_emit_[1]; 504 static const uint8_t table17_31_emit_[1]; 505 static const uint8_t table17_32_emit_[1]; 506 static const uint8_t table17_33_emit_[1]; 507 static const uint8_t table17_34_emit_[1]; 508 static const uint8_t table17_35_emit_[1]; 509 static const uint8_t table17_36_emit_[1]; 510 static const uint8_t table17_37_emit_[1]; 511 static const uint8_t table17_38_emit_[1]; 512 static const uint8_t table17_39_emit_[1]; 513 static const uint8_t table17_40_emit_[1]; 514 static const uint8_t table17_41_emit_[1]; 515 static const uint8_t table17_42_emit_[1]; 516 static const uint8_t table17_43_emit_[1]; 517 static const uint8_t table17_44_emit_[2]; 518 static const uint16_t table17_44_ops_[256]; 519 static const uint8_t table17_45_emit_[2]; 520 static const uint8_t table17_46_emit_[2]; 521 static const uint8_t table17_47_emit_[2]; 522 static const uint8_t table17_48_emit_[2]; 523 static const uint8_t table17_49_emit_[2]; 524 static const uint8_t table17_50_emit_[2]; 525 static const uint8_t table17_51_emit_[2]; 526 static const uint8_t table17_52_emit_[2]; 527 static const uint8_t table17_53_emit_[2]; 528 static const uint8_t table17_54_emit_[2]; 529 static const uint8_t table17_55_emit_[2]; 530 static const uint8_t table17_56_emit_[2]; 531 static const uint8_t table17_57_emit_[2]; 532 static const uint8_t table17_58_emit_[3]; 533 static const uint16_t table17_58_ops_[256]; 534 static const uint8_t table17_59_emit_[4]; 535 static const uint16_t table17_59_ops_[256]; 536 static const uint8_t table17_60_emit_[4]; 537 static const uint8_t table17_61_emit_[6]; 538 static const uint16_t table17_61_ops_[256]; 539 static const uint16_t table17_62_ops_[256]; 540 static const uint8_t table17_63_emit_[49]; 541 static const uint16_t table17_63_ops_[256]; 542 static const uint8_t* const table17_emit_[64]; 543 static const uint16_t* const table17_ops_[64]; 544 }; 545 template <typename F> 546 class HuffDecoder : public HuffDecoderCommon { 547 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)548 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 549 : sink_(sink), begin_(begin), end_(end) {} Run()550 bool Run() { 551 while (!done_) { 552 if (!RefillTo11()) { 553 Done0(); 554 break; 555 } 556 const auto index = (buffer_ >> (buffer_len_ - 11)) & 0x7ff; 557 const auto op = GetOp1(index); 558 const int consumed = op & 15; 559 buffer_len_ -= consumed; 560 const auto emit_ofs = op >> 7; 561 switch ((op >> 4) & 7) { 562 case 0: { 563 sink_(GetEmit1(index, emit_ofs + 0)); 564 sink_(GetEmit1(index, emit_ofs + 1)); 565 break; 566 } 567 case 1: { 568 sink_(GetEmit1(index, emit_ofs + 0)); 569 break; 570 } 571 case 2: { 572 DecodeStep0(); 573 break; 574 } 575 case 3: { 576 DecodeStep1(); 577 break; 578 } 579 case 4: { 580 DecodeStep2(); 581 break; 582 } 583 } 584 } 585 return ok_; 586 } 587 588 private: RefillTo11()589 bool RefillTo11() { 590 switch (buffer_len_) { 591 case 0: { 592 return Read2to8Bytes(); 593 } 594 case 1: 595 case 2: { 596 return Read2to7Bytes(); 597 } 598 case 3: 599 case 4: 600 case 5: 601 case 6: 602 case 7: 603 case 8: { 604 return Read1to7Bytes(); 605 } 606 case 9: 607 case 10: { 608 return Read1to6Bytes(); 609 } 610 } 611 return true; 612 } Read2to8Bytes()613 bool Read2to8Bytes() { 614 switch (end_ - begin_) { 615 case 0: 616 case 1: { 617 return false; 618 } 619 case 2: { 620 Fill2(); 621 return true; 622 } 623 case 3: { 624 Fill3(); 625 return true; 626 } 627 case 4: { 628 Fill4(); 629 return true; 630 } 631 case 5: { 632 Fill5(); 633 return true; 634 } 635 case 6: { 636 Fill6(); 637 return true; 638 } 639 case 7: { 640 Fill7(); 641 return true; 642 } 643 default: { 644 Fill8(); 645 return true; 646 } 647 } 648 } Fill2()649 void Fill2() { 650 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 651 (static_cast<uint64_t>(begin_[1]) << 0); 652 begin_ += 2; 653 buffer_len_ += 16; 654 } Fill3()655 void Fill3() { 656 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 657 (static_cast<uint64_t>(begin_[1]) << 8) | 658 (static_cast<uint64_t>(begin_[2]) << 0); 659 begin_ += 3; 660 buffer_len_ += 24; 661 } Fill4()662 void Fill4() { 663 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 664 (static_cast<uint64_t>(begin_[1]) << 16) | 665 (static_cast<uint64_t>(begin_[2]) << 8) | 666 (static_cast<uint64_t>(begin_[3]) << 0); 667 begin_ += 4; 668 buffer_len_ += 32; 669 } Fill5()670 void Fill5() { 671 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 672 (static_cast<uint64_t>(begin_[1]) << 24) | 673 (static_cast<uint64_t>(begin_[2]) << 16) | 674 (static_cast<uint64_t>(begin_[3]) << 8) | 675 (static_cast<uint64_t>(begin_[4]) << 0); 676 begin_ += 5; 677 buffer_len_ += 40; 678 } Fill6()679 void Fill6() { 680 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 681 (static_cast<uint64_t>(begin_[1]) << 32) | 682 (static_cast<uint64_t>(begin_[2]) << 24) | 683 (static_cast<uint64_t>(begin_[3]) << 16) | 684 (static_cast<uint64_t>(begin_[4]) << 8) | 685 (static_cast<uint64_t>(begin_[5]) << 0); 686 begin_ += 6; 687 buffer_len_ += 48; 688 } Fill7()689 void Fill7() { 690 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 691 (static_cast<uint64_t>(begin_[1]) << 40) | 692 (static_cast<uint64_t>(begin_[2]) << 32) | 693 (static_cast<uint64_t>(begin_[3]) << 24) | 694 (static_cast<uint64_t>(begin_[4]) << 16) | 695 (static_cast<uint64_t>(begin_[5]) << 8) | 696 (static_cast<uint64_t>(begin_[6]) << 0); 697 begin_ += 7; 698 buffer_len_ += 56; 699 } Fill8()700 void Fill8() { 701 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 702 (static_cast<uint64_t>(begin_[1]) << 48) | 703 (static_cast<uint64_t>(begin_[2]) << 40) | 704 (static_cast<uint64_t>(begin_[3]) << 32) | 705 (static_cast<uint64_t>(begin_[4]) << 24) | 706 (static_cast<uint64_t>(begin_[5]) << 16) | 707 (static_cast<uint64_t>(begin_[6]) << 8) | 708 (static_cast<uint64_t>(begin_[7]) << 0); 709 begin_ += 8; 710 buffer_len_ += 64; 711 } Read2to7Bytes()712 bool Read2to7Bytes() { 713 switch (end_ - begin_) { 714 case 0: 715 case 1: { 716 return false; 717 } 718 case 2: { 719 Fill2(); 720 return true; 721 } 722 case 3: { 723 Fill3(); 724 return true; 725 } 726 case 4: { 727 Fill4(); 728 return true; 729 } 730 case 5: { 731 Fill5(); 732 return true; 733 } 734 case 6: { 735 Fill6(); 736 return true; 737 } 738 default: { 739 Fill7(); 740 return true; 741 } 742 } 743 } Read1to7Bytes()744 bool Read1to7Bytes() { 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 case 6: { 770 Fill6(); 771 return true; 772 } 773 default: { 774 Fill7(); 775 return true; 776 } 777 } 778 } Fill1()779 void Fill1() { 780 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 781 begin_ += 1; 782 buffer_len_ += 8; 783 } Read1to6Bytes()784 bool Read1to6Bytes() { 785 switch (end_ - begin_) { 786 case 0: { 787 return false; 788 } 789 case 1: { 790 Fill1(); 791 return true; 792 } 793 case 2: { 794 Fill2(); 795 return true; 796 } 797 case 3: { 798 Fill3(); 799 return true; 800 } 801 case 4: { 802 Fill4(); 803 return true; 804 } 805 case 5: { 806 Fill5(); 807 return true; 808 } 809 default: { 810 Fill6(); 811 return true; 812 } 813 } 814 } Done0()815 void Done0() { 816 done_ = true; 817 switch (end_ - begin_) { 818 case 1: { 819 Fill1(); 820 break; 821 } 822 } 823 switch (buffer_len_) { 824 case 1: 825 case 2: 826 case 3: 827 case 4: { 828 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 829 return; 830 } 831 case 5: { 832 const auto index = buffer_ & 31; 833 const auto op = GetOp2(index); 834 switch (op & 3) { 835 case 0: { 836 sink_(GetEmit2(index, (op >> 2) + 0)); 837 break; 838 } 839 case 1: { 840 ok_ = false; 841 break; 842 } 843 } 844 return; 845 } 846 case 6: { 847 const auto index = buffer_ & 63; 848 const auto op = GetOp3(index); 849 switch (op & 3) { 850 case 0: { 851 ok_ = false; 852 break; 853 } 854 case 1: { 855 sink_(GetEmit3(index, (op >> 2) + 0)); 856 break; 857 } 858 } 859 return; 860 } 861 case 7: { 862 const auto index = buffer_ & 127; 863 const auto op = GetOp4(index); 864 switch (op & 3) { 865 case 0: { 866 ok_ = false; 867 break; 868 } 869 case 1: { 870 sink_(GetEmit4(index, (op >> 2) + 0)); 871 break; 872 } 873 } 874 return; 875 } 876 case 8: { 877 const auto index = buffer_ & 255; 878 const auto op = GetOp5(index); 879 switch (op & 3) { 880 case 0: { 881 ok_ = false; 882 break; 883 } 884 case 1: { 885 sink_(GetEmit5(index, (op >> 2) + 0)); 886 break; 887 } 888 } 889 return; 890 } 891 case 9: { 892 const auto index = buffer_ & 511; 893 const auto op = GetOp6(index); 894 switch (op & 3) { 895 case 0: { 896 ok_ = false; 897 break; 898 } 899 case 1: { 900 sink_(GetEmit6(index, (op >> 2) + 0)); 901 break; 902 } 903 } 904 return; 905 } 906 case 10: { 907 const auto index = buffer_ & 1023; 908 const auto op = GetOp7(index); 909 switch (op & 3) { 910 case 0: { 911 sink_(GetEmit7(index, (op >> 2) + 0)); 912 sink_(GetEmit7(index, (op >> 2) + 1)); 913 break; 914 } 915 case 1: { 916 ok_ = false; 917 break; 918 } 919 case 2: { 920 sink_(GetEmit7(index, (op >> 2) + 0)); 921 break; 922 } 923 } 924 return; 925 } 926 case 0: { 927 return; 928 } 929 } 930 } DecodeStep0()931 void DecodeStep0() { 932 if (!RefillTo1()) { 933 Done1(); 934 return; 935 } 936 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 937 const auto op = GetOp8(index); 938 const int consumed = op & 1; 939 buffer_len_ -= consumed; 940 const auto emit_ofs = op >> 1; 941 sink_(GetEmit8(index, emit_ofs + 0)); 942 } RefillTo1()943 bool RefillTo1() { 944 switch (buffer_len_) { 945 case 0: { 946 return Read1to8Bytes(); 947 } 948 } 949 return true; 950 } Read1to8Bytes()951 bool Read1to8Bytes() { 952 switch (end_ - begin_) { 953 case 0: { 954 return false; 955 } 956 case 1: { 957 Fill1(); 958 return true; 959 } 960 case 2: { 961 Fill2(); 962 return true; 963 } 964 case 3: { 965 Fill3(); 966 return true; 967 } 968 case 4: { 969 Fill4(); 970 return true; 971 } 972 case 5: { 973 Fill5(); 974 return true; 975 } 976 case 6: { 977 Fill6(); 978 return true; 979 } 980 case 7: { 981 Fill7(); 982 return true; 983 } 984 default: { 985 Fill8(); 986 return true; 987 } 988 } 989 } Done1()990 void Done1() { 991 done_ = true; 992 ok_ = false; 993 } DecodeStep1()994 void DecodeStep1() { 995 if (!RefillTo2()) { 996 Done2(); 997 return; 998 } 999 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1000 const auto op = GetOp9(index); 1001 const int consumed = op & 3; 1002 buffer_len_ -= consumed; 1003 const auto emit_ofs = op >> 2; 1004 sink_(GetEmit9(index, emit_ofs + 0)); 1005 } RefillTo2()1006 bool RefillTo2() { 1007 switch (buffer_len_) { 1008 case 0: { 1009 return Read1to8Bytes(); 1010 } 1011 case 1: { 1012 return Read1to7Bytes(); 1013 } 1014 } 1015 return true; 1016 } Done2()1017 void Done2() { 1018 done_ = true; 1019 switch (buffer_len_) { 1020 case 1: 1021 case 0: { 1022 ok_ = false; 1023 return; 1024 } 1025 } 1026 } DecodeStep2()1027 void DecodeStep2() { 1028 if (!RefillTo5()) { 1029 Done3(); 1030 return; 1031 } 1032 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 1033 const auto op = GetOp10(index); 1034 const int consumed = op & 7; 1035 buffer_len_ -= consumed; 1036 const auto emit_ofs = op >> 5; 1037 switch ((op >> 3) & 3) { 1038 case 0: { 1039 sink_(GetEmit10(index, emit_ofs + 0)); 1040 break; 1041 } 1042 case 1: { 1043 DecodeStep3(); 1044 break; 1045 } 1046 case 2: { 1047 DecodeStep4(); 1048 break; 1049 } 1050 } 1051 } RefillTo5()1052 bool RefillTo5() { 1053 switch (buffer_len_) { 1054 case 0: { 1055 return Read1to8Bytes(); 1056 } 1057 case 1: 1058 case 2: 1059 case 3: 1060 case 4: { 1061 return Read1to7Bytes(); 1062 } 1063 } 1064 return true; 1065 } Done3()1066 void Done3() { 1067 done_ = true; 1068 switch (buffer_len_) { 1069 case 1: { 1070 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1071 return; 1072 } 1073 case 2: { 1074 const auto index = buffer_ & 3; 1075 const auto op = GetOp11(index); 1076 switch (op & 3) { 1077 case 0: { 1078 sink_(GetEmit11(index, (op >> 2) + 0)); 1079 break; 1080 } 1081 case 1: { 1082 ok_ = false; 1083 break; 1084 } 1085 } 1086 return; 1087 } 1088 case 3: { 1089 const auto index = buffer_ & 7; 1090 const auto op = GetOp12(index); 1091 switch (op & 3) { 1092 case 0: { 1093 ok_ = false; 1094 break; 1095 } 1096 case 1: { 1097 sink_(GetEmit12(index, (op >> 2) + 0)); 1098 break; 1099 } 1100 } 1101 return; 1102 } 1103 case 4: { 1104 const auto index = buffer_ & 15; 1105 const auto op = GetOp13(index); 1106 switch (op & 3) { 1107 case 0: { 1108 ok_ = false; 1109 break; 1110 } 1111 case 1: { 1112 sink_(GetEmit13(index, (op >> 2) + 0)); 1113 break; 1114 } 1115 } 1116 return; 1117 } 1118 case 0: { 1119 return; 1120 } 1121 } 1122 } DecodeStep3()1123 void DecodeStep3() { 1124 if (!RefillTo5()) { 1125 Done4(); 1126 return; 1127 } 1128 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 1129 const auto op = GetOp14(index); 1130 const int consumed = op & 7; 1131 buffer_len_ -= consumed; 1132 const auto emit_ofs = op >> 3; 1133 sink_(GetEmit14(index, emit_ofs + 0)); 1134 } Done4()1135 void Done4() { 1136 done_ = true; 1137 switch (buffer_len_) { 1138 case 1: 1139 case 2: 1140 case 0: { 1141 ok_ = false; 1142 return; 1143 } 1144 case 3: { 1145 const auto index = buffer_ & 7; 1146 const auto op = GetOp15(index); 1147 switch (op & 1) { 1148 case 0: { 1149 sink_(GetEmit15(index, (op >> 1) + 0)); 1150 break; 1151 } 1152 case 1: { 1153 ok_ = false; 1154 break; 1155 } 1156 } 1157 return; 1158 } 1159 case 4: { 1160 const auto index = buffer_ & 15; 1161 const auto op = GetOp16(index); 1162 switch (op & 1) { 1163 case 0: { 1164 ok_ = false; 1165 break; 1166 } 1167 case 1: { 1168 sink_(GetEmit16(index, (op >> 1) + 0)); 1169 break; 1170 } 1171 } 1172 return; 1173 } 1174 } 1175 } DecodeStep4()1176 void DecodeStep4() { 1177 if (!RefillTo14()) { 1178 Done5(); 1179 return; 1180 } 1181 const auto index = (buffer_ >> (buffer_len_ - 14)) & 0x3fff; 1182 const auto op = GetOp17(index); 1183 const int consumed = op & 15; 1184 buffer_len_ -= consumed; 1185 const auto emit_ofs = op >> 5; 1186 switch ((op >> 4) & 1) { 1187 case 0: { 1188 sink_(GetEmit17(index, emit_ofs + 0)); 1189 break; 1190 } 1191 case 1: { 1192 begin_ = end_; 1193 buffer_len_ = 0; 1194 break; 1195 } 1196 } 1197 } RefillTo14()1198 bool RefillTo14() { 1199 switch (buffer_len_) { 1200 case 0: { 1201 return Read2to8Bytes(); 1202 } 1203 case 1: 1204 case 2: 1205 case 3: 1206 case 4: 1207 case 5: { 1208 return Read2to7Bytes(); 1209 } 1210 case 6: 1211 case 7: 1212 case 8: { 1213 return Read1to7Bytes(); 1214 } 1215 case 9: 1216 case 10: 1217 case 11: 1218 case 12: 1219 case 13: { 1220 return Read1to6Bytes(); 1221 } 1222 } 1223 return true; 1224 } Done5()1225 void Done5() { 1226 done_ = true; 1227 switch (end_ - begin_) { 1228 case 1: { 1229 Fill1(); 1230 break; 1231 } 1232 } 1233 switch (buffer_len_) { 1234 case 1: 1235 case 2: 1236 case 3: 1237 case 4: { 1238 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1239 return; 1240 } 1241 case 5: { 1242 const auto index = buffer_ & 31; 1243 const auto op = GetOp18(index); 1244 switch (op & 3) { 1245 case 0: { 1246 sink_(GetEmit18(index, (op >> 2) + 0)); 1247 break; 1248 } 1249 case 1: { 1250 ok_ = false; 1251 break; 1252 } 1253 } 1254 return; 1255 } 1256 case 6: { 1257 const auto index = buffer_ & 63; 1258 const auto op = GetOp19(index); 1259 switch (op & 3) { 1260 case 0: { 1261 ok_ = false; 1262 break; 1263 } 1264 case 1: { 1265 sink_(GetEmit19(index, (op >> 2) + 0)); 1266 break; 1267 } 1268 } 1269 return; 1270 } 1271 case 7: { 1272 const auto index = buffer_ & 127; 1273 const auto op = GetOp20(index); 1274 switch (op & 3) { 1275 case 0: { 1276 ok_ = false; 1277 break; 1278 } 1279 case 1: { 1280 sink_(GetEmit20(index, (op >> 2) + 0)); 1281 break; 1282 } 1283 } 1284 return; 1285 } 1286 case 8: { 1287 const auto index = buffer_ & 255; 1288 const auto op = GetOp21(index); 1289 switch (op & 3) { 1290 case 0: { 1291 ok_ = false; 1292 break; 1293 } 1294 case 1: { 1295 sink_(GetEmit21(index, (op >> 2) + 0)); 1296 break; 1297 } 1298 } 1299 return; 1300 } 1301 case 9: { 1302 const auto index = buffer_ & 511; 1303 const auto op = GetOp22(index); 1304 switch (op & 3) { 1305 case 0: { 1306 ok_ = false; 1307 break; 1308 } 1309 case 1: { 1310 sink_(GetEmit22(index, (op >> 2) + 0)); 1311 break; 1312 } 1313 } 1314 return; 1315 } 1316 case 10: { 1317 const auto index = buffer_ & 1023; 1318 const auto op = GetOp23(index); 1319 switch (op & 3) { 1320 case 0: { 1321 sink_(GetEmit23(index, (op >> 2) + 0)); 1322 sink_(GetEmit23(index, (op >> 2) + 1)); 1323 break; 1324 } 1325 case 1: { 1326 ok_ = false; 1327 break; 1328 } 1329 case 2: { 1330 sink_(GetEmit23(index, (op >> 2) + 0)); 1331 break; 1332 } 1333 } 1334 return; 1335 } 1336 case 11: { 1337 const auto index = buffer_ & 2047; 1338 const auto op = GetOp24(index); 1339 switch (op & 3) { 1340 case 0: { 1341 ok_ = false; 1342 break; 1343 } 1344 case 1: { 1345 sink_(GetEmit24(index, (op >> 2) + 0)); 1346 sink_(GetEmit24(index, (op >> 2) + 1)); 1347 break; 1348 } 1349 case 2: { 1350 sink_(GetEmit24(index, (op >> 2) + 0)); 1351 break; 1352 } 1353 } 1354 return; 1355 } 1356 case 12: { 1357 const auto index = buffer_ & 4095; 1358 const auto op = GetOp25(index); 1359 switch (op & 3) { 1360 case 0: { 1361 ok_ = false; 1362 break; 1363 } 1364 case 1: { 1365 sink_(GetEmit25(index, (op >> 2) + 0)); 1366 sink_(GetEmit25(index, (op >> 2) + 1)); 1367 break; 1368 } 1369 case 2: { 1370 sink_(GetEmit25(index, (op >> 2) + 0)); 1371 break; 1372 } 1373 } 1374 return; 1375 } 1376 case 13: { 1377 const auto index = buffer_ & 8191; 1378 const auto op = GetOp26(index); 1379 switch (op & 3) { 1380 case 0: { 1381 ok_ = false; 1382 break; 1383 } 1384 case 1: { 1385 sink_(GetEmit26(index, (op >> 2) + 0)); 1386 sink_(GetEmit26(index, (op >> 2) + 1)); 1387 break; 1388 } 1389 case 2: { 1390 sink_(GetEmit26(index, (op >> 2) + 0)); 1391 break; 1392 } 1393 } 1394 return; 1395 } 1396 case 0: { 1397 return; 1398 } 1399 } 1400 } 1401 F sink_; 1402 const uint8_t* begin_; 1403 const uint8_t* const end_; 1404 uint64_t buffer_ = 0; 1405 int buffer_len_ = 0; 1406 bool ok_ = true; 1407 bool done_ = false; 1408 }; 1409 } // namespace geometry_11_5_14 1410 } // namespace grpc_core 1411 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_5_14_H 1412