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_7_8_15_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_8_15_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_7_8_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 } GetOp1(size_t i)36 static inline uint64_t GetOp1(size_t i) { 37 return table1_0_inner_[table1_0_outer_[i]]; 38 } GetEmit1(size_t,size_t emit)39 static inline uint64_t GetEmit1(size_t, size_t emit) { 40 return table1_0_emit_[emit]; 41 } GetOp4(size_t i)42 static inline uint64_t GetOp4(size_t i) { return i ? 3 : 1; } GetEmit4(size_t,size_t emit)43 static inline uint64_t GetEmit4(size_t, size_t emit) { 44 return emit ? 42 : 38; 45 } GetOp5(size_t i)46 static inline uint64_t GetOp5(size_t i) { return i ? 3 : 1; } GetEmit5(size_t,size_t emit)47 static inline uint64_t GetEmit5(size_t, size_t emit) { 48 return emit ? 59 : 44; 49 } GetOp6(size_t i)50 static inline uint64_t GetOp6(size_t i) { return i ? 3 : 1; } GetEmit6(size_t,size_t emit)51 static inline uint64_t GetEmit6(size_t, size_t emit) { 52 return emit ? 90 : 88; 53 } GetOp8(size_t i)54 static inline uint64_t GetOp8(size_t i) { 55 return table8_0_inner_[(i < 6 ? (i) : ((i - 6) + 5))]; 56 } GetEmit8(size_t,size_t emit)57 static inline uint64_t GetEmit8(size_t, size_t emit) { 58 return table8_0_emit_[emit]; 59 } GetOp9(size_t i)60 static inline uint64_t GetOp9(size_t i) { 61 return table9_0_inner_[table9_0_outer_[i]]; 62 } GetEmit9(size_t,size_t emit)63 static inline uint64_t GetEmit9(size_t, size_t emit) { 64 return table9_0_emit_[emit]; 65 } GetOp10(size_t i)66 static inline uint64_t GetOp10(size_t i) { return table10_0_ops_[i]; } GetEmit10(size_t,size_t emit)67 static inline uint64_t GetEmit10(size_t, size_t emit) { 68 return table10_0_emit_[emit]; 69 } GetOp11(size_t i)70 static inline uint64_t GetOp11(size_t i) { return table11_0_ops_[i]; } GetEmit11(size_t,size_t emit)71 static inline uint64_t GetEmit11(size_t, size_t emit) { 72 return table11_0_emit_[emit]; 73 } GetOp12(size_t i)74 static inline uint64_t GetOp12(size_t i) { return table12_0_ops_[i]; } GetEmit12(size_t,size_t emit)75 static inline uint64_t GetEmit12(size_t, size_t emit) { 76 return table12_0_emit_[emit]; 77 } GetOp7(size_t i)78 static inline uint64_t GetOp7(size_t i) { 79 return table7_ops_[i >> 6][i & 0x3f]; 80 } GetEmit7(size_t i,size_t emit)81 static inline uint64_t GetEmit7(size_t i, size_t emit) { 82 return table7_emit_[i >> 6][emit]; 83 } GetOp14(size_t i)84 static inline uint64_t GetOp14(size_t i) { 85 return table14_0_inner_[(i < 3 ? (i) : ((i - 3) / 12 + 3))]; 86 } GetEmit14(size_t,size_t emit)87 static inline uint64_t GetEmit14(size_t, size_t emit) { 88 return (emit < 1 ? (((void)emit, 92)) : ((emit - 1) ? 208 : 195)); 89 } GetOp15(size_t i)90 static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; } GetEmit15(size_t,size_t emit)91 static inline uint64_t GetEmit15(size_t, size_t emit) { 92 return table15_0_emit_[emit]; 93 } GetOp16(size_t i)94 static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; } GetEmit16(size_t,size_t emit)95 static inline uint64_t GetEmit16(size_t, size_t emit) { 96 return table16_0_emit_[emit]; 97 } GetOp17(size_t i)98 static inline uint64_t GetOp17(size_t i) { return table17_0_ops_[i]; } GetEmit17(size_t,size_t emit)99 static inline uint64_t GetEmit17(size_t, size_t emit) { 100 return table17_0_emit_[emit]; 101 } GetOp18(size_t i)102 static inline uint64_t GetOp18(size_t i) { 103 return table18_ops_[i >> 7][i & 0x7f]; 104 } GetEmit18(size_t i,size_t emit)105 static inline uint64_t GetEmit18(size_t i, size_t emit) { 106 return table18_emit_[i >> 7][emit]; 107 } GetOp19(size_t i)108 static inline uint64_t GetOp19(size_t i) { 109 return table19_ops_[i >> 7][i & 0x7f]; 110 } GetEmit19(size_t i,size_t emit)111 static inline uint64_t GetEmit19(size_t i, size_t emit) { 112 return table19_emit_[i >> 7][emit]; 113 } GetOp20(size_t i)114 static inline uint64_t GetOp20(size_t i) { 115 return table20_ops_[i >> 6][i & 0x3f]; 116 } GetEmit20(size_t i,size_t emit)117 static inline uint64_t GetEmit20(size_t i, size_t emit) { 118 return table20_emit_[i >> 6][emit]; 119 } GetOp21(size_t i)120 static inline uint64_t GetOp21(size_t i) { 121 return table21_ops_[i >> 6][i & 0x3f]; 122 } GetEmit21(size_t i,size_t emit)123 static inline uint64_t GetEmit21(size_t i, size_t emit) { 124 return table21_emit_[i >> 6][emit]; 125 } GetOp22(size_t i)126 static inline uint64_t GetOp22(size_t i) { 127 return table22_ops_[i >> 6][i & 0x3f]; 128 } GetEmit22(size_t i,size_t emit)129 static inline uint64_t GetEmit22(size_t i, size_t emit) { 130 return table22_emit_[i >> 6][emit]; 131 } GetOp23(size_t i)132 static inline uint64_t GetOp23(size_t i) { 133 return table23_ops_[i >> 7][i & 0x7f]; 134 } GetEmit23(size_t i,size_t emit)135 static inline uint64_t GetEmit23(size_t i, size_t emit) { 136 return table23_emit_[i >> 7][emit]; 137 } GetOp24(size_t i)138 static inline uint64_t GetOp24(size_t i) { 139 return table24_ops_[i >> 7][i & 0x7f]; 140 } GetEmit24(size_t i,size_t emit)141 static inline uint64_t GetEmit24(size_t i, size_t emit) { 142 return table24_emit_[i >> 7][emit]; 143 } GetOp13(size_t i)144 static inline uint64_t GetOp13(size_t i) { 145 return table13_ops_[i >> 8][i & 0xff]; 146 } GetEmit13(size_t i,size_t emit)147 static inline uint64_t GetEmit13(size_t i, size_t emit) { 148 return table13_emit_[i >> 8][emit]; 149 } 150 151 private: 152 static const uint8_t table2_0_emit_[10]; 153 static const uint8_t table2_0_ops_[32]; 154 static const uint8_t table3_0_emit_[36]; 155 static const uint8_t table3_0_ops_[64]; 156 static const uint8_t table1_0_emit_[68]; 157 static const uint16_t table1_0_inner_[72]; 158 static const uint8_t table1_0_outer_[128]; 159 static const uint8_t table8_0_emit_[5]; 160 static const uint8_t table8_0_inner_[7]; 161 static const uint8_t table9_0_emit_[8]; 162 static const uint8_t table9_0_inner_[10]; 163 static const uint8_t table9_0_outer_[16]; 164 static const uint8_t table10_0_emit_[10]; 165 static const uint8_t table10_0_ops_[32]; 166 static const uint8_t table11_0_emit_[16]; 167 static const uint8_t table11_0_ops_[64]; 168 static const uint8_t table12_0_emit_[18]; 169 static const uint8_t table12_0_ops_[128]; 170 static const uint8_t table7_0_emit_[2]; 171 static const uint16_t table7_0_ops_[64]; 172 static const uint8_t table7_1_emit_[2]; 173 static const uint8_t table7_2_emit_[3]; 174 static const uint16_t table7_2_ops_[64]; 175 static const uint8_t table7_3_emit_[14]; 176 static const uint16_t table7_3_ops_[64]; 177 static const uint8_t* const table7_emit_[4]; 178 static const uint16_t* const table7_ops_[4]; 179 static const uint8_t table14_0_inner_[5]; 180 static const uint8_t table15_0_emit_[11]; 181 static const uint8_t table15_0_ops_[32]; 182 static const uint8_t table16_0_emit_[24]; 183 static const uint8_t table16_0_ops_[64]; 184 static const uint8_t table17_0_emit_[50]; 185 static const uint8_t table17_0_ops_[128]; 186 static const uint8_t table18_0_emit_[15]; 187 static const uint8_t table18_0_ops_[128]; 188 static const uint8_t table18_1_emit_[64]; 189 static const uint8_t table18_1_ops_[128]; 190 static const uint8_t* const table18_emit_[2]; 191 static const uint8_t* const table18_ops_[2]; 192 static const uint8_t table19_0_emit_[62]; 193 static const uint8_t table19_0_ops_[128]; 194 static const uint8_t table19_1_emit_[10]; 195 static const uint8_t table19_1_ops_[128]; 196 static const uint8_t table19_2_emit_[23]; 197 static const uint8_t table19_2_ops_[128]; 198 static const uint8_t table19_3_emit_[53]; 199 static const uint8_t table19_3_ops_[128]; 200 static const uint8_t* const table19_emit_[4]; 201 static const uint8_t* const table19_ops_[4]; 202 static const uint8_t table20_0_emit_[72]; 203 static const uint16_t table20_0_ops_[64]; 204 static const uint8_t table20_1_emit_[72]; 205 static const uint8_t table20_2_emit_[72]; 206 static const uint8_t table20_3_emit_[40]; 207 static const uint16_t table20_3_ops_[64]; 208 static const uint8_t table20_4_emit_[40]; 209 static const uint8_t table20_5_emit_[40]; 210 static const uint8_t table20_6_emit_[40]; 211 static const uint8_t table20_7_emit_[4]; 212 static const uint16_t table20_7_ops_[64]; 213 static const uint8_t table20_8_emit_[4]; 214 static const uint8_t table20_9_emit_[4]; 215 static const uint8_t table20_10_emit_[7]; 216 static const uint16_t table20_10_ops_[64]; 217 static const uint8_t table20_11_emit_[8]; 218 static const uint16_t table20_11_ops_[64]; 219 static const uint8_t table20_12_emit_[8]; 220 static const uint8_t table20_13_emit_[12]; 221 static const uint16_t table20_13_ops_[64]; 222 static const uint8_t table20_14_emit_[16]; 223 static const uint16_t table20_14_ops_[64]; 224 static const uint8_t table20_15_emit_[21]; 225 static const uint16_t table20_15_ops_[64]; 226 static const uint8_t* const table20_emit_[16]; 227 static const uint16_t* const table20_ops_[16]; 228 static const uint8_t table21_0_emit_[44]; 229 static const uint16_t table21_0_ops_[64]; 230 static const uint8_t table21_1_emit_[92]; 231 static const uint16_t table21_1_ops_[64]; 232 static const uint8_t table21_2_emit_[44]; 233 static const uint8_t table21_3_emit_[92]; 234 static const uint8_t table21_4_emit_[44]; 235 static const uint8_t table21_5_emit_[92]; 236 static const uint8_t table21_6_emit_[72]; 237 static const uint8_t table21_7_emit_[72]; 238 static const uint8_t table21_8_emit_[72]; 239 static const uint8_t table21_9_emit_[72]; 240 static const uint8_t table21_10_emit_[72]; 241 static const uint8_t table21_11_emit_[72]; 242 static const uint8_t table21_12_emit_[72]; 243 static const uint8_t table21_13_emit_[72]; 244 static const uint8_t table21_14_emit_[40]; 245 static const uint8_t table21_15_emit_[40]; 246 static const uint8_t table21_16_emit_[40]; 247 static const uint8_t table21_17_emit_[40]; 248 static const uint8_t table21_18_emit_[40]; 249 static const uint8_t table21_19_emit_[40]; 250 static const uint8_t table21_20_emit_[22]; 251 static const uint16_t table21_20_ops_[64]; 252 static const uint8_t table21_21_emit_[4]; 253 static const uint8_t table21_22_emit_[4]; 254 static const uint8_t table21_23_emit_[4]; 255 static const uint8_t table21_24_emit_[4]; 256 static const uint8_t table21_25_emit_[4]; 257 static const uint8_t table21_26_emit_[4]; 258 static const uint8_t table21_27_emit_[8]; 259 static const uint8_t table21_28_emit_[8]; 260 static const uint8_t table21_29_emit_[8]; 261 static const uint8_t table21_30_emit_[11]; 262 static const uint16_t table21_30_ops_[64]; 263 static const uint8_t table21_31_emit_[25]; 264 static const uint16_t table21_31_ops_[64]; 265 static const uint8_t* const table21_emit_[32]; 266 static const uint16_t* const table21_ops_[32]; 267 static const uint8_t table22_0_emit_[16]; 268 static const uint16_t table22_0_ops_[64]; 269 static const uint8_t table22_1_emit_[28]; 270 static const uint16_t table22_1_ops_[64]; 271 static const uint8_t table22_2_emit_[36]; 272 static const uint16_t table22_2_ops_[64]; 273 static const uint8_t table22_3_emit_[68]; 274 static const uint16_t table22_3_ops_[64]; 275 static const uint8_t table22_4_emit_[16]; 276 static const uint8_t table22_5_emit_[28]; 277 static const uint8_t table22_6_emit_[36]; 278 static const uint8_t table22_7_emit_[68]; 279 static const uint8_t table22_8_emit_[16]; 280 static const uint8_t table22_9_emit_[28]; 281 static const uint8_t table22_10_emit_[36]; 282 static const uint8_t table22_11_emit_[68]; 283 static const uint8_t table22_12_emit_[44]; 284 static const uint8_t table22_13_emit_[92]; 285 static const uint8_t table22_14_emit_[44]; 286 static const uint8_t table22_15_emit_[92]; 287 static const uint8_t table22_16_emit_[44]; 288 static const uint8_t table22_17_emit_[92]; 289 static const uint8_t table22_18_emit_[44]; 290 static const uint8_t table22_19_emit_[92]; 291 static const uint8_t table22_20_emit_[44]; 292 static const uint8_t table22_21_emit_[92]; 293 static const uint8_t table22_22_emit_[44]; 294 static const uint8_t table22_23_emit_[92]; 295 static const uint8_t table22_24_emit_[44]; 296 static const uint8_t table22_25_emit_[92]; 297 static const uint8_t table22_26_emit_[44]; 298 static const uint8_t table22_27_emit_[92]; 299 static const uint8_t table22_28_emit_[72]; 300 static const uint8_t table22_29_emit_[72]; 301 static const uint8_t table22_30_emit_[72]; 302 static const uint8_t table22_31_emit_[72]; 303 static const uint8_t table22_32_emit_[72]; 304 static const uint8_t table22_33_emit_[72]; 305 static const uint8_t table22_34_emit_[72]; 306 static const uint8_t table22_35_emit_[72]; 307 static const uint8_t table22_36_emit_[72]; 308 static const uint8_t table22_37_emit_[72]; 309 static const uint8_t table22_38_emit_[72]; 310 static const uint8_t table22_39_emit_[72]; 311 static const uint8_t table22_40_emit_[72]; 312 static const uint8_t table22_41_emit_[40]; 313 static const uint8_t table22_42_emit_[40]; 314 static const uint8_t table22_43_emit_[40]; 315 static const uint8_t table22_44_emit_[40]; 316 static const uint8_t table22_45_emit_[40]; 317 static const uint8_t table22_46_emit_[40]; 318 static const uint8_t table22_47_emit_[40]; 319 static const uint8_t table22_48_emit_[40]; 320 static const uint8_t table22_49_emit_[40]; 321 static const uint8_t table22_50_emit_[40]; 322 static const uint8_t table22_51_emit_[40]; 323 static const uint8_t table22_52_emit_[40]; 324 static const uint8_t table22_53_emit_[40]; 325 static const uint8_t table22_54_emit_[4]; 326 static const uint8_t table22_55_emit_[4]; 327 static const uint8_t table22_56_emit_[4]; 328 static const uint8_t table22_57_emit_[4]; 329 static const uint8_t table22_58_emit_[4]; 330 static const uint8_t table22_59_emit_[4]; 331 static const uint8_t table22_60_emit_[4]; 332 static const uint8_t table22_61_emit_[7]; 333 static const uint8_t table22_62_emit_[10]; 334 static const uint16_t table22_62_ops_[64]; 335 static const uint8_t table22_63_emit_[34]; 336 static const uint16_t table22_63_ops_[64]; 337 static const uint8_t* const table22_emit_[64]; 338 static const uint16_t* const table22_ops_[64]; 339 static const uint16_t table23_0_ops_[128]; 340 static const uint16_t table23_1_ops_[128]; 341 static const uint16_t table23_2_ops_[128]; 342 static const uint16_t table23_3_ops_[128]; 343 static const uint16_t table23_12_ops_[128]; 344 static const uint8_t table23_13_emit_[104]; 345 static const uint16_t table23_13_ops_[128]; 346 static const uint8_t table23_15_emit_[104]; 347 static const uint8_t table23_17_emit_[104]; 348 static const uint8_t table23_19_emit_[104]; 349 static const uint8_t table23_21_emit_[104]; 350 static const uint8_t table23_23_emit_[104]; 351 static const uint8_t table23_25_emit_[104]; 352 static const uint8_t table23_27_emit_[104]; 353 static const uint8_t table23_28_emit_[136]; 354 static const uint16_t table23_28_ops_[128]; 355 static const uint8_t table23_29_emit_[136]; 356 static const uint8_t table23_30_emit_[136]; 357 static const uint8_t table23_31_emit_[136]; 358 static const uint8_t table23_32_emit_[136]; 359 static const uint8_t table23_33_emit_[136]; 360 static const uint8_t table23_34_emit_[136]; 361 static const uint8_t table23_35_emit_[136]; 362 static const uint8_t table23_36_emit_[136]; 363 static const uint8_t table23_37_emit_[136]; 364 static const uint8_t table23_38_emit_[136]; 365 static const uint8_t table23_39_emit_[136]; 366 static const uint8_t table23_40_emit_[136]; 367 static const uint8_t table23_41_emit_[144]; 368 static const uint16_t table23_41_ops_[128]; 369 static const uint8_t table23_42_emit_[144]; 370 static const uint8_t table23_43_emit_[144]; 371 static const uint8_t table23_44_emit_[144]; 372 static const uint8_t table23_45_emit_[144]; 373 static const uint8_t table23_46_emit_[144]; 374 static const uint8_t table23_47_emit_[144]; 375 static const uint8_t table23_48_emit_[144]; 376 static const uint8_t table23_49_emit_[144]; 377 static const uint8_t table23_50_emit_[144]; 378 static const uint8_t table23_51_emit_[144]; 379 static const uint8_t table23_52_emit_[144]; 380 static const uint8_t table23_53_emit_[144]; 381 static const uint8_t table23_54_emit_[80]; 382 static const uint16_t table23_54_ops_[128]; 383 static const uint8_t table23_55_emit_[80]; 384 static const uint8_t table23_56_emit_[80]; 385 static const uint8_t table23_57_emit_[80]; 386 static const uint8_t table23_58_emit_[80]; 387 static const uint8_t table23_59_emit_[80]; 388 static const uint8_t table23_60_emit_[80]; 389 static const uint8_t table23_61_emit_[26]; 390 static const uint16_t table23_61_ops_[128]; 391 static const uint16_t table23_62_ops_[128]; 392 static const uint8_t table23_63_emit_[63]; 393 static const uint16_t table23_63_ops_[128]; 394 static const uint8_t* const table23_emit_[64]; 395 static const uint16_t* const table23_ops_[64]; 396 static const uint8_t table24_0_emit_[120]; 397 static const uint16_t table24_0_ops_[128]; 398 static const uint8_t table24_1_emit_[120]; 399 static const uint8_t table24_2_emit_[68]; 400 static const uint16_t table24_2_ops_[128]; 401 static const uint8_t table24_3_emit_[16]; 402 static const uint16_t table24_3_ops_[128]; 403 static const uint8_t table24_4_emit_[16]; 404 static const uint8_t table24_5_emit_[20]; 405 static const uint16_t table24_5_ops_[128]; 406 static const uint8_t table24_6_emit_[32]; 407 static const uint16_t table24_6_ops_[128]; 408 static const uint8_t table24_7_emit_[46]; 409 static const uint16_t table24_7_ops_[128]; 410 static const uint8_t table24_8_emit_[120]; 411 static const uint8_t table24_9_emit_[120]; 412 static const uint8_t table24_10_emit_[68]; 413 static const uint8_t table24_11_emit_[16]; 414 static const uint8_t table24_12_emit_[16]; 415 static const uint8_t table24_13_emit_[20]; 416 static const uint8_t table24_14_emit_[32]; 417 static const uint8_t table24_15_emit_[46]; 418 static const uint8_t table24_16_emit_[120]; 419 static const uint8_t table24_17_emit_[120]; 420 static const uint8_t table24_18_emit_[68]; 421 static const uint8_t table24_19_emit_[16]; 422 static const uint8_t table24_20_emit_[16]; 423 static const uint8_t table24_21_emit_[20]; 424 static const uint8_t table24_22_emit_[32]; 425 static const uint8_t table24_23_emit_[46]; 426 static const uint8_t table24_24_emit_[16]; 427 static const uint8_t table24_25_emit_[28]; 428 static const uint16_t table24_25_ops_[128]; 429 static const uint8_t table24_26_emit_[36]; 430 static const uint16_t table24_26_ops_[128]; 431 static const uint8_t table24_27_emit_[68]; 432 static const uint16_t table24_27_ops_[128]; 433 static const uint8_t table24_28_emit_[16]; 434 static const uint8_t table24_29_emit_[28]; 435 static const uint8_t table24_30_emit_[36]; 436 static const uint8_t table24_31_emit_[68]; 437 static const uint8_t table24_32_emit_[16]; 438 static const uint8_t table24_33_emit_[28]; 439 static const uint8_t table24_34_emit_[36]; 440 static const uint8_t table24_35_emit_[68]; 441 static const uint8_t table24_36_emit_[16]; 442 static const uint8_t table24_37_emit_[28]; 443 static const uint8_t table24_38_emit_[36]; 444 static const uint8_t table24_39_emit_[68]; 445 static const uint8_t table24_40_emit_[16]; 446 static const uint8_t table24_41_emit_[28]; 447 static const uint8_t table24_42_emit_[36]; 448 static const uint8_t table24_43_emit_[68]; 449 static const uint8_t table24_44_emit_[16]; 450 static const uint8_t table24_45_emit_[28]; 451 static const uint8_t table24_46_emit_[36]; 452 static const uint8_t table24_47_emit_[68]; 453 static const uint8_t table24_48_emit_[16]; 454 static const uint8_t table24_49_emit_[28]; 455 static const uint8_t table24_50_emit_[36]; 456 static const uint8_t table24_51_emit_[68]; 457 static const uint8_t table24_52_emit_[16]; 458 static const uint8_t table24_53_emit_[28]; 459 static const uint8_t table24_54_emit_[36]; 460 static const uint8_t table24_55_emit_[68]; 461 static const uint8_t table24_56_emit_[44]; 462 static const uint16_t table24_56_ops_[128]; 463 static const uint8_t table24_57_emit_[104]; 464 static const uint16_t table24_57_ops_[128]; 465 static const uint8_t table24_58_emit_[44]; 466 static const uint8_t table24_59_emit_[104]; 467 static const uint8_t table24_60_emit_[44]; 468 static const uint8_t table24_61_emit_[104]; 469 static const uint8_t table24_62_emit_[44]; 470 static const uint8_t table24_63_emit_[104]; 471 static const uint8_t table24_64_emit_[44]; 472 static const uint8_t table24_65_emit_[104]; 473 static const uint8_t table24_66_emit_[44]; 474 static const uint8_t table24_67_emit_[104]; 475 static const uint8_t table24_68_emit_[44]; 476 static const uint8_t table24_69_emit_[104]; 477 static const uint8_t table24_70_emit_[44]; 478 static const uint8_t table24_71_emit_[104]; 479 static const uint8_t table24_72_emit_[44]; 480 static const uint8_t table24_73_emit_[104]; 481 static const uint8_t table24_74_emit_[44]; 482 static const uint8_t table24_75_emit_[104]; 483 static const uint8_t table24_76_emit_[44]; 484 static const uint8_t table24_77_emit_[104]; 485 static const uint8_t table24_78_emit_[44]; 486 static const uint8_t table24_79_emit_[104]; 487 static const uint8_t table24_80_emit_[44]; 488 static const uint8_t table24_81_emit_[104]; 489 static const uint8_t table24_82_emit_[136]; 490 static const uint16_t table24_82_ops_[128]; 491 static const uint8_t table24_83_emit_[136]; 492 static const uint8_t table24_84_emit_[136]; 493 static const uint8_t table24_85_emit_[136]; 494 static const uint8_t table24_86_emit_[136]; 495 static const uint8_t table24_87_emit_[136]; 496 static const uint8_t table24_88_emit_[136]; 497 static const uint8_t table24_89_emit_[136]; 498 static const uint8_t table24_90_emit_[136]; 499 static const uint8_t table24_91_emit_[136]; 500 static const uint8_t table24_92_emit_[136]; 501 static const uint8_t table24_93_emit_[136]; 502 static const uint8_t table24_94_emit_[136]; 503 static const uint8_t table24_95_emit_[136]; 504 static const uint8_t table24_96_emit_[136]; 505 static const uint8_t table24_97_emit_[136]; 506 static const uint8_t table24_98_emit_[136]; 507 static const uint8_t table24_99_emit_[136]; 508 static const uint8_t table24_100_emit_[136]; 509 static const uint8_t table24_101_emit_[136]; 510 static const uint8_t table24_102_emit_[136]; 511 static const uint8_t table24_103_emit_[136]; 512 static const uint8_t table24_104_emit_[136]; 513 static const uint8_t table24_105_emit_[136]; 514 static const uint8_t table24_106_emit_[136]; 515 static const uint8_t table24_107_emit_[136]; 516 static const uint8_t table24_108_emit_[144]; 517 static const uint16_t table24_108_ops_[128]; 518 static const uint8_t table24_109_emit_[144]; 519 static const uint8_t table24_110_emit_[144]; 520 static const uint8_t table24_111_emit_[144]; 521 static const uint8_t table24_112_emit_[144]; 522 static const uint8_t table24_113_emit_[144]; 523 static const uint8_t table24_114_emit_[144]; 524 static const uint8_t table24_115_emit_[144]; 525 static const uint8_t table24_116_emit_[144]; 526 static const uint8_t table24_117_emit_[144]; 527 static const uint8_t table24_118_emit_[144]; 528 static const uint8_t table24_119_emit_[144]; 529 static const uint8_t table24_120_emit_[144]; 530 static const uint8_t table24_121_emit_[144]; 531 static const uint8_t table24_122_emit_[112]; 532 static const uint16_t table24_122_ops_[128]; 533 static const uint8_t table24_123_emit_[80]; 534 static const uint16_t table24_123_ops_[128]; 535 static const uint8_t table24_124_emit_[80]; 536 static const uint8_t table24_125_emit_[44]; 537 static const uint16_t table24_125_ops_[128]; 538 static const uint8_t table24_126_emit_[17]; 539 static const uint16_t table24_126_ops_[128]; 540 static const uint8_t table24_127_emit_[46]; 541 static const uint16_t table24_127_ops_[128]; 542 static const uint8_t* const table24_emit_[128]; 543 static const uint16_t* const table24_ops_[128]; 544 static const uint8_t table13_0_emit_[1]; 545 static const uint16_t table13_0_ops_[256]; 546 static const uint8_t table13_8_emit_[1]; 547 static const uint8_t table13_16_emit_[1]; 548 static const uint8_t table13_24_emit_[1]; 549 static const uint16_t table13_24_ops_[256]; 550 static const uint8_t table13_28_emit_[1]; 551 static const uint8_t table13_32_emit_[1]; 552 static const uint8_t table13_36_emit_[1]; 553 static const uint8_t table13_40_emit_[1]; 554 static const uint8_t table13_44_emit_[1]; 555 static const uint8_t table13_48_emit_[1]; 556 static const uint8_t table13_52_emit_[1]; 557 static const uint8_t table13_56_emit_[1]; 558 static const uint16_t table13_56_ops_[256]; 559 static const uint8_t table13_58_emit_[1]; 560 static const uint8_t table13_60_emit_[1]; 561 static const uint8_t table13_62_emit_[1]; 562 static const uint8_t table13_64_emit_[1]; 563 static const uint8_t table13_66_emit_[1]; 564 static const uint8_t table13_68_emit_[1]; 565 static const uint8_t table13_70_emit_[1]; 566 static const uint8_t table13_72_emit_[1]; 567 static const uint8_t table13_74_emit_[1]; 568 static const uint8_t table13_76_emit_[1]; 569 static const uint8_t table13_78_emit_[1]; 570 static const uint8_t table13_80_emit_[1]; 571 static const uint8_t table13_82_emit_[1]; 572 static const uint16_t table13_82_ops_[256]; 573 static const uint8_t table13_83_emit_[1]; 574 static const uint8_t table13_84_emit_[1]; 575 static const uint8_t table13_85_emit_[1]; 576 static const uint8_t table13_86_emit_[1]; 577 static const uint8_t table13_87_emit_[1]; 578 static const uint8_t table13_88_emit_[1]; 579 static const uint8_t table13_89_emit_[1]; 580 static const uint8_t table13_90_emit_[1]; 581 static const uint8_t table13_91_emit_[1]; 582 static const uint8_t table13_92_emit_[1]; 583 static const uint8_t table13_93_emit_[1]; 584 static const uint8_t table13_94_emit_[1]; 585 static const uint8_t table13_95_emit_[1]; 586 static const uint8_t table13_96_emit_[1]; 587 static const uint8_t table13_97_emit_[1]; 588 static const uint8_t table13_98_emit_[1]; 589 static const uint8_t table13_99_emit_[1]; 590 static const uint8_t table13_100_emit_[1]; 591 static const uint8_t table13_101_emit_[1]; 592 static const uint8_t table13_102_emit_[1]; 593 static const uint8_t table13_103_emit_[1]; 594 static const uint8_t table13_104_emit_[1]; 595 static const uint8_t table13_105_emit_[1]; 596 static const uint8_t table13_106_emit_[1]; 597 static const uint8_t table13_107_emit_[1]; 598 static const uint8_t table13_108_emit_[2]; 599 static const uint16_t table13_108_ops_[256]; 600 static const uint8_t table13_109_emit_[2]; 601 static const uint8_t table13_110_emit_[2]; 602 static const uint8_t table13_111_emit_[2]; 603 static const uint8_t table13_112_emit_[2]; 604 static const uint8_t table13_113_emit_[2]; 605 static const uint8_t table13_114_emit_[2]; 606 static const uint8_t table13_115_emit_[2]; 607 static const uint8_t table13_116_emit_[2]; 608 static const uint8_t table13_117_emit_[2]; 609 static const uint8_t table13_118_emit_[2]; 610 static const uint8_t table13_119_emit_[2]; 611 static const uint8_t table13_120_emit_[2]; 612 static const uint8_t table13_121_emit_[2]; 613 static const uint8_t table13_122_emit_[3]; 614 static const uint16_t table13_122_ops_[256]; 615 static const uint8_t table13_123_emit_[4]; 616 static const uint16_t table13_123_ops_[256]; 617 static const uint8_t table13_124_emit_[4]; 618 static const uint8_t table13_125_emit_[6]; 619 static const uint16_t table13_125_ops_[256]; 620 static const uint16_t table13_126_ops_[256]; 621 static const uint8_t table13_127_emit_[49]; 622 static const uint16_t table13_127_ops_[256]; 623 static const uint8_t* const table13_emit_[128]; 624 static const uint16_t* const table13_ops_[128]; 625 }; 626 template <typename F> 627 class HuffDecoder : public HuffDecoderCommon { 628 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)629 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 630 : sink_(sink), begin_(begin), end_(end) {} Run()631 bool Run() { 632 while (!done_) { 633 if (!RefillTo7()) { 634 Done0(); 635 break; 636 } 637 const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f; 638 const auto op = GetOp1(index); 639 const int consumed = op & 7; 640 buffer_len_ -= consumed; 641 const auto emit_ofs = op >> 6; 642 switch ((op >> 3) & 7) { 643 case 0: { 644 sink_(GetEmit1(index, emit_ofs + 0)); 645 break; 646 } 647 case 1: { 648 DecodeStep0(); 649 break; 650 } 651 case 2: { 652 DecodeStep1(); 653 break; 654 } 655 case 3: { 656 DecodeStep2(); 657 break; 658 } 659 case 4: { 660 DecodeStep3(); 661 break; 662 } 663 } 664 } 665 return ok_; 666 } 667 668 private: RefillTo7()669 bool RefillTo7() { 670 switch (buffer_len_) { 671 case 0: { 672 return Read1to8Bytes(); 673 } 674 case 1: 675 case 2: 676 case 3: 677 case 4: 678 case 5: 679 case 6: { 680 return Read1to7Bytes(); 681 } 682 } 683 return true; 684 } Read1to8Bytes()685 bool Read1to8Bytes() { 686 switch (end_ - begin_) { 687 case 0: { 688 return false; 689 } 690 case 1: { 691 Fill1(); 692 return true; 693 } 694 case 2: { 695 Fill2(); 696 return true; 697 } 698 case 3: { 699 Fill3(); 700 return true; 701 } 702 case 4: { 703 Fill4(); 704 return true; 705 } 706 case 5: { 707 Fill5(); 708 return true; 709 } 710 case 6: { 711 Fill6(); 712 return true; 713 } 714 case 7: { 715 Fill7(); 716 return true; 717 } 718 default: { 719 Fill8(); 720 return true; 721 } 722 } 723 } Fill1()724 void Fill1() { 725 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 726 begin_ += 1; 727 buffer_len_ += 8; 728 } Fill2()729 void Fill2() { 730 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 731 (static_cast<uint64_t>(begin_[1]) << 0); 732 begin_ += 2; 733 buffer_len_ += 16; 734 } Fill3()735 void Fill3() { 736 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 737 (static_cast<uint64_t>(begin_[1]) << 8) | 738 (static_cast<uint64_t>(begin_[2]) << 0); 739 begin_ += 3; 740 buffer_len_ += 24; 741 } Fill4()742 void Fill4() { 743 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 744 (static_cast<uint64_t>(begin_[1]) << 16) | 745 (static_cast<uint64_t>(begin_[2]) << 8) | 746 (static_cast<uint64_t>(begin_[3]) << 0); 747 begin_ += 4; 748 buffer_len_ += 32; 749 } Fill5()750 void Fill5() { 751 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 752 (static_cast<uint64_t>(begin_[1]) << 24) | 753 (static_cast<uint64_t>(begin_[2]) << 16) | 754 (static_cast<uint64_t>(begin_[3]) << 8) | 755 (static_cast<uint64_t>(begin_[4]) << 0); 756 begin_ += 5; 757 buffer_len_ += 40; 758 } Fill6()759 void Fill6() { 760 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 761 (static_cast<uint64_t>(begin_[1]) << 32) | 762 (static_cast<uint64_t>(begin_[2]) << 24) | 763 (static_cast<uint64_t>(begin_[3]) << 16) | 764 (static_cast<uint64_t>(begin_[4]) << 8) | 765 (static_cast<uint64_t>(begin_[5]) << 0); 766 begin_ += 6; 767 buffer_len_ += 48; 768 } Fill7()769 void Fill7() { 770 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 771 (static_cast<uint64_t>(begin_[1]) << 40) | 772 (static_cast<uint64_t>(begin_[2]) << 32) | 773 (static_cast<uint64_t>(begin_[3]) << 24) | 774 (static_cast<uint64_t>(begin_[4]) << 16) | 775 (static_cast<uint64_t>(begin_[5]) << 8) | 776 (static_cast<uint64_t>(begin_[6]) << 0); 777 begin_ += 7; 778 buffer_len_ += 56; 779 } Fill8()780 void Fill8() { 781 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 782 (static_cast<uint64_t>(begin_[1]) << 48) | 783 (static_cast<uint64_t>(begin_[2]) << 40) | 784 (static_cast<uint64_t>(begin_[3]) << 32) | 785 (static_cast<uint64_t>(begin_[4]) << 24) | 786 (static_cast<uint64_t>(begin_[5]) << 16) | 787 (static_cast<uint64_t>(begin_[6]) << 8) | 788 (static_cast<uint64_t>(begin_[7]) << 0); 789 begin_ += 8; 790 buffer_len_ += 64; 791 } Read1to7Bytes()792 bool Read1to7Bytes() { 793 switch (end_ - begin_) { 794 case 0: { 795 return false; 796 } 797 case 1: { 798 Fill1(); 799 return true; 800 } 801 case 2: { 802 Fill2(); 803 return true; 804 } 805 case 3: { 806 Fill3(); 807 return true; 808 } 809 case 4: { 810 Fill4(); 811 return true; 812 } 813 case 5: { 814 Fill5(); 815 return true; 816 } 817 case 6: { 818 Fill6(); 819 return true; 820 } 821 default: { 822 Fill7(); 823 return true; 824 } 825 } 826 } Done0()827 void Done0() { 828 done_ = true; 829 switch (buffer_len_) { 830 case 1: 831 case 2: 832 case 3: 833 case 4: { 834 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 835 return; 836 } 837 case 5: { 838 const auto index = buffer_ & 31; 839 const auto op = GetOp2(index); 840 switch (op & 3) { 841 case 0: { 842 sink_(GetEmit2(index, (op >> 2) + 0)); 843 break; 844 } 845 case 1: { 846 ok_ = false; 847 break; 848 } 849 } 850 return; 851 } 852 case 6: { 853 const auto index = buffer_ & 63; 854 const auto op = GetOp3(index); 855 switch (op & 3) { 856 case 0: { 857 ok_ = false; 858 break; 859 } 860 case 1: { 861 sink_(GetEmit3(index, (op >> 2) + 0)); 862 break; 863 } 864 } 865 return; 866 } 867 case 0: { 868 return; 869 } 870 } 871 } DecodeStep0()872 void DecodeStep0() { 873 if (!RefillTo1()) { 874 Done1(); 875 return; 876 } 877 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 878 const auto op = GetOp4(index); 879 const int consumed = op & 1; 880 buffer_len_ -= consumed; 881 const auto emit_ofs = op >> 1; 882 sink_(GetEmit4(index, emit_ofs + 0)); 883 } RefillTo1()884 bool RefillTo1() { 885 switch (buffer_len_) { 886 case 0: { 887 return Read1to8Bytes(); 888 } 889 } 890 return true; 891 } Done1()892 void Done1() { 893 done_ = true; 894 ok_ = false; 895 } DecodeStep1()896 void DecodeStep1() { 897 if (!RefillTo1()) { 898 Done2(); 899 return; 900 } 901 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 902 const auto op = GetOp5(index); 903 const int consumed = op & 1; 904 buffer_len_ -= consumed; 905 const auto emit_ofs = op >> 1; 906 sink_(GetEmit5(index, emit_ofs + 0)); 907 } Done2()908 void Done2() { 909 done_ = true; 910 ok_ = false; 911 } DecodeStep2()912 void DecodeStep2() { 913 if (!RefillTo1()) { 914 Done3(); 915 return; 916 } 917 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 918 const auto op = GetOp6(index); 919 const int consumed = op & 1; 920 buffer_len_ -= consumed; 921 const auto emit_ofs = op >> 1; 922 sink_(GetEmit6(index, emit_ofs + 0)); 923 } Done3()924 void Done3() { 925 done_ = true; 926 ok_ = false; 927 } DecodeStep3()928 void DecodeStep3() { 929 if (!RefillTo8()) { 930 Done4(); 931 return; 932 } 933 const auto index = (buffer_ >> (buffer_len_ - 8)) & 0xff; 934 const auto op = GetOp7(index); 935 const int consumed = op & 15; 936 buffer_len_ -= consumed; 937 const auto emit_ofs = op >> 5; 938 switch ((op >> 4) & 1) { 939 case 0: { 940 sink_(GetEmit7(index, emit_ofs + 0)); 941 break; 942 } 943 case 1: { 944 DecodeStep4(); 945 break; 946 } 947 } 948 } RefillTo8()949 bool RefillTo8() { 950 switch (buffer_len_) { 951 case 0: { 952 return Read1to8Bytes(); 953 } 954 case 1: 955 case 2: 956 case 3: 957 case 4: 958 case 5: 959 case 6: 960 case 7: { 961 return Read1to7Bytes(); 962 } 963 } 964 return true; 965 } Done4()966 void Done4() { 967 done_ = true; 968 switch (end_ - begin_) {} 969 switch (buffer_len_) { 970 case 1: 971 case 2: { 972 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 973 return; 974 } 975 case 3: { 976 const auto index = buffer_ & 7; 977 const auto op = GetOp8(index); 978 switch (op & 3) { 979 case 0: { 980 sink_(GetEmit8(index, (op >> 2) + 0)); 981 break; 982 } 983 case 1: { 984 ok_ = false; 985 break; 986 } 987 } 988 return; 989 } 990 case 4: { 991 const auto index = buffer_ & 15; 992 const auto op = GetOp9(index); 993 switch (op & 3) { 994 case 0: { 995 ok_ = false; 996 break; 997 } 998 case 1: { 999 sink_(GetEmit9(index, (op >> 2) + 0)); 1000 break; 1001 } 1002 } 1003 return; 1004 } 1005 case 5: { 1006 const auto index = buffer_ & 31; 1007 const auto op = GetOp10(index); 1008 switch (op & 3) { 1009 case 0: { 1010 ok_ = false; 1011 break; 1012 } 1013 case 1: { 1014 sink_(GetEmit10(index, (op >> 2) + 0)); 1015 break; 1016 } 1017 } 1018 return; 1019 } 1020 case 6: { 1021 const auto index = buffer_ & 63; 1022 const auto op = GetOp11(index); 1023 switch (op & 3) { 1024 case 0: { 1025 ok_ = false; 1026 break; 1027 } 1028 case 1: { 1029 sink_(GetEmit11(index, (op >> 2) + 0)); 1030 break; 1031 } 1032 } 1033 return; 1034 } 1035 case 7: { 1036 const auto index = buffer_ & 127; 1037 const auto op = GetOp12(index); 1038 switch (op & 3) { 1039 case 0: { 1040 ok_ = false; 1041 break; 1042 } 1043 case 1: { 1044 sink_(GetEmit12(index, (op >> 2) + 0)); 1045 break; 1046 } 1047 } 1048 return; 1049 } 1050 case 0: { 1051 return; 1052 } 1053 } 1054 } DecodeStep4()1055 void DecodeStep4() { 1056 if (!RefillTo15()) { 1057 Done5(); 1058 return; 1059 } 1060 const auto index = (buffer_ >> (buffer_len_ - 15)) & 0x7fff; 1061 const auto op = GetOp13(index); 1062 const int consumed = op & 15; 1063 buffer_len_ -= consumed; 1064 const auto emit_ofs = op >> 5; 1065 switch ((op >> 4) & 1) { 1066 case 0: { 1067 sink_(GetEmit13(index, emit_ofs + 0)); 1068 break; 1069 } 1070 case 1: { 1071 begin_ = end_; 1072 buffer_len_ = 0; 1073 break; 1074 } 1075 } 1076 } RefillTo15()1077 bool RefillTo15() { 1078 switch (buffer_len_) { 1079 case 0: { 1080 return Read2to8Bytes(); 1081 } 1082 case 1: 1083 case 2: 1084 case 3: 1085 case 4: 1086 case 5: 1087 case 6: { 1088 return Read2to7Bytes(); 1089 } 1090 case 7: 1091 case 8: { 1092 return Read1to7Bytes(); 1093 } 1094 case 9: 1095 case 10: 1096 case 11: 1097 case 12: 1098 case 13: 1099 case 14: { 1100 return Read1to6Bytes(); 1101 } 1102 } 1103 return true; 1104 } Read2to8Bytes()1105 bool Read2to8Bytes() { 1106 switch (end_ - begin_) { 1107 case 0: 1108 case 1: { 1109 return false; 1110 } 1111 case 2: { 1112 Fill2(); 1113 return true; 1114 } 1115 case 3: { 1116 Fill3(); 1117 return true; 1118 } 1119 case 4: { 1120 Fill4(); 1121 return true; 1122 } 1123 case 5: { 1124 Fill5(); 1125 return true; 1126 } 1127 case 6: { 1128 Fill6(); 1129 return true; 1130 } 1131 case 7: { 1132 Fill7(); 1133 return true; 1134 } 1135 default: { 1136 Fill8(); 1137 return true; 1138 } 1139 } 1140 } Read2to7Bytes()1141 bool Read2to7Bytes() { 1142 switch (end_ - begin_) { 1143 case 0: 1144 case 1: { 1145 return false; 1146 } 1147 case 2: { 1148 Fill2(); 1149 return true; 1150 } 1151 case 3: { 1152 Fill3(); 1153 return true; 1154 } 1155 case 4: { 1156 Fill4(); 1157 return true; 1158 } 1159 case 5: { 1160 Fill5(); 1161 return true; 1162 } 1163 case 6: { 1164 Fill6(); 1165 return true; 1166 } 1167 default: { 1168 Fill7(); 1169 return true; 1170 } 1171 } 1172 } Read1to6Bytes()1173 bool Read1to6Bytes() { 1174 switch (end_ - begin_) { 1175 case 0: { 1176 return false; 1177 } 1178 case 1: { 1179 Fill1(); 1180 return true; 1181 } 1182 case 2: { 1183 Fill2(); 1184 return true; 1185 } 1186 case 3: { 1187 Fill3(); 1188 return true; 1189 } 1190 case 4: { 1191 Fill4(); 1192 return true; 1193 } 1194 case 5: { 1195 Fill5(); 1196 return true; 1197 } 1198 default: { 1199 Fill6(); 1200 return true; 1201 } 1202 } 1203 } Done5()1204 void Done5() { 1205 done_ = true; 1206 switch (end_ - begin_) { 1207 case 1: { 1208 Fill1(); 1209 break; 1210 } 1211 } 1212 switch (buffer_len_) { 1213 case 1: 1214 case 2: 1215 case 3: { 1216 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1217 return; 1218 } 1219 case 4: { 1220 const auto index = buffer_ & 15; 1221 const auto op = GetOp14(index); 1222 switch (op & 3) { 1223 case 0: { 1224 sink_(GetEmit14(index, (op >> 2) + 0)); 1225 break; 1226 } 1227 case 1: { 1228 ok_ = false; 1229 break; 1230 } 1231 } 1232 return; 1233 } 1234 case 5: { 1235 const auto index = buffer_ & 31; 1236 const auto op = GetOp15(index); 1237 switch (op & 3) { 1238 case 0: { 1239 ok_ = false; 1240 break; 1241 } 1242 case 1: { 1243 sink_(GetEmit15(index, (op >> 2) + 0)); 1244 break; 1245 } 1246 } 1247 return; 1248 } 1249 case 6: { 1250 const auto index = buffer_ & 63; 1251 const auto op = GetOp16(index); 1252 switch (op & 3) { 1253 case 0: { 1254 ok_ = false; 1255 break; 1256 } 1257 case 1: { 1258 sink_(GetEmit16(index, (op >> 2) + 0)); 1259 break; 1260 } 1261 } 1262 return; 1263 } 1264 case 7: { 1265 const auto index = buffer_ & 127; 1266 const auto op = GetOp17(index); 1267 switch (op & 3) { 1268 case 0: { 1269 ok_ = false; 1270 break; 1271 } 1272 case 1: { 1273 sink_(GetEmit17(index, (op >> 2) + 0)); 1274 break; 1275 } 1276 } 1277 return; 1278 } 1279 case 8: { 1280 const auto index = buffer_ & 255; 1281 const auto op = GetOp18(index); 1282 switch (op & 3) { 1283 case 0: { 1284 ok_ = false; 1285 break; 1286 } 1287 case 1: { 1288 sink_(GetEmit18(index, (op >> 2) + 0)); 1289 break; 1290 } 1291 } 1292 return; 1293 } 1294 case 9: { 1295 const auto index = buffer_ & 511; 1296 const auto op = GetOp19(index); 1297 switch (op & 3) { 1298 case 0: { 1299 sink_(GetEmit19(index, (op >> 2) + 0)); 1300 sink_(GetEmit19(index, (op >> 2) + 1)); 1301 break; 1302 } 1303 case 1: { 1304 ok_ = false; 1305 break; 1306 } 1307 case 2: { 1308 sink_(GetEmit19(index, (op >> 2) + 0)); 1309 break; 1310 } 1311 } 1312 return; 1313 } 1314 case 10: { 1315 const auto index = buffer_ & 1023; 1316 const auto op = GetOp20(index); 1317 switch (op & 3) { 1318 case 0: { 1319 ok_ = false; 1320 break; 1321 } 1322 case 1: { 1323 sink_(GetEmit20(index, (op >> 2) + 0)); 1324 sink_(GetEmit20(index, (op >> 2) + 1)); 1325 break; 1326 } 1327 case 2: { 1328 sink_(GetEmit20(index, (op >> 2) + 0)); 1329 break; 1330 } 1331 } 1332 return; 1333 } 1334 case 11: { 1335 const auto index = buffer_ & 2047; 1336 const auto op = GetOp21(index); 1337 switch (op & 3) { 1338 case 0: { 1339 ok_ = false; 1340 break; 1341 } 1342 case 1: { 1343 sink_(GetEmit21(index, (op >> 2) + 0)); 1344 sink_(GetEmit21(index, (op >> 2) + 1)); 1345 break; 1346 } 1347 case 2: { 1348 sink_(GetEmit21(index, (op >> 2) + 0)); 1349 break; 1350 } 1351 } 1352 return; 1353 } 1354 case 12: { 1355 const auto index = buffer_ & 4095; 1356 const auto op = GetOp22(index); 1357 switch (op & 3) { 1358 case 0: { 1359 ok_ = false; 1360 break; 1361 } 1362 case 1: { 1363 sink_(GetEmit22(index, (op >> 2) + 0)); 1364 sink_(GetEmit22(index, (op >> 2) + 1)); 1365 break; 1366 } 1367 case 2: { 1368 sink_(GetEmit22(index, (op >> 2) + 0)); 1369 break; 1370 } 1371 } 1372 return; 1373 } 1374 case 13: { 1375 const auto index = buffer_ & 8191; 1376 const auto op = GetOp23(index); 1377 switch (op & 3) { 1378 case 0: { 1379 ok_ = false; 1380 break; 1381 } 1382 case 1: { 1383 sink_(GetEmit23(index, (op >> 2) + 0)); 1384 sink_(GetEmit23(index, (op >> 2) + 1)); 1385 break; 1386 } 1387 case 2: { 1388 sink_(GetEmit23(index, (op >> 2) + 0)); 1389 break; 1390 } 1391 } 1392 return; 1393 } 1394 case 14: { 1395 const auto index = buffer_ & 16383; 1396 const auto op = GetOp24(index); 1397 switch (op & 7) { 1398 case 0: { 1399 sink_(GetEmit24(index, (op >> 3) + 0)); 1400 sink_(GetEmit24(index, (op >> 3) + 1)); 1401 sink_(GetEmit24(index, (op >> 3) + 2)); 1402 break; 1403 } 1404 case 1: { 1405 ok_ = false; 1406 break; 1407 } 1408 case 2: { 1409 sink_(GetEmit24(index, (op >> 3) + 0)); 1410 sink_(GetEmit24(index, (op >> 3) + 1)); 1411 break; 1412 } 1413 case 3: { 1414 sink_(GetEmit24(index, (op >> 3) + 0)); 1415 break; 1416 } 1417 } 1418 return; 1419 } 1420 case 0: { 1421 return; 1422 } 1423 } 1424 } 1425 F sink_; 1426 const uint8_t* begin_; 1427 const uint8_t* const end_; 1428 uint64_t buffer_ = 0; 1429 int buffer_len_ = 0; 1430 bool ok_ = true; 1431 bool done_ = false; 1432 }; 1433 } // namespace geometry_7_8_15 1434 } // namespace grpc_core 1435 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_8_15_H 1436