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_14_9_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_14_9_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_7_14_9 { 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 } GetOp13(size_t i)78 static inline uint64_t GetOp13(size_t i) { 79 return table13_ops_[i >> 6][i & 0x3f]; 80 } GetEmit13(size_t i,size_t emit)81 static inline uint64_t GetEmit13(size_t i, size_t emit) { 82 return table13_emit_[i >> 6][emit]; 83 } GetOp14(size_t i)84 static inline uint64_t GetOp14(size_t i) { 85 return table14_ops_[i >> 6][i & 0x3f]; 86 } GetEmit14(size_t i,size_t emit)87 static inline uint64_t GetEmit14(size_t i, size_t emit) { 88 return table14_emit_[i >> 6][emit]; 89 } GetOp15(size_t i)90 static inline uint64_t GetOp15(size_t i) { 91 return table15_ops_[i >> 6][i & 0x3f]; 92 } GetEmit15(size_t i,size_t emit)93 static inline uint64_t GetEmit15(size_t i, size_t emit) { 94 return table15_emit_[i >> 6][emit]; 95 } GetOp16(size_t i)96 static inline uint64_t GetOp16(size_t i) { 97 return table16_ops_[i >> 6][i & 0x3f]; 98 } GetEmit16(size_t i,size_t emit)99 static inline uint64_t GetEmit16(size_t i, size_t emit) { 100 return table16_emit_[i >> 6][emit]; 101 } GetOp17(size_t i)102 static inline uint64_t GetOp17(size_t i) { 103 return table17_ops_[i >> 7][i & 0x7f]; 104 } GetEmit17(size_t i,size_t emit)105 static inline uint64_t GetEmit17(size_t i, size_t emit) { 106 return table17_emit_[i >> 7][emit]; 107 } GetOp18(size_t i)108 static inline uint64_t GetOp18(size_t i) { 109 return table18_ops_[i >> 6][i & 0x3f]; 110 } GetEmit18(size_t i,size_t emit)111 static inline uint64_t GetEmit18(size_t i, size_t emit) { 112 return table18_emit_[i >> 6][emit]; 113 } GetOp7(size_t i)114 static inline uint64_t GetOp7(size_t i) { 115 return table7_ops_[i >> 8][i & 0xff]; 116 } GetEmit7(size_t i,size_t emit)117 static inline uint64_t GetEmit7(size_t i, size_t emit) { 118 return table7_emit_[i >> 8][emit]; 119 } GetOp19(size_t i)120 static inline uint64_t GetOp19(size_t i) { return i ? 3 : 1; } GetEmit19(size_t,size_t emit)121 static inline uint64_t GetEmit19(size_t, size_t emit) { 122 return emit ? 132 : 129; 123 } GetOp20(size_t i)124 static inline uint64_t GetOp20(size_t i) { return i ? 3 : 1; } GetEmit20(size_t,size_t emit)125 static inline uint64_t GetEmit20(size_t, size_t emit) { return emit + 133; } GetOp21(size_t i)126 static inline uint64_t GetOp21(size_t i) { return i ? 3 : 1; } GetEmit21(size_t,size_t emit)127 static inline uint64_t GetEmit21(size_t, size_t emit) { 128 return emit ? 146 : 136; 129 } GetOp22(size_t i)130 static inline uint64_t GetOp22(size_t i) { return i ? 3 : 1; } GetEmit22(size_t,size_t emit)131 static inline uint64_t GetEmit22(size_t, size_t emit) { 132 return emit ? 156 : 154; 133 } GetOp23(size_t i)134 static inline uint64_t GetOp23(size_t i) { return i ? 3 : 1; } GetEmit23(size_t,size_t emit)135 static inline uint64_t GetEmit23(size_t, size_t emit) { 136 return emit ? 163 : 160; 137 } GetOp24(size_t i)138 static inline uint64_t GetOp24(size_t i) { return i ? 3 : 1; } GetEmit24(size_t,size_t emit)139 static inline uint64_t GetEmit24(size_t, size_t emit) { 140 return emit ? 169 : 164; 141 } GetOp25(size_t i)142 static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; } GetEmit25(size_t,size_t emit)143 static inline uint64_t GetEmit25(size_t, size_t emit) { 144 return emit ? 173 : 170; 145 } GetOp26(size_t i)146 static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; } GetEmit26(size_t,size_t emit)147 static inline uint64_t GetEmit26(size_t, size_t emit) { 148 return emit ? 181 : 178; 149 } GetOp27(size_t i)150 static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; } GetEmit27(size_t,size_t emit)151 static inline uint64_t GetEmit27(size_t, size_t emit) { return emit + 185; } GetOp28(size_t i)152 static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; } GetEmit28(size_t,size_t emit)153 static inline uint64_t GetEmit28(size_t, size_t emit) { 154 return emit ? 189 : 187; 155 } GetOp29(size_t i)156 static inline uint64_t GetOp29(size_t i) { return i ? 3 : 1; } GetEmit29(size_t,size_t emit)157 static inline uint64_t GetEmit29(size_t, size_t emit) { 158 return emit ? 196 : 190; 159 } GetOp30(size_t i)160 static inline uint64_t GetOp30(size_t i) { return i ? 3 : 1; } GetEmit30(size_t,size_t emit)161 static inline uint64_t GetEmit30(size_t, size_t emit) { 162 return emit ? 228 : 198; 163 } GetOp31(size_t i)164 static inline uint64_t GetOp31(size_t i) { return i ? 3 : 1; } GetEmit31(size_t,size_t emit)165 static inline uint64_t GetEmit31(size_t, size_t emit) { return emit + 232; } GetOp32(size_t i)166 static inline uint64_t GetOp32(size_t i) { 167 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 168 } GetEmit32(size_t,size_t emit)169 static inline uint64_t GetEmit32(size_t, size_t emit) { 170 return (emit < 2 ? (emit ? 135 : 1) : ((emit - 2) + 137)); 171 } GetOp33(size_t i)172 static inline uint64_t GetOp33(size_t i) { 173 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 174 } GetEmit33(size_t,size_t emit)175 static inline uint64_t GetEmit33(size_t, size_t emit) { 176 return (emit < 2 ? (emit + 139) : ((emit - 2) ? 143 : 141)); 177 } GetOp34(size_t i)178 static inline uint64_t GetOp34(size_t i) { 179 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 180 } GetEmit34(size_t,size_t emit)181 static inline uint64_t GetEmit34(size_t, size_t emit) { 182 return (emit < 1 ? (((void)emit, 147)) : ((emit - 1) + 149)); 183 } GetOp35(size_t i)184 static inline uint64_t GetOp35(size_t i) { 185 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 186 } GetEmit35(size_t,size_t emit)187 static inline uint64_t GetEmit35(size_t, size_t emit) { 188 return (emit < 2 ? (emit ? 155 : 152) : ((emit - 2) + 157)); 189 } GetOp36(size_t i)190 static inline uint64_t GetOp36(size_t i) { 191 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 192 } GetEmit36(size_t,size_t emit)193 static inline uint64_t GetEmit36(size_t, size_t emit) { 194 return (emit < 2 ? (emit + 165) : ((emit - 2) ? 174 : 168)); 195 } GetOp37(size_t i)196 static inline uint64_t GetOp37(size_t i) { 197 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 198 } GetEmit37(size_t,size_t emit)199 static inline uint64_t GetEmit37(size_t, size_t emit) { 200 return (emit < 2 ? (emit ? 180 : 175) : ((emit - 2) + 182)); 201 } GetOp38(size_t i)202 static inline uint64_t GetOp38(size_t i) { 203 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 204 } GetEmit38(size_t,size_t emit)205 static inline uint64_t GetEmit38(size_t, size_t emit) { 206 return (emit < 2 ? (emit ? 191 : 188) : ((emit - 2) ? 231 : 197)); 207 } GetOp40(size_t i)208 static inline uint64_t GetOp40(size_t i) { 209 return table40_0_inner_[(i < 6 ? (i) : (((void)(i - 6), 6)))]; 210 } GetEmit40(size_t,size_t emit)211 static inline uint64_t GetEmit40(size_t, size_t emit) { 212 return table40_0_emit_[emit]; 213 } GetOp39(size_t i)214 static inline uint64_t GetOp39(size_t i) { 215 return table39_0_inner_[(i < 11 ? (i / 2 + 0) : ((i - 11) + 5))]; 216 } GetEmit39(size_t,size_t emit)217 static inline uint64_t GetEmit39(size_t, size_t emit) { 218 return table39_0_emit_[emit]; 219 } GetOp42(size_t i)220 static inline uint64_t GetOp42(size_t i) { 221 return (i < 1 ? (((void)i, 0)) : (((void)(i - 1), 1))); 222 } GetEmit42(size_t,size_t emit)223 static inline uint64_t GetEmit42(size_t, size_t emit) { 224 return ((void)emit, 239); 225 } GetOp41(size_t i)226 static inline uint64_t GetOp41(size_t i) { 227 return table41_0_inner_[(i < 1 ? (((void)i, 0)) : ((i - 1)))]; 228 } GetEmit41(size_t,size_t emit)229 static inline uint64_t GetEmit41(size_t, size_t emit) { 230 return table41_0_emit_[emit]; 231 } GetOp44(size_t i)232 static inline uint64_t GetOp44(size_t i) { return table44_0_ops_[i]; } GetEmit44(size_t,size_t emit)233 static inline uint64_t GetEmit44(size_t, size_t emit) { 234 return table44_0_emit_[emit]; 235 } GetOp45(size_t i)236 static inline uint64_t GetOp45(size_t i) { return table45_0_ops_[i]; } GetEmit45(size_t,size_t emit)237 static inline uint64_t GetEmit45(size_t, size_t emit) { 238 return table45_0_emit_[emit]; 239 } GetOp46(size_t i)240 static inline uint64_t GetOp46(size_t i) { return table46_0_ops_[i]; } GetEmit46(size_t,size_t emit)241 static inline uint64_t GetEmit46(size_t, size_t emit) { 242 return table46_0_emit_[emit]; 243 } GetOp47(size_t i)244 static inline uint64_t GetOp47(size_t i) { return table47_0_ops_[i]; } GetEmit47(size_t,size_t emit)245 static inline uint64_t GetEmit47(size_t, size_t emit) { 246 return table46_0_emit_[emit]; 247 } GetOp43(size_t i)248 static inline uint64_t GetOp43(size_t i) { 249 return table43_ops_[i >> 5][i & 0x1f]; 250 } GetEmit43(size_t i,size_t emit)251 static inline uint64_t GetEmit43(size_t i, size_t emit) { 252 return table43_emit_[i >> 5][emit]; 253 } 254 255 private: 256 static const uint8_t table2_0_emit_[10]; 257 static const uint8_t table2_0_ops_[32]; 258 static const uint8_t table3_0_emit_[36]; 259 static const uint8_t table3_0_ops_[64]; 260 static const uint8_t table1_0_emit_[68]; 261 static const uint16_t table1_0_inner_[72]; 262 static const uint8_t table1_0_outer_[128]; 263 static const uint8_t table8_0_emit_[5]; 264 static const uint8_t table8_0_inner_[7]; 265 static const uint8_t table9_0_emit_[8]; 266 static const uint8_t table9_0_inner_[10]; 267 static const uint8_t table9_0_outer_[16]; 268 static const uint8_t table10_0_emit_[10]; 269 static const uint8_t table10_0_ops_[32]; 270 static const uint8_t table11_0_emit_[16]; 271 static const uint8_t table11_0_ops_[64]; 272 static const uint8_t table12_0_emit_[18]; 273 static const uint8_t table12_0_ops_[128]; 274 static const uint8_t table13_0_emit_[40]; 275 static const uint8_t table13_0_ops_[64]; 276 static const uint8_t table13_1_emit_[40]; 277 static const uint8_t table13_2_emit_[22]; 278 static const uint8_t table13_2_ops_[64]; 279 static const uint8_t table13_3_emit_[14]; 280 static const uint8_t table13_3_ops_[64]; 281 static const uint8_t* const table13_emit_[4]; 282 static const uint8_t* const table13_ops_[4]; 283 static const uint8_t table14_0_emit_[72]; 284 static const uint16_t table14_0_ops_[64]; 285 static const uint8_t table14_1_emit_[72]; 286 static const uint8_t table14_2_emit_[72]; 287 static const uint8_t table14_3_emit_[72]; 288 static const uint8_t table14_4_emit_[72]; 289 static const uint8_t table14_5_emit_[40]; 290 static const uint16_t table14_5_ops_[64]; 291 static const uint8_t table14_6_emit_[22]; 292 static const uint16_t table14_6_ops_[64]; 293 static const uint8_t table14_7_emit_[11]; 294 static const uint16_t table14_7_ops_[64]; 295 static const uint8_t* const table14_emit_[8]; 296 static const uint16_t* const table14_ops_[8]; 297 static const uint8_t table15_0_emit_[44]; 298 static const uint16_t table15_0_ops_[64]; 299 static const uint8_t table15_1_emit_[92]; 300 static const uint16_t table15_1_ops_[64]; 301 static const uint8_t table15_2_emit_[44]; 302 static const uint8_t table15_3_emit_[92]; 303 static const uint8_t table15_4_emit_[44]; 304 static const uint8_t table15_5_emit_[92]; 305 static const uint8_t table15_6_emit_[44]; 306 static const uint8_t table15_7_emit_[92]; 307 static const uint8_t table15_8_emit_[44]; 308 static const uint8_t table15_9_emit_[92]; 309 static const uint8_t table15_10_emit_[72]; 310 static const uint8_t table15_11_emit_[72]; 311 static const uint8_t table15_12_emit_[72]; 312 static const uint8_t table15_13_emit_[40]; 313 static const uint8_t table15_14_emit_[4]; 314 static const uint16_t table15_14_ops_[64]; 315 static const uint8_t table15_15_emit_[7]; 316 static const uint16_t table15_15_ops_[64]; 317 static const uint8_t* const table15_emit_[16]; 318 static const uint16_t* const table15_ops_[16]; 319 static const uint8_t table16_0_emit_[16]; 320 static const uint16_t table16_0_ops_[64]; 321 static const uint8_t table16_1_emit_[28]; 322 static const uint16_t table16_1_ops_[64]; 323 static const uint8_t table16_2_emit_[36]; 324 static const uint16_t table16_2_ops_[64]; 325 static const uint8_t table16_3_emit_[68]; 326 static const uint16_t table16_3_ops_[64]; 327 static const uint8_t table16_4_emit_[16]; 328 static const uint8_t table16_5_emit_[28]; 329 static const uint8_t table16_6_emit_[36]; 330 static const uint8_t table16_7_emit_[68]; 331 static const uint8_t table16_8_emit_[16]; 332 static const uint8_t table16_9_emit_[28]; 333 static const uint8_t table16_10_emit_[36]; 334 static const uint8_t table16_11_emit_[68]; 335 static const uint8_t table16_12_emit_[16]; 336 static const uint8_t table16_13_emit_[28]; 337 static const uint8_t table16_14_emit_[36]; 338 static const uint8_t table16_15_emit_[68]; 339 static const uint8_t table16_16_emit_[16]; 340 static const uint8_t table16_17_emit_[28]; 341 static const uint8_t table16_18_emit_[36]; 342 static const uint8_t table16_19_emit_[68]; 343 static const uint8_t table16_20_emit_[44]; 344 static const uint8_t table16_21_emit_[92]; 345 static const uint8_t table16_22_emit_[44]; 346 static const uint8_t table16_23_emit_[92]; 347 static const uint8_t table16_24_emit_[44]; 348 static const uint8_t table16_25_emit_[92]; 349 static const uint8_t table16_26_emit_[72]; 350 static const uint8_t table16_27_emit_[72]; 351 static const uint8_t table16_28_emit_[40]; 352 static const uint8_t table16_29_emit_[40]; 353 static const uint8_t table16_30_emit_[40]; 354 static const uint8_t table16_31_emit_[5]; 355 static const uint16_t table16_31_ops_[64]; 356 static const uint8_t* const table16_emit_[32]; 357 static const uint16_t* const table16_ops_[32]; 358 static const uint16_t table17_0_ops_[128]; 359 static const uint16_t table17_1_ops_[128]; 360 static const uint16_t table17_2_ops_[128]; 361 static const uint16_t table17_3_ops_[128]; 362 static const uint16_t table17_20_ops_[128]; 363 static const uint8_t table17_21_emit_[104]; 364 static const uint16_t table17_21_ops_[128]; 365 static const uint8_t table17_23_emit_[104]; 366 static const uint8_t table17_25_emit_[104]; 367 static const uint8_t table17_26_emit_[136]; 368 static const uint16_t table17_26_ops_[128]; 369 static const uint8_t table17_27_emit_[136]; 370 static const uint8_t table17_28_emit_[144]; 371 static const uint16_t table17_28_ops_[128]; 372 static const uint8_t table17_29_emit_[144]; 373 static const uint8_t table17_30_emit_[144]; 374 static const uint8_t table17_31_emit_[46]; 375 static const uint16_t table17_31_ops_[128]; 376 static const uint8_t* const table17_emit_[32]; 377 static const uint16_t* const table17_ops_[32]; 378 static const uint8_t table18_0_emit_[60]; 379 static const uint16_t table18_0_ops_[64]; 380 static const uint8_t table18_1_emit_[60]; 381 static const uint8_t table18_2_emit_[60]; 382 static const uint8_t table18_3_emit_[60]; 383 static const uint8_t table18_4_emit_[60]; 384 static const uint8_t table18_5_emit_[8]; 385 static const uint16_t table18_5_ops_[64]; 386 static const uint8_t table18_6_emit_[8]; 387 static const uint8_t table18_7_emit_[8]; 388 static const uint8_t table18_8_emit_[8]; 389 static const uint8_t table18_9_emit_[8]; 390 static const uint8_t table18_10_emit_[8]; 391 static const uint8_t table18_11_emit_[12]; 392 static const uint16_t table18_11_ops_[64]; 393 static const uint8_t table18_12_emit_[16]; 394 static const uint16_t table18_12_ops_[64]; 395 static const uint8_t table18_13_emit_[16]; 396 static const uint8_t table18_14_emit_[16]; 397 static const uint8_t table18_15_emit_[29]; 398 static const uint16_t table18_15_ops_[64]; 399 static const uint8_t table18_16_emit_[60]; 400 static const uint8_t table18_17_emit_[60]; 401 static const uint8_t table18_18_emit_[60]; 402 static const uint8_t table18_19_emit_[60]; 403 static const uint8_t table18_20_emit_[60]; 404 static const uint8_t table18_21_emit_[8]; 405 static const uint8_t table18_22_emit_[8]; 406 static const uint8_t table18_23_emit_[8]; 407 static const uint8_t table18_24_emit_[8]; 408 static const uint8_t table18_25_emit_[8]; 409 static const uint8_t table18_26_emit_[8]; 410 static const uint8_t table18_27_emit_[12]; 411 static const uint8_t table18_28_emit_[16]; 412 static const uint8_t table18_29_emit_[16]; 413 static const uint8_t table18_30_emit_[16]; 414 static const uint8_t table18_31_emit_[29]; 415 static const uint16_t table18_31_ops_[64]; 416 static const uint8_t table18_32_emit_[60]; 417 static const uint8_t table18_33_emit_[60]; 418 static const uint8_t table18_34_emit_[60]; 419 static const uint8_t table18_35_emit_[60]; 420 static const uint8_t table18_36_emit_[60]; 421 static const uint8_t table18_37_emit_[8]; 422 static const uint8_t table18_38_emit_[8]; 423 static const uint8_t table18_39_emit_[8]; 424 static const uint8_t table18_40_emit_[8]; 425 static const uint8_t table18_41_emit_[8]; 426 static const uint8_t table18_42_emit_[8]; 427 static const uint8_t table18_43_emit_[12]; 428 static const uint8_t table18_44_emit_[16]; 429 static const uint8_t table18_45_emit_[16]; 430 static const uint8_t table18_46_emit_[16]; 431 static const uint8_t table18_47_emit_[29]; 432 static const uint16_t table18_47_ops_[64]; 433 static const uint8_t table18_48_emit_[60]; 434 static const uint8_t table18_49_emit_[60]; 435 static const uint8_t table18_50_emit_[60]; 436 static const uint8_t table18_51_emit_[60]; 437 static const uint8_t table18_52_emit_[60]; 438 static const uint8_t table18_53_emit_[8]; 439 static const uint8_t table18_54_emit_[8]; 440 static const uint8_t table18_55_emit_[8]; 441 static const uint8_t table18_56_emit_[8]; 442 static const uint8_t table18_57_emit_[8]; 443 static const uint8_t table18_58_emit_[8]; 444 static const uint8_t table18_59_emit_[12]; 445 static const uint8_t table18_60_emit_[16]; 446 static const uint8_t table18_61_emit_[16]; 447 static const uint8_t table18_62_emit_[16]; 448 static const uint8_t table18_63_emit_[29]; 449 static const uint16_t table18_63_ops_[64]; 450 static const uint8_t table18_64_emit_[60]; 451 static const uint8_t table18_65_emit_[60]; 452 static const uint8_t table18_66_emit_[60]; 453 static const uint8_t table18_67_emit_[60]; 454 static const uint8_t table18_68_emit_[60]; 455 static const uint8_t table18_69_emit_[8]; 456 static const uint8_t table18_70_emit_[8]; 457 static const uint8_t table18_71_emit_[8]; 458 static const uint8_t table18_72_emit_[8]; 459 static const uint8_t table18_73_emit_[8]; 460 static const uint8_t table18_74_emit_[8]; 461 static const uint8_t table18_75_emit_[12]; 462 static const uint8_t table18_76_emit_[16]; 463 static const uint8_t table18_77_emit_[16]; 464 static const uint8_t table18_78_emit_[16]; 465 static const uint8_t table18_79_emit_[30]; 466 static const uint16_t table18_79_ops_[64]; 467 static const uint8_t table18_80_emit_[8]; 468 static const uint8_t table18_81_emit_[8]; 469 static const uint8_t table18_82_emit_[12]; 470 static const uint8_t table18_83_emit_[16]; 471 static const uint8_t table18_84_emit_[16]; 472 static const uint8_t table18_85_emit_[20]; 473 static const uint16_t table18_85_ops_[64]; 474 static const uint8_t table18_86_emit_[32]; 475 static const uint16_t table18_86_ops_[64]; 476 static const uint8_t table18_87_emit_[36]; 477 static const uint16_t table18_87_ops_[64]; 478 static const uint8_t table18_88_emit_[8]; 479 static const uint8_t table18_89_emit_[8]; 480 static const uint8_t table18_90_emit_[12]; 481 static const uint8_t table18_91_emit_[16]; 482 static const uint8_t table18_92_emit_[16]; 483 static const uint8_t table18_93_emit_[20]; 484 static const uint8_t table18_94_emit_[32]; 485 static const uint8_t table18_95_emit_[36]; 486 static const uint8_t table18_96_emit_[8]; 487 static const uint8_t table18_97_emit_[8]; 488 static const uint8_t table18_98_emit_[12]; 489 static const uint8_t table18_99_emit_[16]; 490 static const uint8_t table18_100_emit_[16]; 491 static const uint8_t table18_101_emit_[20]; 492 static const uint8_t table18_102_emit_[32]; 493 static const uint8_t table18_103_emit_[36]; 494 static const uint8_t table18_104_emit_[16]; 495 static const uint8_t table18_105_emit_[28]; 496 static const uint16_t table18_105_ops_[64]; 497 static const uint8_t table18_106_emit_[36]; 498 static const uint16_t table18_106_ops_[64]; 499 static const uint8_t table18_107_emit_[68]; 500 static const uint16_t table18_107_ops_[64]; 501 static const uint8_t table18_108_emit_[16]; 502 static const uint8_t table18_109_emit_[28]; 503 static const uint8_t table18_110_emit_[36]; 504 static const uint8_t table18_111_emit_[68]; 505 static const uint8_t table18_112_emit_[44]; 506 static const uint16_t table18_112_ops_[64]; 507 static const uint8_t table18_113_emit_[92]; 508 static const uint16_t table18_113_ops_[64]; 509 static const uint8_t table18_114_emit_[44]; 510 static const uint8_t table18_115_emit_[92]; 511 static const uint8_t table18_116_emit_[44]; 512 static const uint8_t table18_117_emit_[92]; 513 static const uint8_t table18_118_emit_[44]; 514 static const uint8_t table18_119_emit_[92]; 515 static const uint8_t table18_120_emit_[44]; 516 static const uint8_t table18_121_emit_[92]; 517 static const uint8_t table18_122_emit_[44]; 518 static const uint8_t table18_123_emit_[92]; 519 static const uint8_t table18_124_emit_[72]; 520 static const uint16_t table18_124_ops_[64]; 521 static const uint8_t table18_125_emit_[72]; 522 static const uint8_t table18_126_emit_[40]; 523 static const uint16_t table18_126_ops_[64]; 524 static const uint8_t table18_127_emit_[31]; 525 static const uint16_t table18_127_ops_[64]; 526 static const uint8_t* const table18_emit_[128]; 527 static const uint16_t* const table18_ops_[128]; 528 static const uint8_t table7_0_emit_[1]; 529 static const uint16_t table7_0_ops_[256]; 530 static const uint8_t table7_8_emit_[1]; 531 static const uint8_t table7_16_emit_[1]; 532 static const uint8_t table7_24_emit_[1]; 533 static const uint8_t table7_32_emit_[1]; 534 static const uint8_t table7_40_emit_[1]; 535 static const uint16_t table7_40_ops_[256]; 536 static const uint8_t table7_44_emit_[1]; 537 static const uint8_t table7_48_emit_[1]; 538 static const uint8_t table7_52_emit_[1]; 539 static const uint16_t table7_52_ops_[256]; 540 static const uint8_t table7_54_emit_[1]; 541 static const uint8_t table7_56_emit_[1]; 542 static const uint16_t table7_56_ops_[256]; 543 static const uint8_t table7_57_emit_[1]; 544 static const uint8_t table7_58_emit_[1]; 545 static const uint8_t table7_59_emit_[1]; 546 static const uint8_t table7_60_emit_[1]; 547 static const uint8_t table7_61_emit_[1]; 548 static const uint8_t table7_62_emit_[2]; 549 static const uint16_t table7_62_ops_[256]; 550 static const uint8_t table7_63_emit_[27]; 551 static const uint16_t table7_63_ops_[256]; 552 static const uint8_t* const table7_emit_[64]; 553 static const uint16_t* const table7_ops_[64]; 554 static const uint8_t table40_0_emit_[6]; 555 static const uint8_t table40_0_inner_[7]; 556 static const uint8_t table39_0_emit_[10]; 557 static const uint8_t table39_0_inner_[10]; 558 static const uint8_t table41_0_emit_[7]; 559 static const uint8_t table41_0_inner_[7]; 560 static const uint8_t table44_0_emit_[15]; 561 static const uint8_t table44_0_ops_[32]; 562 static const uint8_t table45_0_emit_[34]; 563 static const uint8_t table45_0_ops_[64]; 564 static const uint8_t table46_0_emit_[63]; 565 static const uint8_t table46_0_ops_[128]; 566 static const uint8_t table47_0_ops_[256]; 567 static const uint8_t table43_0_emit_[2]; 568 static const uint16_t table43_0_ops_[32]; 569 static const uint8_t table43_1_emit_[2]; 570 static const uint8_t table43_2_emit_[2]; 571 static const uint8_t table43_3_emit_[2]; 572 static const uint8_t table43_4_emit_[2]; 573 static const uint8_t table43_5_emit_[2]; 574 static const uint8_t table43_6_emit_[2]; 575 static const uint8_t table43_7_emit_[3]; 576 static const uint16_t table43_7_ops_[32]; 577 static const uint8_t table43_8_emit_[4]; 578 static const uint16_t table43_8_ops_[32]; 579 static const uint8_t table43_9_emit_[4]; 580 static const uint8_t table43_10_emit_[4]; 581 static const uint8_t table43_11_emit_[4]; 582 static const uint8_t table43_12_emit_[7]; 583 static const uint16_t table43_12_ops_[32]; 584 static const uint8_t table43_13_emit_[8]; 585 static const uint16_t table43_13_ops_[32]; 586 static const uint8_t table43_14_emit_[8]; 587 static const uint8_t table43_15_emit_[10]; 588 static const uint16_t table43_15_ops_[32]; 589 static const uint8_t* const table43_emit_[16]; 590 static const uint16_t* const table43_ops_[16]; 591 }; 592 template <typename F> 593 class HuffDecoder : public HuffDecoderCommon { 594 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)595 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 596 : sink_(sink), begin_(begin), end_(end) {} Run()597 bool Run() { 598 while (!done_) { 599 if (!RefillTo7()) { 600 Done0(); 601 break; 602 } 603 const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f; 604 const auto op = GetOp1(index); 605 const int consumed = op & 7; 606 buffer_len_ -= consumed; 607 const auto emit_ofs = op >> 6; 608 switch ((op >> 3) & 7) { 609 case 0: { 610 sink_(GetEmit1(index, emit_ofs + 0)); 611 break; 612 } 613 case 1: { 614 DecodeStep0(); 615 break; 616 } 617 case 2: { 618 DecodeStep1(); 619 break; 620 } 621 case 3: { 622 DecodeStep2(); 623 break; 624 } 625 case 4: { 626 DecodeStep3(); 627 break; 628 } 629 } 630 } 631 return ok_; 632 } 633 634 private: RefillTo7()635 bool RefillTo7() { 636 switch (buffer_len_) { 637 case 0: { 638 return Read1to8Bytes(); 639 } 640 case 1: 641 case 2: 642 case 3: 643 case 4: 644 case 5: 645 case 6: { 646 return Read1to7Bytes(); 647 } 648 } 649 return true; 650 } Read1to8Bytes()651 bool Read1to8Bytes() { 652 switch (end_ - begin_) { 653 case 0: { 654 return false; 655 } 656 case 1: { 657 Fill1(); 658 return true; 659 } 660 case 2: { 661 Fill2(); 662 return true; 663 } 664 case 3: { 665 Fill3(); 666 return true; 667 } 668 case 4: { 669 Fill4(); 670 return true; 671 } 672 case 5: { 673 Fill5(); 674 return true; 675 } 676 case 6: { 677 Fill6(); 678 return true; 679 } 680 case 7: { 681 Fill7(); 682 return true; 683 } 684 default: { 685 Fill8(); 686 return true; 687 } 688 } 689 } Fill1()690 void Fill1() { 691 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 692 begin_ += 1; 693 buffer_len_ += 8; 694 } Fill2()695 void Fill2() { 696 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 697 (static_cast<uint64_t>(begin_[1]) << 0); 698 begin_ += 2; 699 buffer_len_ += 16; 700 } Fill3()701 void Fill3() { 702 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 703 (static_cast<uint64_t>(begin_[1]) << 8) | 704 (static_cast<uint64_t>(begin_[2]) << 0); 705 begin_ += 3; 706 buffer_len_ += 24; 707 } Fill4()708 void Fill4() { 709 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 710 (static_cast<uint64_t>(begin_[1]) << 16) | 711 (static_cast<uint64_t>(begin_[2]) << 8) | 712 (static_cast<uint64_t>(begin_[3]) << 0); 713 begin_ += 4; 714 buffer_len_ += 32; 715 } Fill5()716 void Fill5() { 717 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 718 (static_cast<uint64_t>(begin_[1]) << 24) | 719 (static_cast<uint64_t>(begin_[2]) << 16) | 720 (static_cast<uint64_t>(begin_[3]) << 8) | 721 (static_cast<uint64_t>(begin_[4]) << 0); 722 begin_ += 5; 723 buffer_len_ += 40; 724 } Fill6()725 void Fill6() { 726 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 727 (static_cast<uint64_t>(begin_[1]) << 32) | 728 (static_cast<uint64_t>(begin_[2]) << 24) | 729 (static_cast<uint64_t>(begin_[3]) << 16) | 730 (static_cast<uint64_t>(begin_[4]) << 8) | 731 (static_cast<uint64_t>(begin_[5]) << 0); 732 begin_ += 6; 733 buffer_len_ += 48; 734 } Fill7()735 void Fill7() { 736 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 737 (static_cast<uint64_t>(begin_[1]) << 40) | 738 (static_cast<uint64_t>(begin_[2]) << 32) | 739 (static_cast<uint64_t>(begin_[3]) << 24) | 740 (static_cast<uint64_t>(begin_[4]) << 16) | 741 (static_cast<uint64_t>(begin_[5]) << 8) | 742 (static_cast<uint64_t>(begin_[6]) << 0); 743 begin_ += 7; 744 buffer_len_ += 56; 745 } Fill8()746 void Fill8() { 747 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 748 (static_cast<uint64_t>(begin_[1]) << 48) | 749 (static_cast<uint64_t>(begin_[2]) << 40) | 750 (static_cast<uint64_t>(begin_[3]) << 32) | 751 (static_cast<uint64_t>(begin_[4]) << 24) | 752 (static_cast<uint64_t>(begin_[5]) << 16) | 753 (static_cast<uint64_t>(begin_[6]) << 8) | 754 (static_cast<uint64_t>(begin_[7]) << 0); 755 begin_ += 8; 756 buffer_len_ += 64; 757 } Read1to7Bytes()758 bool Read1to7Bytes() { 759 switch (end_ - begin_) { 760 case 0: { 761 return false; 762 } 763 case 1: { 764 Fill1(); 765 return true; 766 } 767 case 2: { 768 Fill2(); 769 return true; 770 } 771 case 3: { 772 Fill3(); 773 return true; 774 } 775 case 4: { 776 Fill4(); 777 return true; 778 } 779 case 5: { 780 Fill5(); 781 return true; 782 } 783 case 6: { 784 Fill6(); 785 return true; 786 } 787 default: { 788 Fill7(); 789 return true; 790 } 791 } 792 } Done0()793 void Done0() { 794 done_ = true; 795 switch (buffer_len_) { 796 case 1: 797 case 2: 798 case 3: 799 case 4: { 800 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 801 return; 802 } 803 case 5: { 804 const auto index = buffer_ & 31; 805 const auto op = GetOp2(index); 806 switch (op & 3) { 807 case 0: { 808 sink_(GetEmit2(index, (op >> 2) + 0)); 809 break; 810 } 811 case 1: { 812 ok_ = false; 813 break; 814 } 815 } 816 return; 817 } 818 case 6: { 819 const auto index = buffer_ & 63; 820 const auto op = GetOp3(index); 821 switch (op & 3) { 822 case 0: { 823 ok_ = false; 824 break; 825 } 826 case 1: { 827 sink_(GetEmit3(index, (op >> 2) + 0)); 828 break; 829 } 830 } 831 return; 832 } 833 case 0: { 834 return; 835 } 836 } 837 } DecodeStep0()838 void DecodeStep0() { 839 if (!RefillTo1()) { 840 Done1(); 841 return; 842 } 843 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 844 const auto op = GetOp4(index); 845 const int consumed = op & 1; 846 buffer_len_ -= consumed; 847 const auto emit_ofs = op >> 1; 848 sink_(GetEmit4(index, emit_ofs + 0)); 849 } RefillTo1()850 bool RefillTo1() { 851 switch (buffer_len_) { 852 case 0: { 853 return Read1to8Bytes(); 854 } 855 } 856 return true; 857 } Done1()858 void Done1() { 859 done_ = true; 860 ok_ = false; 861 } DecodeStep1()862 void DecodeStep1() { 863 if (!RefillTo1()) { 864 Done2(); 865 return; 866 } 867 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 868 const auto op = GetOp5(index); 869 const int consumed = op & 1; 870 buffer_len_ -= consumed; 871 const auto emit_ofs = op >> 1; 872 sink_(GetEmit5(index, emit_ofs + 0)); 873 } Done2()874 void Done2() { 875 done_ = true; 876 ok_ = false; 877 } DecodeStep2()878 void DecodeStep2() { 879 if (!RefillTo1()) { 880 Done3(); 881 return; 882 } 883 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 884 const auto op = GetOp6(index); 885 const int consumed = op & 1; 886 buffer_len_ -= consumed; 887 const auto emit_ofs = op >> 1; 888 sink_(GetEmit6(index, emit_ofs + 0)); 889 } Done3()890 void Done3() { 891 done_ = true; 892 ok_ = false; 893 } DecodeStep3()894 void DecodeStep3() { 895 if (!RefillTo14()) { 896 Done4(); 897 return; 898 } 899 const auto index = (buffer_ >> (buffer_len_ - 14)) & 0x3fff; 900 const auto op = GetOp7(index); 901 const int consumed = op & 15; 902 buffer_len_ -= consumed; 903 const auto emit_ofs = op >> 9; 904 switch ((op >> 4) & 31) { 905 case 0: { 906 sink_(GetEmit7(index, emit_ofs + 0)); 907 break; 908 } 909 case 1: { 910 DecodeStep4(); 911 break; 912 } 913 case 2: { 914 DecodeStep5(); 915 break; 916 } 917 case 3: { 918 DecodeStep6(); 919 break; 920 } 921 case 4: { 922 DecodeStep7(); 923 break; 924 } 925 case 5: { 926 DecodeStep8(); 927 break; 928 } 929 case 6: { 930 DecodeStep9(); 931 break; 932 } 933 case 7: { 934 DecodeStep10(); 935 break; 936 } 937 case 8: { 938 DecodeStep11(); 939 break; 940 } 941 case 9: { 942 DecodeStep12(); 943 break; 944 } 945 case 10: { 946 DecodeStep13(); 947 break; 948 } 949 case 11: { 950 DecodeStep14(); 951 break; 952 } 953 case 12: { 954 DecodeStep15(); 955 break; 956 } 957 case 13: { 958 DecodeStep16(); 959 break; 960 } 961 case 14: { 962 DecodeStep17(); 963 break; 964 } 965 case 15: { 966 DecodeStep18(); 967 break; 968 } 969 case 16: { 970 DecodeStep19(); 971 break; 972 } 973 case 17: { 974 DecodeStep20(); 975 break; 976 } 977 case 18: { 978 DecodeStep21(); 979 break; 980 } 981 case 19: { 982 DecodeStep22(); 983 break; 984 } 985 case 20: { 986 DecodeStep23(); 987 break; 988 } 989 case 21: { 990 DecodeStep25(); 991 break; 992 } 993 case 22: { 994 DecodeStep24(); 995 break; 996 } 997 case 23: { 998 DecodeStep26(); 999 break; 1000 } 1001 } 1002 } RefillTo14()1003 bool RefillTo14() { 1004 switch (buffer_len_) { 1005 case 0: { 1006 return Read2to8Bytes(); 1007 } 1008 case 1: 1009 case 2: 1010 case 3: 1011 case 4: 1012 case 5: { 1013 return Read2to7Bytes(); 1014 } 1015 case 6: 1016 case 7: 1017 case 8: { 1018 return Read1to7Bytes(); 1019 } 1020 case 9: 1021 case 10: 1022 case 11: 1023 case 12: 1024 case 13: { 1025 return Read1to6Bytes(); 1026 } 1027 } 1028 return true; 1029 } Read2to8Bytes()1030 bool Read2to8Bytes() { 1031 switch (end_ - begin_) { 1032 case 0: 1033 case 1: { 1034 return false; 1035 } 1036 case 2: { 1037 Fill2(); 1038 return true; 1039 } 1040 case 3: { 1041 Fill3(); 1042 return true; 1043 } 1044 case 4: { 1045 Fill4(); 1046 return true; 1047 } 1048 case 5: { 1049 Fill5(); 1050 return true; 1051 } 1052 case 6: { 1053 Fill6(); 1054 return true; 1055 } 1056 case 7: { 1057 Fill7(); 1058 return true; 1059 } 1060 default: { 1061 Fill8(); 1062 return true; 1063 } 1064 } 1065 } Read2to7Bytes()1066 bool Read2to7Bytes() { 1067 switch (end_ - begin_) { 1068 case 0: 1069 case 1: { 1070 return false; 1071 } 1072 case 2: { 1073 Fill2(); 1074 return true; 1075 } 1076 case 3: { 1077 Fill3(); 1078 return true; 1079 } 1080 case 4: { 1081 Fill4(); 1082 return true; 1083 } 1084 case 5: { 1085 Fill5(); 1086 return true; 1087 } 1088 case 6: { 1089 Fill6(); 1090 return true; 1091 } 1092 default: { 1093 Fill7(); 1094 return true; 1095 } 1096 } 1097 } Read1to6Bytes()1098 bool Read1to6Bytes() { 1099 switch (end_ - begin_) { 1100 case 0: { 1101 return false; 1102 } 1103 case 1: { 1104 Fill1(); 1105 return true; 1106 } 1107 case 2: { 1108 Fill2(); 1109 return true; 1110 } 1111 case 3: { 1112 Fill3(); 1113 return true; 1114 } 1115 case 4: { 1116 Fill4(); 1117 return true; 1118 } 1119 case 5: { 1120 Fill5(); 1121 return true; 1122 } 1123 default: { 1124 Fill6(); 1125 return true; 1126 } 1127 } 1128 } Done4()1129 void Done4() { 1130 done_ = true; 1131 switch (end_ - begin_) { 1132 case 1: { 1133 Fill1(); 1134 break; 1135 } 1136 } 1137 switch (buffer_len_) { 1138 case 1: 1139 case 2: { 1140 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1141 return; 1142 } 1143 case 3: { 1144 const auto index = buffer_ & 7; 1145 const auto op = GetOp8(index); 1146 switch (op & 3) { 1147 case 0: { 1148 sink_(GetEmit8(index, (op >> 2) + 0)); 1149 break; 1150 } 1151 case 1: { 1152 ok_ = false; 1153 break; 1154 } 1155 } 1156 return; 1157 } 1158 case 4: { 1159 const auto index = buffer_ & 15; 1160 const auto op = GetOp9(index); 1161 switch (op & 3) { 1162 case 0: { 1163 ok_ = false; 1164 break; 1165 } 1166 case 1: { 1167 sink_(GetEmit9(index, (op >> 2) + 0)); 1168 break; 1169 } 1170 } 1171 return; 1172 } 1173 case 5: { 1174 const auto index = buffer_ & 31; 1175 const auto op = GetOp10(index); 1176 switch (op & 3) { 1177 case 0: { 1178 ok_ = false; 1179 break; 1180 } 1181 case 1: { 1182 sink_(GetEmit10(index, (op >> 2) + 0)); 1183 break; 1184 } 1185 } 1186 return; 1187 } 1188 case 6: { 1189 const auto index = buffer_ & 63; 1190 const auto op = GetOp11(index); 1191 switch (op & 3) { 1192 case 0: { 1193 ok_ = false; 1194 break; 1195 } 1196 case 1: { 1197 sink_(GetEmit11(index, (op >> 2) + 0)); 1198 break; 1199 } 1200 } 1201 return; 1202 } 1203 case 7: { 1204 const auto index = buffer_ & 127; 1205 const auto op = GetOp12(index); 1206 switch (op & 3) { 1207 case 0: { 1208 ok_ = false; 1209 break; 1210 } 1211 case 1: { 1212 sink_(GetEmit12(index, (op >> 2) + 0)); 1213 break; 1214 } 1215 } 1216 return; 1217 } 1218 case 8: { 1219 const auto index = buffer_ & 255; 1220 const auto op = GetOp13(index); 1221 switch (op & 3) { 1222 case 0: { 1223 sink_(GetEmit13(index, (op >> 2) + 0)); 1224 sink_(GetEmit13(index, (op >> 2) + 1)); 1225 break; 1226 } 1227 case 1: { 1228 ok_ = false; 1229 break; 1230 } 1231 case 2: { 1232 sink_(GetEmit13(index, (op >> 2) + 0)); 1233 break; 1234 } 1235 } 1236 return; 1237 } 1238 case 9: { 1239 const auto index = buffer_ & 511; 1240 const auto op = GetOp14(index); 1241 switch (op & 3) { 1242 case 0: { 1243 ok_ = false; 1244 break; 1245 } 1246 case 1: { 1247 sink_(GetEmit14(index, (op >> 2) + 0)); 1248 sink_(GetEmit14(index, (op >> 2) + 1)); 1249 break; 1250 } 1251 case 2: { 1252 sink_(GetEmit14(index, (op >> 2) + 0)); 1253 break; 1254 } 1255 } 1256 return; 1257 } 1258 case 10: { 1259 const auto index = buffer_ & 1023; 1260 const auto op = GetOp15(index); 1261 switch (op & 3) { 1262 case 0: { 1263 ok_ = false; 1264 break; 1265 } 1266 case 1: { 1267 sink_(GetEmit15(index, (op >> 2) + 0)); 1268 sink_(GetEmit15(index, (op >> 2) + 1)); 1269 break; 1270 } 1271 case 2: { 1272 sink_(GetEmit15(index, (op >> 2) + 0)); 1273 break; 1274 } 1275 } 1276 return; 1277 } 1278 case 11: { 1279 const auto index = buffer_ & 2047; 1280 const auto op = GetOp16(index); 1281 switch (op & 3) { 1282 case 0: { 1283 ok_ = false; 1284 break; 1285 } 1286 case 1: { 1287 sink_(GetEmit16(index, (op >> 2) + 0)); 1288 sink_(GetEmit16(index, (op >> 2) + 1)); 1289 break; 1290 } 1291 case 2: { 1292 sink_(GetEmit16(index, (op >> 2) + 0)); 1293 break; 1294 } 1295 } 1296 return; 1297 } 1298 case 12: { 1299 const auto index = buffer_ & 4095; 1300 const auto op = GetOp17(index); 1301 switch (op & 3) { 1302 case 0: { 1303 ok_ = false; 1304 break; 1305 } 1306 case 1: { 1307 sink_(GetEmit17(index, (op >> 2) + 0)); 1308 sink_(GetEmit17(index, (op >> 2) + 1)); 1309 break; 1310 } 1311 case 2: { 1312 sink_(GetEmit17(index, (op >> 2) + 0)); 1313 break; 1314 } 1315 } 1316 return; 1317 } 1318 case 13: { 1319 const auto index = buffer_ & 8191; 1320 const auto op = GetOp18(index); 1321 switch (op & 7) { 1322 case 0: { 1323 sink_(GetEmit18(index, (op >> 3) + 0)); 1324 sink_(GetEmit18(index, (op >> 3) + 1)); 1325 sink_(GetEmit18(index, (op >> 3) + 2)); 1326 break; 1327 } 1328 case 1: { 1329 ok_ = false; 1330 break; 1331 } 1332 case 2: { 1333 sink_(GetEmit18(index, (op >> 3) + 0)); 1334 sink_(GetEmit18(index, (op >> 3) + 1)); 1335 break; 1336 } 1337 case 3: { 1338 sink_(GetEmit18(index, (op >> 3) + 0)); 1339 break; 1340 } 1341 } 1342 return; 1343 } 1344 case 0: { 1345 return; 1346 } 1347 } 1348 } DecodeStep4()1349 void DecodeStep4() { 1350 if (!RefillTo1()) { 1351 Done5(); 1352 return; 1353 } 1354 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1355 const auto op = GetOp19(index); 1356 const int consumed = op & 1; 1357 buffer_len_ -= consumed; 1358 const auto emit_ofs = op >> 1; 1359 sink_(GetEmit19(index, emit_ofs + 0)); 1360 } Done5()1361 void Done5() { 1362 done_ = true; 1363 ok_ = false; 1364 } DecodeStep5()1365 void DecodeStep5() { 1366 if (!RefillTo1()) { 1367 Done6(); 1368 return; 1369 } 1370 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1371 const auto op = GetOp20(index); 1372 const int consumed = op & 1; 1373 buffer_len_ -= consumed; 1374 const auto emit_ofs = op >> 1; 1375 sink_(GetEmit20(index, emit_ofs + 0)); 1376 } Done6()1377 void Done6() { 1378 done_ = true; 1379 ok_ = false; 1380 } DecodeStep6()1381 void DecodeStep6() { 1382 if (!RefillTo1()) { 1383 Done7(); 1384 return; 1385 } 1386 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1387 const auto op = GetOp21(index); 1388 const int consumed = op & 1; 1389 buffer_len_ -= consumed; 1390 const auto emit_ofs = op >> 1; 1391 sink_(GetEmit21(index, emit_ofs + 0)); 1392 } Done7()1393 void Done7() { 1394 done_ = true; 1395 ok_ = false; 1396 } DecodeStep7()1397 void DecodeStep7() { 1398 if (!RefillTo1()) { 1399 Done8(); 1400 return; 1401 } 1402 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1403 const auto op = GetOp22(index); 1404 const int consumed = op & 1; 1405 buffer_len_ -= consumed; 1406 const auto emit_ofs = op >> 1; 1407 sink_(GetEmit22(index, emit_ofs + 0)); 1408 } Done8()1409 void Done8() { 1410 done_ = true; 1411 ok_ = false; 1412 } DecodeStep8()1413 void DecodeStep8() { 1414 if (!RefillTo1()) { 1415 Done9(); 1416 return; 1417 } 1418 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1419 const auto op = GetOp23(index); 1420 const int consumed = op & 1; 1421 buffer_len_ -= consumed; 1422 const auto emit_ofs = op >> 1; 1423 sink_(GetEmit23(index, emit_ofs + 0)); 1424 } Done9()1425 void Done9() { 1426 done_ = true; 1427 ok_ = false; 1428 } DecodeStep9()1429 void DecodeStep9() { 1430 if (!RefillTo1()) { 1431 Done10(); 1432 return; 1433 } 1434 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1435 const auto op = GetOp24(index); 1436 const int consumed = op & 1; 1437 buffer_len_ -= consumed; 1438 const auto emit_ofs = op >> 1; 1439 sink_(GetEmit24(index, emit_ofs + 0)); 1440 } Done10()1441 void Done10() { 1442 done_ = true; 1443 ok_ = false; 1444 } DecodeStep10()1445 void DecodeStep10() { 1446 if (!RefillTo1()) { 1447 Done11(); 1448 return; 1449 } 1450 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1451 const auto op = GetOp25(index); 1452 const int consumed = op & 1; 1453 buffer_len_ -= consumed; 1454 const auto emit_ofs = op >> 1; 1455 sink_(GetEmit25(index, emit_ofs + 0)); 1456 } Done11()1457 void Done11() { 1458 done_ = true; 1459 ok_ = false; 1460 } DecodeStep11()1461 void DecodeStep11() { 1462 if (!RefillTo1()) { 1463 Done12(); 1464 return; 1465 } 1466 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1467 const auto op = GetOp26(index); 1468 const int consumed = op & 1; 1469 buffer_len_ -= consumed; 1470 const auto emit_ofs = op >> 1; 1471 sink_(GetEmit26(index, emit_ofs + 0)); 1472 } Done12()1473 void Done12() { 1474 done_ = true; 1475 ok_ = false; 1476 } DecodeStep12()1477 void DecodeStep12() { 1478 if (!RefillTo1()) { 1479 Done13(); 1480 return; 1481 } 1482 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1483 const auto op = GetOp27(index); 1484 const int consumed = op & 1; 1485 buffer_len_ -= consumed; 1486 const auto emit_ofs = op >> 1; 1487 sink_(GetEmit27(index, emit_ofs + 0)); 1488 } Done13()1489 void Done13() { 1490 done_ = true; 1491 ok_ = false; 1492 } DecodeStep13()1493 void DecodeStep13() { 1494 if (!RefillTo1()) { 1495 Done14(); 1496 return; 1497 } 1498 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1499 const auto op = GetOp28(index); 1500 const int consumed = op & 1; 1501 buffer_len_ -= consumed; 1502 const auto emit_ofs = op >> 1; 1503 sink_(GetEmit28(index, emit_ofs + 0)); 1504 } Done14()1505 void Done14() { 1506 done_ = true; 1507 ok_ = false; 1508 } DecodeStep14()1509 void DecodeStep14() { 1510 if (!RefillTo1()) { 1511 Done15(); 1512 return; 1513 } 1514 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1515 const auto op = GetOp29(index); 1516 const int consumed = op & 1; 1517 buffer_len_ -= consumed; 1518 const auto emit_ofs = op >> 1; 1519 sink_(GetEmit29(index, emit_ofs + 0)); 1520 } Done15()1521 void Done15() { 1522 done_ = true; 1523 ok_ = false; 1524 } DecodeStep15()1525 void DecodeStep15() { 1526 if (!RefillTo1()) { 1527 Done16(); 1528 return; 1529 } 1530 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1531 const auto op = GetOp30(index); 1532 const int consumed = op & 1; 1533 buffer_len_ -= consumed; 1534 const auto emit_ofs = op >> 1; 1535 sink_(GetEmit30(index, emit_ofs + 0)); 1536 } Done16()1537 void Done16() { 1538 done_ = true; 1539 ok_ = false; 1540 } DecodeStep16()1541 void DecodeStep16() { 1542 if (!RefillTo1()) { 1543 Done17(); 1544 return; 1545 } 1546 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1547 const auto op = GetOp31(index); 1548 const int consumed = op & 1; 1549 buffer_len_ -= consumed; 1550 const auto emit_ofs = op >> 1; 1551 sink_(GetEmit31(index, emit_ofs + 0)); 1552 } Done17()1553 void Done17() { 1554 done_ = true; 1555 ok_ = false; 1556 } DecodeStep17()1557 void DecodeStep17() { 1558 if (!RefillTo2()) { 1559 Done18(); 1560 return; 1561 } 1562 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1563 const auto op = GetOp32(index); 1564 const int consumed = op & 3; 1565 buffer_len_ -= consumed; 1566 const auto emit_ofs = op >> 2; 1567 sink_(GetEmit32(index, emit_ofs + 0)); 1568 } RefillTo2()1569 bool RefillTo2() { 1570 switch (buffer_len_) { 1571 case 0: { 1572 return Read1to8Bytes(); 1573 } 1574 case 1: { 1575 return Read1to7Bytes(); 1576 } 1577 } 1578 return true; 1579 } Done18()1580 void Done18() { 1581 done_ = true; 1582 switch (buffer_len_) { 1583 case 1: 1584 case 0: { 1585 ok_ = false; 1586 return; 1587 } 1588 } 1589 } DecodeStep18()1590 void DecodeStep18() { 1591 if (!RefillTo2()) { 1592 Done19(); 1593 return; 1594 } 1595 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1596 const auto op = GetOp33(index); 1597 const int consumed = op & 3; 1598 buffer_len_ -= consumed; 1599 const auto emit_ofs = op >> 2; 1600 sink_(GetEmit33(index, emit_ofs + 0)); 1601 } Done19()1602 void Done19() { 1603 done_ = true; 1604 switch (buffer_len_) { 1605 case 1: 1606 case 0: { 1607 ok_ = false; 1608 return; 1609 } 1610 } 1611 } DecodeStep19()1612 void DecodeStep19() { 1613 if (!RefillTo2()) { 1614 Done20(); 1615 return; 1616 } 1617 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1618 const auto op = GetOp34(index); 1619 const int consumed = op & 3; 1620 buffer_len_ -= consumed; 1621 const auto emit_ofs = op >> 2; 1622 sink_(GetEmit34(index, emit_ofs + 0)); 1623 } Done20()1624 void Done20() { 1625 done_ = true; 1626 switch (buffer_len_) { 1627 case 1: 1628 case 0: { 1629 ok_ = false; 1630 return; 1631 } 1632 } 1633 } DecodeStep20()1634 void DecodeStep20() { 1635 if (!RefillTo2()) { 1636 Done21(); 1637 return; 1638 } 1639 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1640 const auto op = GetOp35(index); 1641 const int consumed = op & 3; 1642 buffer_len_ -= consumed; 1643 const auto emit_ofs = op >> 2; 1644 sink_(GetEmit35(index, emit_ofs + 0)); 1645 } Done21()1646 void Done21() { 1647 done_ = true; 1648 switch (buffer_len_) { 1649 case 1: 1650 case 0: { 1651 ok_ = false; 1652 return; 1653 } 1654 } 1655 } DecodeStep21()1656 void DecodeStep21() { 1657 if (!RefillTo2()) { 1658 Done22(); 1659 return; 1660 } 1661 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1662 const auto op = GetOp36(index); 1663 const int consumed = op & 3; 1664 buffer_len_ -= consumed; 1665 const auto emit_ofs = op >> 2; 1666 sink_(GetEmit36(index, emit_ofs + 0)); 1667 } Done22()1668 void Done22() { 1669 done_ = true; 1670 switch (buffer_len_) { 1671 case 1: 1672 case 0: { 1673 ok_ = false; 1674 return; 1675 } 1676 } 1677 } DecodeStep22()1678 void DecodeStep22() { 1679 if (!RefillTo2()) { 1680 Done23(); 1681 return; 1682 } 1683 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1684 const auto op = GetOp37(index); 1685 const int consumed = op & 3; 1686 buffer_len_ -= consumed; 1687 const auto emit_ofs = op >> 2; 1688 sink_(GetEmit37(index, emit_ofs + 0)); 1689 } Done23()1690 void Done23() { 1691 done_ = true; 1692 switch (buffer_len_) { 1693 case 1: 1694 case 0: { 1695 ok_ = false; 1696 return; 1697 } 1698 } 1699 } DecodeStep23()1700 void DecodeStep23() { 1701 if (!RefillTo2()) { 1702 Done24(); 1703 return; 1704 } 1705 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1706 const auto op = GetOp38(index); 1707 const int consumed = op & 3; 1708 buffer_len_ -= consumed; 1709 const auto emit_ofs = op >> 2; 1710 sink_(GetEmit38(index, emit_ofs + 0)); 1711 } Done24()1712 void Done24() { 1713 done_ = true; 1714 switch (buffer_len_) { 1715 case 1: 1716 case 0: { 1717 ok_ = false; 1718 return; 1719 } 1720 } 1721 } DecodeStep24()1722 void DecodeStep24() { 1723 if (!RefillTo4()) { 1724 Done25(); 1725 return; 1726 } 1727 const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf; 1728 const auto op = GetOp39(index); 1729 const int consumed = op & 7; 1730 buffer_len_ -= consumed; 1731 const auto emit_ofs = op >> 3; 1732 sink_(GetEmit39(index, emit_ofs + 0)); 1733 } RefillTo4()1734 bool RefillTo4() { 1735 switch (buffer_len_) { 1736 case 0: { 1737 return Read1to8Bytes(); 1738 } 1739 case 1: 1740 case 2: 1741 case 3: { 1742 return Read1to7Bytes(); 1743 } 1744 } 1745 return true; 1746 } Done25()1747 void Done25() { 1748 done_ = true; 1749 switch (buffer_len_) { 1750 case 1: 1751 case 2: 1752 case 0: { 1753 ok_ = false; 1754 return; 1755 } 1756 case 3: { 1757 const auto index = buffer_ & 7; 1758 const auto op = GetOp40(index); 1759 switch (op & 1) { 1760 case 0: { 1761 sink_(GetEmit40(index, (op >> 1) + 0)); 1762 break; 1763 } 1764 case 1: { 1765 ok_ = false; 1766 break; 1767 } 1768 } 1769 return; 1770 } 1771 } 1772 } DecodeStep25()1773 void DecodeStep25() { 1774 if (!RefillTo3()) { 1775 Done26(); 1776 return; 1777 } 1778 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1779 const auto op = GetOp41(index); 1780 const int consumed = op & 3; 1781 buffer_len_ -= consumed; 1782 const auto emit_ofs = op >> 2; 1783 sink_(GetEmit41(index, emit_ofs + 0)); 1784 } RefillTo3()1785 bool RefillTo3() { 1786 switch (buffer_len_) { 1787 case 0: { 1788 return Read1to8Bytes(); 1789 } 1790 case 1: 1791 case 2: { 1792 return Read1to7Bytes(); 1793 } 1794 } 1795 return true; 1796 } Done26()1797 void Done26() { 1798 done_ = true; 1799 switch (buffer_len_) { 1800 case 1: 1801 case 0: { 1802 ok_ = false; 1803 return; 1804 } 1805 case 2: { 1806 const auto index = buffer_ & 3; 1807 const auto op = GetOp42(index); 1808 switch (op & 1) { 1809 case 0: { 1810 sink_(GetEmit42(index, (op >> 1) + 0)); 1811 break; 1812 } 1813 case 1: { 1814 ok_ = false; 1815 break; 1816 } 1817 } 1818 return; 1819 } 1820 } 1821 } DecodeStep26()1822 void DecodeStep26() { 1823 if (!RefillTo9()) { 1824 Done27(); 1825 return; 1826 } 1827 const auto index = (buffer_ >> (buffer_len_ - 9)) & 0x1ff; 1828 const auto op = GetOp43(index); 1829 const int consumed = op & 15; 1830 buffer_len_ -= consumed; 1831 const auto emit_ofs = op >> 5; 1832 switch ((op >> 4) & 1) { 1833 case 0: { 1834 sink_(GetEmit43(index, emit_ofs + 0)); 1835 break; 1836 } 1837 case 1: { 1838 begin_ = end_; 1839 buffer_len_ = 0; 1840 break; 1841 } 1842 } 1843 } RefillTo9()1844 bool RefillTo9() { 1845 switch (buffer_len_) { 1846 case 0: { 1847 return Read2to8Bytes(); 1848 } 1849 case 1: 1850 case 2: 1851 case 3: 1852 case 4: 1853 case 5: 1854 case 6: 1855 case 7: 1856 case 8: { 1857 return Read1to7Bytes(); 1858 } 1859 } 1860 return true; 1861 } Done27()1862 void Done27() { 1863 done_ = true; 1864 switch (end_ - begin_) { 1865 case 1: { 1866 Fill1(); 1867 break; 1868 } 1869 } 1870 switch (buffer_len_) { 1871 case 1: 1872 case 2: 1873 case 3: 1874 case 4: { 1875 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1876 return; 1877 } 1878 case 5: { 1879 const auto index = buffer_ & 31; 1880 const auto op = GetOp44(index); 1881 switch (op & 3) { 1882 case 0: { 1883 sink_(GetEmit44(index, (op >> 2) + 0)); 1884 break; 1885 } 1886 case 1: { 1887 ok_ = false; 1888 break; 1889 } 1890 } 1891 return; 1892 } 1893 case 6: { 1894 const auto index = buffer_ & 63; 1895 const auto op = GetOp45(index); 1896 switch (op & 3) { 1897 case 0: { 1898 ok_ = false; 1899 break; 1900 } 1901 case 1: { 1902 sink_(GetEmit45(index, (op >> 2) + 0)); 1903 break; 1904 } 1905 } 1906 return; 1907 } 1908 case 7: { 1909 const auto index = buffer_ & 127; 1910 const auto op = GetOp46(index); 1911 switch (op & 3) { 1912 case 0: { 1913 ok_ = false; 1914 break; 1915 } 1916 case 1: { 1917 sink_(GetEmit46(index, (op >> 2) + 0)); 1918 break; 1919 } 1920 } 1921 return; 1922 } 1923 case 8: { 1924 const auto index = buffer_ & 255; 1925 const auto op = GetOp47(index); 1926 switch (op & 3) { 1927 case 0: { 1928 ok_ = false; 1929 break; 1930 } 1931 case 1: { 1932 sink_(GetEmit47(index, (op >> 2) + 0)); 1933 break; 1934 } 1935 } 1936 return; 1937 } 1938 case 0: { 1939 return; 1940 } 1941 } 1942 } 1943 F sink_; 1944 const uint8_t* begin_; 1945 const uint8_t* const end_; 1946 uint64_t buffer_ = 0; 1947 int buffer_len_ = 0; 1948 bool ok_ = true; 1949 bool done_ = false; 1950 }; 1951 } // namespace geometry_7_14_9 1952 } // namespace grpc_core 1953 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_14_9_H 1954