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_8_7_15_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_8_7_15_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_8_7_15 { 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 } GetOp1(size_t i)42 static inline uint64_t GetOp1(size_t i) { 43 return table1_0_inner_[table1_0_outer_[i]]; 44 } GetEmit1(size_t,size_t emit)45 static inline uint64_t GetEmit1(size_t, size_t emit) { 46 return table1_0_emit_[emit]; 47 } GetOp5(size_t i)48 static inline uint64_t GetOp5(size_t i) { 49 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 50 } GetEmit5(size_t,size_t emit)51 static inline uint64_t GetEmit5(size_t, size_t emit) { 52 return (emit < 2 ? (emit + 33) : ((emit - 2) + 40)); 53 } GetOp7(size_t i)54 static inline uint64_t GetOp7(size_t i) { 55 return (i < 2 ? (i) : ((i - 2) + 1)); 56 } GetEmit7(size_t,size_t emit)57 static inline uint64_t GetEmit7(size_t, size_t emit) { 58 return ((void)emit, 63); 59 } GetOp8(size_t i)60 static inline uint64_t GetOp8(size_t i) { 61 return table8_0_inner_[table8_0_outer_[i]]; 62 } GetEmit8(size_t,size_t emit)63 static inline uint64_t GetEmit8(size_t, size_t emit) { 64 return (emit < 2 ? (emit ? 39 : 63) : ((emit - 2) ? 124 : 43)); 65 } GetOp9(size_t i)66 static inline uint64_t GetOp9(size_t i) { 67 return table9_0_inner_[table9_0_outer_[i]]; 68 } GetEmit9(size_t,size_t emit)69 static inline uint64_t GetEmit9(size_t, size_t emit) { 70 return table9_0_emit_[emit]; 71 } GetOp10(size_t i)72 static inline uint64_t GetOp10(size_t i) { return table10_0_ops_[i]; } GetEmit10(size_t,size_t emit)73 static inline uint64_t GetEmit10(size_t, size_t emit) { 74 return table10_0_emit_[emit]; 75 } GetOp11(size_t i)76 static inline uint64_t GetOp11(size_t i) { return table11_0_ops_[i]; } GetEmit11(size_t,size_t emit)77 static inline uint64_t GetEmit11(size_t, size_t emit) { 78 return table11_0_emit_[emit]; 79 } GetOp6(size_t i)80 static inline uint64_t GetOp6(size_t i) { 81 return table6_ops_[i >> 6][i & 0x3f]; 82 } GetEmit6(size_t i,size_t emit)83 static inline uint64_t GetEmit6(size_t i, size_t emit) { 84 return table6_emit_[i >> 6][emit]; 85 } GetOp13(size_t i)86 static inline uint64_t GetOp13(size_t i) { 87 return table13_0_inner_[(i < 3 ? (i) : ((i - 3) / 12 + 3))]; 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) { return table14_0_ops_[i]; } GetEmit14(size_t,size_t emit)93 static inline uint64_t GetEmit14(size_t, size_t emit) { 94 return table14_0_emit_[emit]; 95 } GetOp15(size_t i)96 static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; } GetEmit15(size_t,size_t emit)97 static inline uint64_t GetEmit15(size_t, size_t emit) { 98 return table15_0_emit_[emit]; 99 } GetOp16(size_t i)100 static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; } GetEmit16(size_t,size_t emit)101 static inline uint64_t GetEmit16(size_t, size_t emit) { 102 return table16_0_emit_[emit]; 103 } GetOp17(size_t i)104 static inline uint64_t GetOp17(size_t i) { 105 return table17_ops_[i >> 7][i & 0x7f]; 106 } GetEmit17(size_t i,size_t emit)107 static inline uint64_t GetEmit17(size_t i, size_t emit) { 108 return table17_emit_[i >> 7][emit]; 109 } GetOp18(size_t i)110 static inline uint64_t GetOp18(size_t i) { 111 return table18_ops_[i >> 7][i & 0x7f]; 112 } GetEmit18(size_t i,size_t emit)113 static inline uint64_t GetEmit18(size_t i, size_t emit) { 114 return table18_emit_[i >> 7][emit]; 115 } GetOp19(size_t i)116 static inline uint64_t GetOp19(size_t i) { 117 return table19_ops_[i >> 6][i & 0x3f]; 118 } GetEmit19(size_t i,size_t emit)119 static inline uint64_t GetEmit19(size_t i, size_t emit) { 120 return table19_emit_[i >> 6][emit]; 121 } GetOp20(size_t i)122 static inline uint64_t GetOp20(size_t i) { 123 return table20_ops_[i >> 6][i & 0x3f]; 124 } GetEmit20(size_t i,size_t emit)125 static inline uint64_t GetEmit20(size_t i, size_t emit) { 126 return table20_emit_[i >> 6][emit]; 127 } GetOp21(size_t i)128 static inline uint64_t GetOp21(size_t i) { 129 return table21_ops_[i >> 6][i & 0x3f]; 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 >> 6][emit]; 133 } GetOp22(size_t i)134 static inline uint64_t GetOp22(size_t i) { 135 return table22_ops_[i >> 7][i & 0x7f]; 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 >> 7][emit]; 139 } GetOp23(size_t i)140 static inline uint64_t GetOp23(size_t i) { 141 return table23_ops_[i >> 7][i & 0x7f]; 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 >> 7][emit]; 145 } GetOp12(size_t i)146 static inline uint64_t GetOp12(size_t i) { 147 return table12_ops_[i >> 8][i & 0xff]; 148 } GetEmit12(size_t i,size_t emit)149 static inline uint64_t GetEmit12(size_t i, size_t emit) { 150 return table12_emit_[i >> 8][emit]; 151 } 152 153 private: 154 static const uint8_t table2_0_emit_[10]; 155 static const uint8_t table2_0_ops_[32]; 156 static const uint8_t table3_0_emit_[36]; 157 static const uint8_t table3_0_ops_[64]; 158 static const uint8_t table4_0_emit_[22]; 159 static const uint8_t table4_0_ops_[64]; 160 static const uint8_t table4_1_emit_[46]; 161 static const uint8_t table4_1_ops_[64]; 162 static const uint8_t* const table4_emit_[2]; 163 static const uint8_t* const table4_ops_[2]; 164 static const uint8_t table1_0_emit_[74]; 165 static const uint16_t table1_0_inner_[76]; 166 static const uint8_t table1_0_outer_[256]; 167 static const uint8_t table8_0_inner_[6]; 168 static const uint8_t table8_0_outer_[8]; 169 static const uint8_t table9_0_emit_[6]; 170 static const uint8_t table9_0_inner_[8]; 171 static const uint8_t table9_0_outer_[16]; 172 static const uint8_t table10_0_emit_[12]; 173 static const uint8_t table10_0_ops_[32]; 174 static const uint8_t table11_0_emit_[14]; 175 static const uint8_t table11_0_ops_[64]; 176 static const uint8_t table6_0_emit_[3]; 177 static const uint8_t table6_0_ops_[64]; 178 static const uint8_t table6_1_emit_[14]; 179 static const uint8_t table6_1_ops_[64]; 180 static const uint8_t* const table6_emit_[2]; 181 static const uint8_t* const table6_ops_[2]; 182 static const uint8_t table13_0_inner_[5]; 183 static const uint8_t table14_0_emit_[11]; 184 static const uint8_t table14_0_ops_[32]; 185 static const uint8_t table15_0_emit_[24]; 186 static const uint8_t table15_0_ops_[64]; 187 static const uint8_t table16_0_emit_[50]; 188 static const uint8_t table16_0_ops_[128]; 189 static const uint8_t table17_0_emit_[15]; 190 static const uint8_t table17_0_ops_[128]; 191 static const uint8_t table17_1_emit_[64]; 192 static const uint8_t table17_1_ops_[128]; 193 static const uint8_t* const table17_emit_[2]; 194 static const uint8_t* const table17_ops_[2]; 195 static const uint8_t table18_0_emit_[62]; 196 static const uint8_t table18_0_ops_[128]; 197 static const uint8_t table18_1_emit_[10]; 198 static const uint8_t table18_1_ops_[128]; 199 static const uint8_t table18_2_emit_[23]; 200 static const uint8_t table18_2_ops_[128]; 201 static const uint8_t table18_3_emit_[53]; 202 static const uint8_t table18_3_ops_[128]; 203 static const uint8_t* const table18_emit_[4]; 204 static const uint8_t* const table18_ops_[4]; 205 static const uint8_t table19_0_emit_[72]; 206 static const uint16_t table19_0_ops_[64]; 207 static const uint8_t table19_1_emit_[72]; 208 static const uint8_t table19_2_emit_[72]; 209 static const uint8_t table19_3_emit_[40]; 210 static const uint16_t table19_3_ops_[64]; 211 static const uint8_t table19_4_emit_[40]; 212 static const uint8_t table19_5_emit_[40]; 213 static const uint8_t table19_6_emit_[40]; 214 static const uint8_t table19_7_emit_[4]; 215 static const uint16_t table19_7_ops_[64]; 216 static const uint8_t table19_8_emit_[4]; 217 static const uint8_t table19_9_emit_[4]; 218 static const uint8_t table19_10_emit_[7]; 219 static const uint16_t table19_10_ops_[64]; 220 static const uint8_t table19_11_emit_[8]; 221 static const uint16_t table19_11_ops_[64]; 222 static const uint8_t table19_12_emit_[8]; 223 static const uint8_t table19_13_emit_[12]; 224 static const uint16_t table19_13_ops_[64]; 225 static const uint8_t table19_14_emit_[16]; 226 static const uint16_t table19_14_ops_[64]; 227 static const uint8_t table19_15_emit_[21]; 228 static const uint16_t table19_15_ops_[64]; 229 static const uint8_t* const table19_emit_[16]; 230 static const uint16_t* const table19_ops_[16]; 231 static const uint8_t table20_0_emit_[44]; 232 static const uint16_t table20_0_ops_[64]; 233 static const uint8_t table20_1_emit_[92]; 234 static const uint16_t table20_1_ops_[64]; 235 static const uint8_t table20_2_emit_[44]; 236 static const uint8_t table20_3_emit_[92]; 237 static const uint8_t table20_4_emit_[44]; 238 static const uint8_t table20_5_emit_[92]; 239 static const uint8_t table20_6_emit_[72]; 240 static const uint8_t table20_7_emit_[72]; 241 static const uint8_t table20_8_emit_[72]; 242 static const uint8_t table20_9_emit_[72]; 243 static const uint8_t table20_10_emit_[72]; 244 static const uint8_t table20_11_emit_[72]; 245 static const uint8_t table20_12_emit_[72]; 246 static const uint8_t table20_13_emit_[72]; 247 static const uint8_t table20_14_emit_[40]; 248 static const uint8_t table20_15_emit_[40]; 249 static const uint8_t table20_16_emit_[40]; 250 static const uint8_t table20_17_emit_[40]; 251 static const uint8_t table20_18_emit_[40]; 252 static const uint8_t table20_19_emit_[40]; 253 static const uint8_t table20_20_emit_[22]; 254 static const uint16_t table20_20_ops_[64]; 255 static const uint8_t table20_21_emit_[4]; 256 static const uint8_t table20_22_emit_[4]; 257 static const uint8_t table20_23_emit_[4]; 258 static const uint8_t table20_24_emit_[4]; 259 static const uint8_t table20_25_emit_[4]; 260 static const uint8_t table20_26_emit_[4]; 261 static const uint8_t table20_27_emit_[8]; 262 static const uint8_t table20_28_emit_[8]; 263 static const uint8_t table20_29_emit_[8]; 264 static const uint8_t table20_30_emit_[11]; 265 static const uint16_t table20_30_ops_[64]; 266 static const uint8_t table20_31_emit_[25]; 267 static const uint16_t table20_31_ops_[64]; 268 static const uint8_t* const table20_emit_[32]; 269 static const uint16_t* const table20_ops_[32]; 270 static const uint8_t table21_0_emit_[16]; 271 static const uint16_t table21_0_ops_[64]; 272 static const uint8_t table21_1_emit_[28]; 273 static const uint16_t table21_1_ops_[64]; 274 static const uint8_t table21_2_emit_[36]; 275 static const uint16_t table21_2_ops_[64]; 276 static const uint8_t table21_3_emit_[68]; 277 static const uint16_t table21_3_ops_[64]; 278 static const uint8_t table21_4_emit_[16]; 279 static const uint8_t table21_5_emit_[28]; 280 static const uint8_t table21_6_emit_[36]; 281 static const uint8_t table21_7_emit_[68]; 282 static const uint8_t table21_8_emit_[16]; 283 static const uint8_t table21_9_emit_[28]; 284 static const uint8_t table21_10_emit_[36]; 285 static const uint8_t table21_11_emit_[68]; 286 static const uint8_t table21_12_emit_[44]; 287 static const uint8_t table21_13_emit_[92]; 288 static const uint8_t table21_14_emit_[44]; 289 static const uint8_t table21_15_emit_[92]; 290 static const uint8_t table21_16_emit_[44]; 291 static const uint8_t table21_17_emit_[92]; 292 static const uint8_t table21_18_emit_[44]; 293 static const uint8_t table21_19_emit_[92]; 294 static const uint8_t table21_20_emit_[44]; 295 static const uint8_t table21_21_emit_[92]; 296 static const uint8_t table21_22_emit_[44]; 297 static const uint8_t table21_23_emit_[92]; 298 static const uint8_t table21_24_emit_[44]; 299 static const uint8_t table21_25_emit_[92]; 300 static const uint8_t table21_26_emit_[44]; 301 static const uint8_t table21_27_emit_[92]; 302 static const uint8_t table21_28_emit_[72]; 303 static const uint8_t table21_29_emit_[72]; 304 static const uint8_t table21_30_emit_[72]; 305 static const uint8_t table21_31_emit_[72]; 306 static const uint8_t table21_32_emit_[72]; 307 static const uint8_t table21_33_emit_[72]; 308 static const uint8_t table21_34_emit_[72]; 309 static const uint8_t table21_35_emit_[72]; 310 static const uint8_t table21_36_emit_[72]; 311 static const uint8_t table21_37_emit_[72]; 312 static const uint8_t table21_38_emit_[72]; 313 static const uint8_t table21_39_emit_[72]; 314 static const uint8_t table21_40_emit_[72]; 315 static const uint8_t table21_41_emit_[40]; 316 static const uint8_t table21_42_emit_[40]; 317 static const uint8_t table21_43_emit_[40]; 318 static const uint8_t table21_44_emit_[40]; 319 static const uint8_t table21_45_emit_[40]; 320 static const uint8_t table21_46_emit_[40]; 321 static const uint8_t table21_47_emit_[40]; 322 static const uint8_t table21_48_emit_[40]; 323 static const uint8_t table21_49_emit_[40]; 324 static const uint8_t table21_50_emit_[40]; 325 static const uint8_t table21_51_emit_[40]; 326 static const uint8_t table21_52_emit_[40]; 327 static const uint8_t table21_53_emit_[40]; 328 static const uint8_t table21_54_emit_[4]; 329 static const uint8_t table21_55_emit_[4]; 330 static const uint8_t table21_56_emit_[4]; 331 static const uint8_t table21_57_emit_[4]; 332 static const uint8_t table21_58_emit_[4]; 333 static const uint8_t table21_59_emit_[4]; 334 static const uint8_t table21_60_emit_[4]; 335 static const uint8_t table21_61_emit_[7]; 336 static const uint8_t table21_62_emit_[10]; 337 static const uint16_t table21_62_ops_[64]; 338 static const uint8_t table21_63_emit_[34]; 339 static const uint16_t table21_63_ops_[64]; 340 static const uint8_t* const table21_emit_[64]; 341 static const uint16_t* const table21_ops_[64]; 342 static const uint16_t table22_0_ops_[128]; 343 static const uint16_t table22_1_ops_[128]; 344 static const uint16_t table22_2_ops_[128]; 345 static const uint16_t table22_3_ops_[128]; 346 static const uint16_t table22_12_ops_[128]; 347 static const uint8_t table22_13_emit_[104]; 348 static const uint16_t table22_13_ops_[128]; 349 static const uint8_t table22_15_emit_[104]; 350 static const uint8_t table22_17_emit_[104]; 351 static const uint8_t table22_19_emit_[104]; 352 static const uint8_t table22_21_emit_[104]; 353 static const uint8_t table22_23_emit_[104]; 354 static const uint8_t table22_25_emit_[104]; 355 static const uint8_t table22_27_emit_[104]; 356 static const uint8_t table22_28_emit_[136]; 357 static const uint16_t table22_28_ops_[128]; 358 static const uint8_t table22_29_emit_[136]; 359 static const uint8_t table22_30_emit_[136]; 360 static const uint8_t table22_31_emit_[136]; 361 static const uint8_t table22_32_emit_[136]; 362 static const uint8_t table22_33_emit_[136]; 363 static const uint8_t table22_34_emit_[136]; 364 static const uint8_t table22_35_emit_[136]; 365 static const uint8_t table22_36_emit_[136]; 366 static const uint8_t table22_37_emit_[136]; 367 static const uint8_t table22_38_emit_[136]; 368 static const uint8_t table22_39_emit_[136]; 369 static const uint8_t table22_40_emit_[136]; 370 static const uint8_t table22_41_emit_[144]; 371 static const uint16_t table22_41_ops_[128]; 372 static const uint8_t table22_42_emit_[144]; 373 static const uint8_t table22_43_emit_[144]; 374 static const uint8_t table22_44_emit_[144]; 375 static const uint8_t table22_45_emit_[144]; 376 static const uint8_t table22_46_emit_[144]; 377 static const uint8_t table22_47_emit_[144]; 378 static const uint8_t table22_48_emit_[144]; 379 static const uint8_t table22_49_emit_[144]; 380 static const uint8_t table22_50_emit_[144]; 381 static const uint8_t table22_51_emit_[144]; 382 static const uint8_t table22_52_emit_[144]; 383 static const uint8_t table22_53_emit_[144]; 384 static const uint8_t table22_54_emit_[80]; 385 static const uint16_t table22_54_ops_[128]; 386 static const uint8_t table22_55_emit_[80]; 387 static const uint8_t table22_56_emit_[80]; 388 static const uint8_t table22_57_emit_[80]; 389 static const uint8_t table22_58_emit_[80]; 390 static const uint8_t table22_59_emit_[80]; 391 static const uint8_t table22_60_emit_[80]; 392 static const uint8_t table22_61_emit_[26]; 393 static const uint16_t table22_61_ops_[128]; 394 static const uint16_t table22_62_ops_[128]; 395 static const uint8_t table22_63_emit_[63]; 396 static const uint16_t table22_63_ops_[128]; 397 static const uint8_t* const table22_emit_[64]; 398 static const uint16_t* const table22_ops_[64]; 399 static const uint8_t table23_0_emit_[120]; 400 static const uint16_t table23_0_ops_[128]; 401 static const uint8_t table23_1_emit_[120]; 402 static const uint8_t table23_2_emit_[68]; 403 static const uint16_t table23_2_ops_[128]; 404 static const uint8_t table23_3_emit_[16]; 405 static const uint16_t table23_3_ops_[128]; 406 static const uint8_t table23_4_emit_[16]; 407 static const uint8_t table23_5_emit_[20]; 408 static const uint16_t table23_5_ops_[128]; 409 static const uint8_t table23_6_emit_[32]; 410 static const uint16_t table23_6_ops_[128]; 411 static const uint8_t table23_7_emit_[46]; 412 static const uint16_t table23_7_ops_[128]; 413 static const uint8_t table23_8_emit_[120]; 414 static const uint8_t table23_9_emit_[120]; 415 static const uint8_t table23_10_emit_[68]; 416 static const uint8_t table23_11_emit_[16]; 417 static const uint8_t table23_12_emit_[16]; 418 static const uint8_t table23_13_emit_[20]; 419 static const uint8_t table23_14_emit_[32]; 420 static const uint8_t table23_15_emit_[46]; 421 static const uint8_t table23_16_emit_[120]; 422 static const uint8_t table23_17_emit_[120]; 423 static const uint8_t table23_18_emit_[68]; 424 static const uint8_t table23_19_emit_[16]; 425 static const uint8_t table23_20_emit_[16]; 426 static const uint8_t table23_21_emit_[20]; 427 static const uint8_t table23_22_emit_[32]; 428 static const uint8_t table23_23_emit_[46]; 429 static const uint8_t table23_24_emit_[16]; 430 static const uint8_t table23_25_emit_[28]; 431 static const uint16_t table23_25_ops_[128]; 432 static const uint8_t table23_26_emit_[36]; 433 static const uint16_t table23_26_ops_[128]; 434 static const uint8_t table23_27_emit_[68]; 435 static const uint16_t table23_27_ops_[128]; 436 static const uint8_t table23_28_emit_[16]; 437 static const uint8_t table23_29_emit_[28]; 438 static const uint8_t table23_30_emit_[36]; 439 static const uint8_t table23_31_emit_[68]; 440 static const uint8_t table23_32_emit_[16]; 441 static const uint8_t table23_33_emit_[28]; 442 static const uint8_t table23_34_emit_[36]; 443 static const uint8_t table23_35_emit_[68]; 444 static const uint8_t table23_36_emit_[16]; 445 static const uint8_t table23_37_emit_[28]; 446 static const uint8_t table23_38_emit_[36]; 447 static const uint8_t table23_39_emit_[68]; 448 static const uint8_t table23_40_emit_[16]; 449 static const uint8_t table23_41_emit_[28]; 450 static const uint8_t table23_42_emit_[36]; 451 static const uint8_t table23_43_emit_[68]; 452 static const uint8_t table23_44_emit_[16]; 453 static const uint8_t table23_45_emit_[28]; 454 static const uint8_t table23_46_emit_[36]; 455 static const uint8_t table23_47_emit_[68]; 456 static const uint8_t table23_48_emit_[16]; 457 static const uint8_t table23_49_emit_[28]; 458 static const uint8_t table23_50_emit_[36]; 459 static const uint8_t table23_51_emit_[68]; 460 static const uint8_t table23_52_emit_[16]; 461 static const uint8_t table23_53_emit_[28]; 462 static const uint8_t table23_54_emit_[36]; 463 static const uint8_t table23_55_emit_[68]; 464 static const uint8_t table23_56_emit_[44]; 465 static const uint16_t table23_56_ops_[128]; 466 static const uint8_t table23_57_emit_[104]; 467 static const uint16_t table23_57_ops_[128]; 468 static const uint8_t table23_58_emit_[44]; 469 static const uint8_t table23_59_emit_[104]; 470 static const uint8_t table23_60_emit_[44]; 471 static const uint8_t table23_61_emit_[104]; 472 static const uint8_t table23_62_emit_[44]; 473 static const uint8_t table23_63_emit_[104]; 474 static const uint8_t table23_64_emit_[44]; 475 static const uint8_t table23_65_emit_[104]; 476 static const uint8_t table23_66_emit_[44]; 477 static const uint8_t table23_67_emit_[104]; 478 static const uint8_t table23_68_emit_[44]; 479 static const uint8_t table23_69_emit_[104]; 480 static const uint8_t table23_70_emit_[44]; 481 static const uint8_t table23_71_emit_[104]; 482 static const uint8_t table23_72_emit_[44]; 483 static const uint8_t table23_73_emit_[104]; 484 static const uint8_t table23_74_emit_[44]; 485 static const uint8_t table23_75_emit_[104]; 486 static const uint8_t table23_76_emit_[44]; 487 static const uint8_t table23_77_emit_[104]; 488 static const uint8_t table23_78_emit_[44]; 489 static const uint8_t table23_79_emit_[104]; 490 static const uint8_t table23_80_emit_[44]; 491 static const uint8_t table23_81_emit_[104]; 492 static const uint8_t table23_82_emit_[136]; 493 static const uint16_t table23_82_ops_[128]; 494 static const uint8_t table23_83_emit_[136]; 495 static const uint8_t table23_84_emit_[136]; 496 static const uint8_t table23_85_emit_[136]; 497 static const uint8_t table23_86_emit_[136]; 498 static const uint8_t table23_87_emit_[136]; 499 static const uint8_t table23_88_emit_[136]; 500 static const uint8_t table23_89_emit_[136]; 501 static const uint8_t table23_90_emit_[136]; 502 static const uint8_t table23_91_emit_[136]; 503 static const uint8_t table23_92_emit_[136]; 504 static const uint8_t table23_93_emit_[136]; 505 static const uint8_t table23_94_emit_[136]; 506 static const uint8_t table23_95_emit_[136]; 507 static const uint8_t table23_96_emit_[136]; 508 static const uint8_t table23_97_emit_[136]; 509 static const uint8_t table23_98_emit_[136]; 510 static const uint8_t table23_99_emit_[136]; 511 static const uint8_t table23_100_emit_[136]; 512 static const uint8_t table23_101_emit_[136]; 513 static const uint8_t table23_102_emit_[136]; 514 static const uint8_t table23_103_emit_[136]; 515 static const uint8_t table23_104_emit_[136]; 516 static const uint8_t table23_105_emit_[136]; 517 static const uint8_t table23_106_emit_[136]; 518 static const uint8_t table23_107_emit_[136]; 519 static const uint8_t table23_108_emit_[144]; 520 static const uint16_t table23_108_ops_[128]; 521 static const uint8_t table23_109_emit_[144]; 522 static const uint8_t table23_110_emit_[144]; 523 static const uint8_t table23_111_emit_[144]; 524 static const uint8_t table23_112_emit_[144]; 525 static const uint8_t table23_113_emit_[144]; 526 static const uint8_t table23_114_emit_[144]; 527 static const uint8_t table23_115_emit_[144]; 528 static const uint8_t table23_116_emit_[144]; 529 static const uint8_t table23_117_emit_[144]; 530 static const uint8_t table23_118_emit_[144]; 531 static const uint8_t table23_119_emit_[144]; 532 static const uint8_t table23_120_emit_[144]; 533 static const uint8_t table23_121_emit_[144]; 534 static const uint8_t table23_122_emit_[112]; 535 static const uint16_t table23_122_ops_[128]; 536 static const uint8_t table23_123_emit_[80]; 537 static const uint16_t table23_123_ops_[128]; 538 static const uint8_t table23_124_emit_[80]; 539 static const uint8_t table23_125_emit_[44]; 540 static const uint16_t table23_125_ops_[128]; 541 static const uint8_t table23_126_emit_[17]; 542 static const uint16_t table23_126_ops_[128]; 543 static const uint8_t table23_127_emit_[46]; 544 static const uint16_t table23_127_ops_[128]; 545 static const uint8_t* const table23_emit_[128]; 546 static const uint16_t* const table23_ops_[128]; 547 static const uint8_t table12_0_emit_[1]; 548 static const uint16_t table12_0_ops_[256]; 549 static const uint8_t table12_8_emit_[1]; 550 static const uint8_t table12_16_emit_[1]; 551 static const uint8_t table12_24_emit_[1]; 552 static const uint16_t table12_24_ops_[256]; 553 static const uint8_t table12_28_emit_[1]; 554 static const uint8_t table12_32_emit_[1]; 555 static const uint8_t table12_36_emit_[1]; 556 static const uint8_t table12_40_emit_[1]; 557 static const uint8_t table12_44_emit_[1]; 558 static const uint8_t table12_48_emit_[1]; 559 static const uint8_t table12_52_emit_[1]; 560 static const uint8_t table12_56_emit_[1]; 561 static const uint16_t table12_56_ops_[256]; 562 static const uint8_t table12_58_emit_[1]; 563 static const uint8_t table12_60_emit_[1]; 564 static const uint8_t table12_62_emit_[1]; 565 static const uint8_t table12_64_emit_[1]; 566 static const uint8_t table12_66_emit_[1]; 567 static const uint8_t table12_68_emit_[1]; 568 static const uint8_t table12_70_emit_[1]; 569 static const uint8_t table12_72_emit_[1]; 570 static const uint8_t table12_74_emit_[1]; 571 static const uint8_t table12_76_emit_[1]; 572 static const uint8_t table12_78_emit_[1]; 573 static const uint8_t table12_80_emit_[1]; 574 static const uint8_t table12_82_emit_[1]; 575 static const uint16_t table12_82_ops_[256]; 576 static const uint8_t table12_83_emit_[1]; 577 static const uint8_t table12_84_emit_[1]; 578 static const uint8_t table12_85_emit_[1]; 579 static const uint8_t table12_86_emit_[1]; 580 static const uint8_t table12_87_emit_[1]; 581 static const uint8_t table12_88_emit_[1]; 582 static const uint8_t table12_89_emit_[1]; 583 static const uint8_t table12_90_emit_[1]; 584 static const uint8_t table12_91_emit_[1]; 585 static const uint8_t table12_92_emit_[1]; 586 static const uint8_t table12_93_emit_[1]; 587 static const uint8_t table12_94_emit_[1]; 588 static const uint8_t table12_95_emit_[1]; 589 static const uint8_t table12_96_emit_[1]; 590 static const uint8_t table12_97_emit_[1]; 591 static const uint8_t table12_98_emit_[1]; 592 static const uint8_t table12_99_emit_[1]; 593 static const uint8_t table12_100_emit_[1]; 594 static const uint8_t table12_101_emit_[1]; 595 static const uint8_t table12_102_emit_[1]; 596 static const uint8_t table12_103_emit_[1]; 597 static const uint8_t table12_104_emit_[1]; 598 static const uint8_t table12_105_emit_[1]; 599 static const uint8_t table12_106_emit_[1]; 600 static const uint8_t table12_107_emit_[1]; 601 static const uint8_t table12_108_emit_[2]; 602 static const uint16_t table12_108_ops_[256]; 603 static const uint8_t table12_109_emit_[2]; 604 static const uint8_t table12_110_emit_[2]; 605 static const uint8_t table12_111_emit_[2]; 606 static const uint8_t table12_112_emit_[2]; 607 static const uint8_t table12_113_emit_[2]; 608 static const uint8_t table12_114_emit_[2]; 609 static const uint8_t table12_115_emit_[2]; 610 static const uint8_t table12_116_emit_[2]; 611 static const uint8_t table12_117_emit_[2]; 612 static const uint8_t table12_118_emit_[2]; 613 static const uint8_t table12_119_emit_[2]; 614 static const uint8_t table12_120_emit_[2]; 615 static const uint8_t table12_121_emit_[2]; 616 static const uint8_t table12_122_emit_[3]; 617 static const uint16_t table12_122_ops_[256]; 618 static const uint8_t table12_123_emit_[4]; 619 static const uint16_t table12_123_ops_[256]; 620 static const uint8_t table12_124_emit_[4]; 621 static const uint8_t table12_125_emit_[6]; 622 static const uint16_t table12_125_ops_[256]; 623 static const uint16_t table12_126_ops_[256]; 624 static const uint8_t table12_127_emit_[49]; 625 static const uint16_t table12_127_ops_[256]; 626 static const uint8_t* const table12_emit_[128]; 627 static const uint16_t* const table12_ops_[128]; 628 }; 629 template <typename F> 630 class HuffDecoder : public HuffDecoderCommon { 631 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)632 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 633 : sink_(sink), begin_(begin), end_(end) {} Run()634 bool Run() { 635 while (!done_) { 636 if (!RefillTo8()) { 637 Done0(); 638 break; 639 } 640 const auto index = (buffer_ >> (buffer_len_ - 8)) & 0xff; 641 const auto op = GetOp1(index); 642 const int consumed = op & 15; 643 buffer_len_ -= consumed; 644 const auto emit_ofs = op >> 6; 645 switch ((op >> 4) & 3) { 646 case 0: { 647 sink_(GetEmit1(index, emit_ofs + 0)); 648 break; 649 } 650 case 1: { 651 DecodeStep0(); 652 break; 653 } 654 case 2: { 655 DecodeStep1(); 656 break; 657 } 658 } 659 } 660 return ok_; 661 } 662 663 private: RefillTo8()664 bool RefillTo8() { 665 switch (buffer_len_) { 666 case 0: { 667 return Read1to8Bytes(); 668 } 669 case 1: 670 case 2: 671 case 3: 672 case 4: 673 case 5: 674 case 6: 675 case 7: { 676 return Read1to7Bytes(); 677 } 678 } 679 return true; 680 } Read1to8Bytes()681 bool Read1to8Bytes() { 682 switch (end_ - begin_) { 683 case 0: { 684 return false; 685 } 686 case 1: { 687 Fill1(); 688 return true; 689 } 690 case 2: { 691 Fill2(); 692 return true; 693 } 694 case 3: { 695 Fill3(); 696 return true; 697 } 698 case 4: { 699 Fill4(); 700 return true; 701 } 702 case 5: { 703 Fill5(); 704 return true; 705 } 706 case 6: { 707 Fill6(); 708 return true; 709 } 710 case 7: { 711 Fill7(); 712 return true; 713 } 714 default: { 715 Fill8(); 716 return true; 717 } 718 } 719 } Fill1()720 void Fill1() { 721 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 722 begin_ += 1; 723 buffer_len_ += 8; 724 } Fill2()725 void Fill2() { 726 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 727 (static_cast<uint64_t>(begin_[1]) << 0); 728 begin_ += 2; 729 buffer_len_ += 16; 730 } Fill3()731 void Fill3() { 732 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 733 (static_cast<uint64_t>(begin_[1]) << 8) | 734 (static_cast<uint64_t>(begin_[2]) << 0); 735 begin_ += 3; 736 buffer_len_ += 24; 737 } Fill4()738 void Fill4() { 739 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 740 (static_cast<uint64_t>(begin_[1]) << 16) | 741 (static_cast<uint64_t>(begin_[2]) << 8) | 742 (static_cast<uint64_t>(begin_[3]) << 0); 743 begin_ += 4; 744 buffer_len_ += 32; 745 } Fill5()746 void Fill5() { 747 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 748 (static_cast<uint64_t>(begin_[1]) << 24) | 749 (static_cast<uint64_t>(begin_[2]) << 16) | 750 (static_cast<uint64_t>(begin_[3]) << 8) | 751 (static_cast<uint64_t>(begin_[4]) << 0); 752 begin_ += 5; 753 buffer_len_ += 40; 754 } Fill6()755 void Fill6() { 756 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 757 (static_cast<uint64_t>(begin_[1]) << 32) | 758 (static_cast<uint64_t>(begin_[2]) << 24) | 759 (static_cast<uint64_t>(begin_[3]) << 16) | 760 (static_cast<uint64_t>(begin_[4]) << 8) | 761 (static_cast<uint64_t>(begin_[5]) << 0); 762 begin_ += 6; 763 buffer_len_ += 48; 764 } Fill7()765 void Fill7() { 766 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 767 (static_cast<uint64_t>(begin_[1]) << 40) | 768 (static_cast<uint64_t>(begin_[2]) << 32) | 769 (static_cast<uint64_t>(begin_[3]) << 24) | 770 (static_cast<uint64_t>(begin_[4]) << 16) | 771 (static_cast<uint64_t>(begin_[5]) << 8) | 772 (static_cast<uint64_t>(begin_[6]) << 0); 773 begin_ += 7; 774 buffer_len_ += 56; 775 } Fill8()776 void Fill8() { 777 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 778 (static_cast<uint64_t>(begin_[1]) << 48) | 779 (static_cast<uint64_t>(begin_[2]) << 40) | 780 (static_cast<uint64_t>(begin_[3]) << 32) | 781 (static_cast<uint64_t>(begin_[4]) << 24) | 782 (static_cast<uint64_t>(begin_[5]) << 16) | 783 (static_cast<uint64_t>(begin_[6]) << 8) | 784 (static_cast<uint64_t>(begin_[7]) << 0); 785 begin_ += 8; 786 buffer_len_ += 64; 787 } Read1to7Bytes()788 bool Read1to7Bytes() { 789 switch (end_ - begin_) { 790 case 0: { 791 return false; 792 } 793 case 1: { 794 Fill1(); 795 return true; 796 } 797 case 2: { 798 Fill2(); 799 return true; 800 } 801 case 3: { 802 Fill3(); 803 return true; 804 } 805 case 4: { 806 Fill4(); 807 return true; 808 } 809 case 5: { 810 Fill5(); 811 return true; 812 } 813 case 6: { 814 Fill6(); 815 return true; 816 } 817 default: { 818 Fill7(); 819 return true; 820 } 821 } 822 } Done0()823 void Done0() { 824 done_ = true; 825 switch (end_ - begin_) {} 826 switch (buffer_len_) { 827 case 1: 828 case 2: 829 case 3: 830 case 4: { 831 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 832 return; 833 } 834 case 5: { 835 const auto index = buffer_ & 31; 836 const auto op = GetOp2(index); 837 switch (op & 3) { 838 case 0: { 839 sink_(GetEmit2(index, (op >> 2) + 0)); 840 break; 841 } 842 case 1: { 843 ok_ = false; 844 break; 845 } 846 } 847 return; 848 } 849 case 6: { 850 const auto index = buffer_ & 63; 851 const auto op = GetOp3(index); 852 switch (op & 3) { 853 case 0: { 854 ok_ = false; 855 break; 856 } 857 case 1: { 858 sink_(GetEmit3(index, (op >> 2) + 0)); 859 break; 860 } 861 } 862 return; 863 } 864 case 7: { 865 const auto index = buffer_ & 127; 866 const auto op = GetOp4(index); 867 switch (op & 3) { 868 case 0: { 869 ok_ = false; 870 break; 871 } 872 case 1: { 873 sink_(GetEmit4(index, (op >> 2) + 0)); 874 break; 875 } 876 } 877 return; 878 } 879 case 0: { 880 return; 881 } 882 } 883 } DecodeStep0()884 void DecodeStep0() { 885 if (!RefillTo2()) { 886 Done1(); 887 return; 888 } 889 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 890 const auto op = GetOp5(index); 891 const int consumed = op & 3; 892 buffer_len_ -= consumed; 893 const auto emit_ofs = op >> 2; 894 sink_(GetEmit5(index, emit_ofs + 0)); 895 } RefillTo2()896 bool RefillTo2() { 897 switch (buffer_len_) { 898 case 0: { 899 return Read1to8Bytes(); 900 } 901 case 1: { 902 return Read1to7Bytes(); 903 } 904 } 905 return true; 906 } Done1()907 void Done1() { 908 done_ = true; 909 switch (buffer_len_) { 910 case 1: 911 case 0: { 912 ok_ = false; 913 return; 914 } 915 } 916 } DecodeStep1()917 void DecodeStep1() { 918 if (!RefillTo7()) { 919 Done2(); 920 return; 921 } 922 const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f; 923 const auto op = GetOp6(index); 924 const int consumed = op & 7; 925 buffer_len_ -= consumed; 926 const auto emit_ofs = op >> 4; 927 switch ((op >> 3) & 1) { 928 case 0: { 929 sink_(GetEmit6(index, emit_ofs + 0)); 930 break; 931 } 932 case 1: { 933 DecodeStep2(); 934 break; 935 } 936 } 937 } RefillTo7()938 bool RefillTo7() { 939 switch (buffer_len_) { 940 case 0: { 941 return Read1to8Bytes(); 942 } 943 case 1: 944 case 2: 945 case 3: 946 case 4: 947 case 5: 948 case 6: { 949 return Read1to7Bytes(); 950 } 951 } 952 return true; 953 } Done2()954 void Done2() { 955 done_ = true; 956 switch (buffer_len_) { 957 case 1: { 958 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 959 return; 960 } 961 case 2: { 962 const auto index = buffer_ & 3; 963 const auto op = GetOp7(index); 964 switch (op & 3) { 965 case 0: { 966 sink_(GetEmit7(index, (op >> 2) + 0)); 967 break; 968 } 969 case 1: { 970 ok_ = false; 971 break; 972 } 973 } 974 return; 975 } 976 case 3: { 977 const auto index = buffer_ & 7; 978 const auto op = GetOp8(index); 979 switch (op & 3) { 980 case 0: { 981 ok_ = false; 982 break; 983 } 984 case 1: { 985 sink_(GetEmit8(index, (op >> 2) + 0)); 986 break; 987 } 988 } 989 return; 990 } 991 case 4: { 992 const auto index = buffer_ & 15; 993 const auto op = GetOp9(index); 994 switch (op & 3) { 995 case 0: { 996 ok_ = false; 997 break; 998 } 999 case 1: { 1000 sink_(GetEmit9(index, (op >> 2) + 0)); 1001 break; 1002 } 1003 } 1004 return; 1005 } 1006 case 5: { 1007 const auto index = buffer_ & 31; 1008 const auto op = GetOp10(index); 1009 switch (op & 3) { 1010 case 0: { 1011 ok_ = false; 1012 break; 1013 } 1014 case 1: { 1015 sink_(GetEmit10(index, (op >> 2) + 0)); 1016 break; 1017 } 1018 } 1019 return; 1020 } 1021 case 6: { 1022 const auto index = buffer_ & 63; 1023 const auto op = GetOp11(index); 1024 switch (op & 3) { 1025 case 0: { 1026 ok_ = false; 1027 break; 1028 } 1029 case 1: { 1030 sink_(GetEmit11(index, (op >> 2) + 0)); 1031 break; 1032 } 1033 } 1034 return; 1035 } 1036 case 0: { 1037 return; 1038 } 1039 } 1040 } DecodeStep2()1041 void DecodeStep2() { 1042 if (!RefillTo15()) { 1043 Done3(); 1044 return; 1045 } 1046 const auto index = (buffer_ >> (buffer_len_ - 15)) & 0x7fff; 1047 const auto op = GetOp12(index); 1048 const int consumed = op & 15; 1049 buffer_len_ -= consumed; 1050 const auto emit_ofs = op >> 5; 1051 switch ((op >> 4) & 1) { 1052 case 0: { 1053 sink_(GetEmit12(index, emit_ofs + 0)); 1054 break; 1055 } 1056 case 1: { 1057 begin_ = end_; 1058 buffer_len_ = 0; 1059 break; 1060 } 1061 } 1062 } RefillTo15()1063 bool RefillTo15() { 1064 switch (buffer_len_) { 1065 case 0: { 1066 return Read2to8Bytes(); 1067 } 1068 case 1: 1069 case 2: 1070 case 3: 1071 case 4: 1072 case 5: 1073 case 6: { 1074 return Read2to7Bytes(); 1075 } 1076 case 7: 1077 case 8: { 1078 return Read1to7Bytes(); 1079 } 1080 case 9: 1081 case 10: 1082 case 11: 1083 case 12: 1084 case 13: 1085 case 14: { 1086 return Read1to6Bytes(); 1087 } 1088 } 1089 return true; 1090 } Read2to8Bytes()1091 bool Read2to8Bytes() { 1092 switch (end_ - begin_) { 1093 case 0: 1094 case 1: { 1095 return false; 1096 } 1097 case 2: { 1098 Fill2(); 1099 return true; 1100 } 1101 case 3: { 1102 Fill3(); 1103 return true; 1104 } 1105 case 4: { 1106 Fill4(); 1107 return true; 1108 } 1109 case 5: { 1110 Fill5(); 1111 return true; 1112 } 1113 case 6: { 1114 Fill6(); 1115 return true; 1116 } 1117 case 7: { 1118 Fill7(); 1119 return true; 1120 } 1121 default: { 1122 Fill8(); 1123 return true; 1124 } 1125 } 1126 } Read2to7Bytes()1127 bool Read2to7Bytes() { 1128 switch (end_ - begin_) { 1129 case 0: 1130 case 1: { 1131 return false; 1132 } 1133 case 2: { 1134 Fill2(); 1135 return true; 1136 } 1137 case 3: { 1138 Fill3(); 1139 return true; 1140 } 1141 case 4: { 1142 Fill4(); 1143 return true; 1144 } 1145 case 5: { 1146 Fill5(); 1147 return true; 1148 } 1149 case 6: { 1150 Fill6(); 1151 return true; 1152 } 1153 default: { 1154 Fill7(); 1155 return true; 1156 } 1157 } 1158 } Read1to6Bytes()1159 bool Read1to6Bytes() { 1160 switch (end_ - begin_) { 1161 case 0: { 1162 return false; 1163 } 1164 case 1: { 1165 Fill1(); 1166 return true; 1167 } 1168 case 2: { 1169 Fill2(); 1170 return true; 1171 } 1172 case 3: { 1173 Fill3(); 1174 return true; 1175 } 1176 case 4: { 1177 Fill4(); 1178 return true; 1179 } 1180 case 5: { 1181 Fill5(); 1182 return true; 1183 } 1184 default: { 1185 Fill6(); 1186 return true; 1187 } 1188 } 1189 } Done3()1190 void Done3() { 1191 done_ = true; 1192 switch (end_ - begin_) { 1193 case 1: { 1194 Fill1(); 1195 break; 1196 } 1197 } 1198 switch (buffer_len_) { 1199 case 1: 1200 case 2: 1201 case 3: { 1202 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1203 return; 1204 } 1205 case 4: { 1206 const auto index = buffer_ & 15; 1207 const auto op = GetOp13(index); 1208 switch (op & 3) { 1209 case 0: { 1210 sink_(GetEmit13(index, (op >> 2) + 0)); 1211 break; 1212 } 1213 case 1: { 1214 ok_ = false; 1215 break; 1216 } 1217 } 1218 return; 1219 } 1220 case 5: { 1221 const auto index = buffer_ & 31; 1222 const auto op = GetOp14(index); 1223 switch (op & 3) { 1224 case 0: { 1225 ok_ = false; 1226 break; 1227 } 1228 case 1: { 1229 sink_(GetEmit14(index, (op >> 2) + 0)); 1230 break; 1231 } 1232 } 1233 return; 1234 } 1235 case 6: { 1236 const auto index = buffer_ & 63; 1237 const auto op = GetOp15(index); 1238 switch (op & 3) { 1239 case 0: { 1240 ok_ = false; 1241 break; 1242 } 1243 case 1: { 1244 sink_(GetEmit15(index, (op >> 2) + 0)); 1245 break; 1246 } 1247 } 1248 return; 1249 } 1250 case 7: { 1251 const auto index = buffer_ & 127; 1252 const auto op = GetOp16(index); 1253 switch (op & 3) { 1254 case 0: { 1255 ok_ = false; 1256 break; 1257 } 1258 case 1: { 1259 sink_(GetEmit16(index, (op >> 2) + 0)); 1260 break; 1261 } 1262 } 1263 return; 1264 } 1265 case 8: { 1266 const auto index = buffer_ & 255; 1267 const auto op = GetOp17(index); 1268 switch (op & 3) { 1269 case 0: { 1270 ok_ = false; 1271 break; 1272 } 1273 case 1: { 1274 sink_(GetEmit17(index, (op >> 2) + 0)); 1275 break; 1276 } 1277 } 1278 return; 1279 } 1280 case 9: { 1281 const auto index = buffer_ & 511; 1282 const auto op = GetOp18(index); 1283 switch (op & 3) { 1284 case 0: { 1285 sink_(GetEmit18(index, (op >> 2) + 0)); 1286 sink_(GetEmit18(index, (op >> 2) + 1)); 1287 break; 1288 } 1289 case 1: { 1290 ok_ = false; 1291 break; 1292 } 1293 case 2: { 1294 sink_(GetEmit18(index, (op >> 2) + 0)); 1295 break; 1296 } 1297 } 1298 return; 1299 } 1300 case 10: { 1301 const auto index = buffer_ & 1023; 1302 const auto op = GetOp19(index); 1303 switch (op & 3) { 1304 case 0: { 1305 ok_ = false; 1306 break; 1307 } 1308 case 1: { 1309 sink_(GetEmit19(index, (op >> 2) + 0)); 1310 sink_(GetEmit19(index, (op >> 2) + 1)); 1311 break; 1312 } 1313 case 2: { 1314 sink_(GetEmit19(index, (op >> 2) + 0)); 1315 break; 1316 } 1317 } 1318 return; 1319 } 1320 case 11: { 1321 const auto index = buffer_ & 2047; 1322 const auto op = GetOp20(index); 1323 switch (op & 3) { 1324 case 0: { 1325 ok_ = false; 1326 break; 1327 } 1328 case 1: { 1329 sink_(GetEmit20(index, (op >> 2) + 0)); 1330 sink_(GetEmit20(index, (op >> 2) + 1)); 1331 break; 1332 } 1333 case 2: { 1334 sink_(GetEmit20(index, (op >> 2) + 0)); 1335 break; 1336 } 1337 } 1338 return; 1339 } 1340 case 12: { 1341 const auto index = buffer_ & 4095; 1342 const auto op = GetOp21(index); 1343 switch (op & 3) { 1344 case 0: { 1345 ok_ = false; 1346 break; 1347 } 1348 case 1: { 1349 sink_(GetEmit21(index, (op >> 2) + 0)); 1350 sink_(GetEmit21(index, (op >> 2) + 1)); 1351 break; 1352 } 1353 case 2: { 1354 sink_(GetEmit21(index, (op >> 2) + 0)); 1355 break; 1356 } 1357 } 1358 return; 1359 } 1360 case 13: { 1361 const auto index = buffer_ & 8191; 1362 const auto op = GetOp22(index); 1363 switch (op & 3) { 1364 case 0: { 1365 ok_ = false; 1366 break; 1367 } 1368 case 1: { 1369 sink_(GetEmit22(index, (op >> 2) + 0)); 1370 sink_(GetEmit22(index, (op >> 2) + 1)); 1371 break; 1372 } 1373 case 2: { 1374 sink_(GetEmit22(index, (op >> 2) + 0)); 1375 break; 1376 } 1377 } 1378 return; 1379 } 1380 case 14: { 1381 const auto index = buffer_ & 16383; 1382 const auto op = GetOp23(index); 1383 switch (op & 7) { 1384 case 0: { 1385 sink_(GetEmit23(index, (op >> 3) + 0)); 1386 sink_(GetEmit23(index, (op >> 3) + 1)); 1387 sink_(GetEmit23(index, (op >> 3) + 2)); 1388 break; 1389 } 1390 case 1: { 1391 ok_ = false; 1392 break; 1393 } 1394 case 2: { 1395 sink_(GetEmit23(index, (op >> 3) + 0)); 1396 sink_(GetEmit23(index, (op >> 3) + 1)); 1397 break; 1398 } 1399 case 3: { 1400 sink_(GetEmit23(index, (op >> 3) + 0)); 1401 break; 1402 } 1403 } 1404 return; 1405 } 1406 case 0: { 1407 return; 1408 } 1409 } 1410 } 1411 F sink_; 1412 const uint8_t* begin_; 1413 const uint8_t* const end_; 1414 uint64_t buffer_ = 0; 1415 int buffer_len_ = 0; 1416 bool ok_ = true; 1417 bool done_ = false; 1418 }; 1419 } // namespace geometry_8_7_15 1420 } // namespace grpc_core 1421 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_8_7_15_H 1422