1 // Copyright 2023 gRPC authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // This file is autogenerated: see 16 // tools/codegen/core/gen_huffman_decompressor.cc 17 18 #ifndef GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_14_5_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_14_5_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_11_14_5 { 26 class HuffDecoderCommon { 27 protected: GetOp2(size_t i)28 static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; } GetEmit2(size_t,size_t emit)29 static inline uint64_t GetEmit2(size_t, size_t emit) { 30 return table2_0_emit_[emit]; 31 } GetOp3(size_t i)32 static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; } GetEmit3(size_t,size_t emit)33 static inline uint64_t GetEmit3(size_t, size_t emit) { 34 return table3_0_emit_[emit]; 35 } GetOp4(size_t i)36 static inline uint64_t GetOp4(size_t i) { 37 return table4_ops_[i >> 6][i & 0x3f]; 38 } GetEmit4(size_t i,size_t emit)39 static inline uint64_t GetEmit4(size_t i, size_t emit) { 40 return table4_emit_[i >> 6][emit]; 41 } GetOp5(size_t i)42 static inline uint64_t GetOp5(size_t i) { 43 return table5_ops_[i >> 7][i & 0x7f]; 44 } GetEmit5(size_t i,size_t emit)45 static inline uint64_t GetEmit5(size_t i, size_t emit) { 46 return table5_emit_[i >> 7][emit]; 47 } GetOp6(size_t i)48 static inline uint64_t GetOp6(size_t i) { 49 return table6_ops_[i >> 5][i & 0x1f]; 50 } GetEmit6(size_t i,size_t emit)51 static inline uint64_t GetEmit6(size_t i, size_t emit) { 52 return table6_emit_[i >> 5][emit]; 53 } GetOp7(size_t i)54 static inline uint64_t GetOp7(size_t i) { 55 return table7_ops_[i >> 6][i & 0x3f]; 56 } GetEmit7(size_t i,size_t emit)57 static inline uint64_t GetEmit7(size_t i, size_t emit) { 58 return table7_emit_[i >> 6][emit]; 59 } GetOp1(size_t i)60 static inline uint64_t GetOp1(size_t i) { 61 return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]]; 62 } GetEmit1(size_t i,size_t emit)63 static inline uint64_t GetEmit1(size_t i, size_t emit) { 64 return table1_emit_[i >> 6][emit]; 65 } GetOp8(size_t i)66 static inline uint64_t GetOp8(size_t i) { return i ? 3 : 1; } GetEmit8(size_t,size_t emit)67 static inline uint64_t GetEmit8(size_t, size_t emit) { 68 return emit ? 62 : 35; 69 } GetOp9(size_t i)70 static inline uint64_t GetOp9(size_t i) { 71 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 72 } GetEmit9(size_t,size_t emit)73 static inline uint64_t GetEmit9(size_t, size_t emit) { 74 return (emit < 2 ? (emit ? 36 : 0) : ((emit - 2) ? 91 : 64)); 75 } GetOp11(size_t i)76 static inline uint64_t GetOp11(size_t i) { 77 return (i < 2 ? (i ? 4 : 0) : ((i - 2) + 1)); 78 } GetEmit11(size_t,size_t emit)79 static inline uint64_t GetEmit11(size_t, size_t emit) { 80 return emit ? 126 : 93; 81 } GetOp12(size_t i)82 static inline uint64_t GetOp12(size_t i) { 83 return table12_0_inner_[table12_0_outer_[i]]; 84 } GetEmit12(size_t,size_t emit)85 static inline uint64_t GetEmit12(size_t, size_t emit) { 86 return (emit < 2 ? (emit ? 126 : 93) : ((emit - 2) ? 125 : 94)); 87 } GetOp13(size_t i)88 static inline uint64_t GetOp13(size_t i) { 89 return table13_0_inner_[table13_0_outer_[i]]; 90 } GetEmit13(size_t,size_t emit)91 static inline uint64_t GetEmit13(size_t, size_t emit) { 92 return table13_0_emit_[emit]; 93 } GetOp14(size_t i)94 static inline uint64_t GetOp14(size_t i) { return table14_0_ops_[i]; } GetEmit14(size_t,size_t emit)95 static inline uint64_t GetEmit14(size_t, size_t emit) { 96 return table13_0_emit_[emit]; 97 } GetOp15(size_t i)98 static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; } GetEmit15(size_t,size_t emit)99 static inline uint64_t GetEmit15(size_t, size_t emit) { 100 return table13_0_emit_[emit]; 101 } GetOp16(size_t i)102 static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; } GetEmit16(size_t,size_t emit)103 static inline uint64_t GetEmit16(size_t, size_t emit) { 104 return table16_0_emit_[emit]; 105 } GetOp17(size_t i)106 static inline uint64_t GetOp17(size_t i) { 107 return table17_ops_[i >> 6][i & 0x3f]; 108 } GetEmit17(size_t i,size_t emit)109 static inline uint64_t GetEmit17(size_t i, size_t emit) { 110 return table17_emit_[i >> 6][emit]; 111 } GetOp18(size_t i)112 static inline uint64_t GetOp18(size_t i) { 113 return table18_ops_[i >> 6][i & 0x3f]; 114 } GetEmit18(size_t i,size_t emit)115 static inline uint64_t GetEmit18(size_t i, size_t emit) { 116 return table18_emit_[i >> 6][emit]; 117 } GetOp19(size_t i)118 static inline uint64_t GetOp19(size_t i) { 119 return table19_ops_[i >> 6][i & 0x3f]; 120 } GetEmit19(size_t i,size_t emit)121 static inline uint64_t GetEmit19(size_t i, size_t emit) { 122 return table19_emit_[i >> 6][emit]; 123 } GetOp20(size_t i)124 static inline uint64_t GetOp20(size_t i) { 125 return table20_ops_[i >> 6][i & 0x3f]; 126 } GetEmit20(size_t i,size_t emit)127 static inline uint64_t GetEmit20(size_t i, size_t emit) { 128 return table20_emit_[i >> 6][emit]; 129 } GetOp21(size_t i)130 static inline uint64_t GetOp21(size_t i) { 131 return table21_ops_[i >> 6][i & 0x3f]; 132 } GetEmit21(size_t i,size_t emit)133 static inline uint64_t GetEmit21(size_t i, size_t emit) { 134 return table21_emit_[i >> 6][emit]; 135 } GetOp22(size_t i)136 static inline uint64_t GetOp22(size_t i) { 137 return table22_ops_[i >> 6][i & 0x3f]; 138 } GetEmit22(size_t i,size_t emit)139 static inline uint64_t GetEmit22(size_t i, size_t emit) { 140 return table22_emit_[i >> 6][emit]; 141 } GetOp10(size_t i)142 static inline uint64_t GetOp10(size_t i) { 143 return table10_ops_[i >> 9][i & 0x1ff]; 144 } GetEmit10(size_t i,size_t emit)145 static inline uint64_t GetEmit10(size_t i, size_t emit) { 146 return table10_emit_[i >> 9][emit]; 147 } GetOp23(size_t i)148 static inline uint64_t GetOp23(size_t i) { return i ? 3 : 1; } GetEmit23(size_t,size_t emit)149 static inline uint64_t GetEmit23(size_t, size_t emit) { return emit + 192; } GetOp24(size_t i)150 static inline uint64_t GetOp24(size_t i) { return i ? 3 : 1; } GetEmit24(size_t,size_t emit)151 static inline uint64_t GetEmit24(size_t, size_t emit) { return emit + 200; } GetOp25(size_t i)152 static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; } GetEmit25(size_t,size_t emit)153 static inline uint64_t GetEmit25(size_t, size_t emit) { 154 return emit ? 205 : 202; 155 } GetOp26(size_t i)156 static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; } GetEmit26(size_t,size_t emit)157 static inline uint64_t GetEmit26(size_t, size_t emit) { 158 return emit ? 213 : 210; 159 } GetOp27(size_t i)160 static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; } GetEmit27(size_t,size_t emit)161 static inline uint64_t GetEmit27(size_t, size_t emit) { return emit + 218; } GetOp28(size_t i)162 static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; } GetEmit28(size_t,size_t emit)163 static inline uint64_t GetEmit28(size_t, size_t emit) { 164 return emit ? 240 : 238; 165 } GetOp29(size_t i)166 static inline uint64_t GetOp29(size_t i) { return i ? 3 : 1; } GetEmit29(size_t,size_t emit)167 static inline uint64_t GetEmit29(size_t, size_t emit) { return emit + 242; } GetOp30(size_t i)168 static inline uint64_t GetOp30(size_t i) { 169 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 170 } GetEmit30(size_t,size_t emit)171 static inline uint64_t GetEmit30(size_t, size_t emit) { 172 return (emit < 2 ? (emit + 211) : ((emit - 2) ? 221 : 214)); 173 } GetOp31(size_t i)174 static inline uint64_t GetOp31(size_t i) { 175 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 176 } GetEmit31(size_t,size_t emit)177 static inline uint64_t GetEmit31(size_t, size_t emit) { 178 return (emit < 2 ? (emit + 222) : ((emit - 2) ? 244 : 241)); 179 } GetOp32(size_t i)180 static inline uint64_t GetOp32(size_t i) { 181 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 182 } GetEmit32(size_t,size_t emit)183 static inline uint64_t GetEmit32(size_t, size_t emit) { return emit + 245; } GetOp33(size_t i)184 static inline uint64_t GetOp33(size_t i) { 185 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 186 } GetEmit33(size_t,size_t emit)187 static inline uint64_t GetEmit33(size_t, size_t emit) { return emit + 250; } GetOp34(size_t i)188 static inline uint64_t GetOp34(size_t i) { return table34_0_inner_[i]; } GetEmit34(size_t,size_t emit)189 static inline uint64_t GetEmit34(size_t, size_t emit) { 190 return table34_0_emit_[emit]; 191 } GetOp35(size_t i)192 static inline uint64_t GetOp35(size_t i) { return table34_0_inner_[i]; } GetEmit35(size_t,size_t emit)193 static inline uint64_t GetEmit35(size_t, size_t emit) { 194 return (emit < 3 ? (emit + 19) : ((emit - 3) + 23)); 195 } GetOp37(size_t i)196 static inline uint64_t GetOp37(size_t i) { return i; } GetEmit37(size_t,size_t emit)197 static inline uint64_t GetEmit37(size_t, size_t emit) { 198 return ((void)emit, 255); 199 } GetOp36(size_t i)200 static inline uint64_t GetOp36(size_t i) { 201 return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1 202 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1)) 203 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6)); 204 } GetEmit36(size_t,size_t emit)205 static inline uint64_t GetEmit36(size_t, size_t emit) { 206 return (emit < 1 ? (((void)emit, 255)) : ((emit - 1) + 203)); 207 } GetOp39(size_t i)208 static inline uint64_t GetOp39(size_t i) { 209 return (i < 1 ? (((void)i, 0)) : (((void)(i - 1), 1))); 210 } GetEmit39(size_t,size_t emit)211 static inline uint64_t GetEmit39(size_t, size_t emit) { 212 return ((void)emit, 254); 213 } GetOp38(size_t i)214 static inline uint64_t GetOp38(size_t i) { 215 return table38_0_inner_[(i < 1 ? (((void)i, 0)) : ((i - 1)))]; 216 } GetEmit38(size_t,size_t emit)217 static inline uint64_t GetEmit38(size_t, size_t emit) { 218 return (emit < 1 ? (((void)emit, 254)) : ((emit - 1) + 2)); 219 } GetOp41(size_t i)220 static inline uint64_t GetOp41(size_t i) { return table41_0_inner_[i]; } GetEmit41(size_t,size_t emit)221 static inline uint64_t GetEmit41(size_t, size_t emit) { 222 return table41_0_emit_[emit]; 223 } GetOp42(size_t i)224 static inline uint64_t GetOp42(size_t i) { 225 return table13_0_inner_[table42_0_outer_[i]]; 226 } GetEmit42(size_t,size_t emit)227 static inline uint64_t GetEmit42(size_t, size_t emit) { 228 return table41_0_emit_[emit]; 229 } GetOp40(size_t i)230 static inline uint64_t GetOp40(size_t i) { return table40_0_ops_[i]; } GetEmit40(size_t,size_t emit)231 static inline uint64_t GetEmit40(size_t, size_t emit) { 232 return table40_0_emit_[emit]; 233 } 234 235 private: 236 static const uint8_t table2_0_emit_[10]; 237 static const uint8_t table2_0_ops_[32]; 238 static const uint8_t table3_0_emit_[36]; 239 static const uint8_t table3_0_ops_[64]; 240 static const uint8_t table4_0_emit_[22]; 241 static const uint8_t table4_0_ops_[64]; 242 static const uint8_t table4_1_emit_[46]; 243 static const uint8_t table4_1_ops_[64]; 244 static const uint8_t* const table4_emit_[2]; 245 static const uint8_t* const table4_ops_[2]; 246 static const uint8_t table5_0_ops_[128]; 247 static const uint8_t table5_1_emit_[52]; 248 static const uint8_t table5_1_ops_[128]; 249 static const uint8_t* const table5_emit_[2]; 250 static const uint8_t* const table5_ops_[2]; 251 static const uint8_t table6_0_emit_[2]; 252 static const uint8_t table6_0_ops_[32]; 253 static const uint8_t table6_1_emit_[2]; 254 static const uint8_t table6_2_emit_[2]; 255 static const uint8_t table6_3_emit_[2]; 256 static const uint8_t table6_4_emit_[2]; 257 static const uint8_t table6_5_emit_[4]; 258 static const uint8_t table6_5_ops_[32]; 259 static const uint8_t table6_6_emit_[4]; 260 static const uint8_t table6_7_emit_[4]; 261 static const uint8_t table6_8_emit_[4]; 262 static const uint8_t table6_9_emit_[4]; 263 static const uint8_t table6_10_emit_[4]; 264 static const uint8_t table6_11_emit_[6]; 265 static const uint8_t table6_11_ops_[32]; 266 static const uint8_t table6_12_emit_[8]; 267 static const uint8_t table6_12_ops_[32]; 268 static const uint8_t table6_13_emit_[8]; 269 static const uint8_t table6_14_emit_[8]; 270 static const uint8_t table6_15_emit_[10]; 271 static const uint8_t table6_15_ops_[32]; 272 static const uint8_t* const table6_emit_[16]; 273 static const uint8_t* const table6_ops_[16]; 274 static const uint8_t table7_0_emit_[36]; 275 static const uint8_t table7_0_ops_[64]; 276 static const uint8_t table7_1_emit_[36]; 277 static const uint8_t table7_1_ops_[64]; 278 static const uint8_t table7_2_emit_[36]; 279 static const uint8_t table7_2_ops_[64]; 280 static const uint8_t table7_3_emit_[36]; 281 static const uint8_t table7_3_ops_[64]; 282 static const uint8_t table7_4_emit_[38]; 283 static const uint8_t table7_4_ops_[64]; 284 static const uint8_t table7_5_ops_[64]; 285 static const uint8_t table7_11_ops_[64]; 286 static const uint8_t table7_12_ops_[64]; 287 static const uint8_t table7_15_emit_[15]; 288 static const uint8_t table7_15_ops_[64]; 289 static const uint8_t* const table7_emit_[16]; 290 static const uint8_t* const table7_ops_[16]; 291 static const uint8_t table1_0_emit_[71]; 292 static const uint16_t table1_0_inner_[37]; 293 static const uint8_t table1_0_outer_[64]; 294 static const uint8_t table1_1_emit_[71]; 295 static const uint16_t table1_1_inner_[37]; 296 static const uint8_t table1_2_emit_[71]; 297 static const uint16_t table1_2_inner_[37]; 298 static const uint8_t table1_3_emit_[71]; 299 static const uint16_t table1_3_inner_[37]; 300 static const uint8_t table1_4_emit_[71]; 301 static const uint16_t table1_4_inner_[37]; 302 static const uint8_t table1_5_emit_[71]; 303 static const uint16_t table1_5_inner_[37]; 304 static const uint8_t table1_6_emit_[71]; 305 static const uint16_t table1_6_inner_[37]; 306 static const uint8_t table1_7_emit_[71]; 307 static const uint16_t table1_7_inner_[37]; 308 static const uint8_t table1_8_emit_[71]; 309 static const uint16_t table1_8_inner_[37]; 310 static const uint8_t table1_9_emit_[71]; 311 static const uint16_t table1_9_inner_[37]; 312 static const uint8_t table1_10_emit_[40]; 313 static const uint16_t table1_10_inner_[22]; 314 static const uint8_t table1_10_outer_[64]; 315 static const uint8_t table1_11_emit_[40]; 316 static const uint8_t table1_12_emit_[40]; 317 static const uint8_t table1_13_emit_[40]; 318 static const uint8_t table1_14_emit_[40]; 319 static const uint8_t table1_15_emit_[40]; 320 static const uint8_t table1_16_emit_[40]; 321 static const uint8_t table1_17_emit_[40]; 322 static const uint8_t table1_18_emit_[40]; 323 static const uint8_t table1_19_emit_[40]; 324 static const uint8_t table1_20_emit_[40]; 325 static const uint8_t table1_21_emit_[40]; 326 static const uint8_t table1_22_emit_[40]; 327 static const uint8_t table1_23_emit_[4]; 328 static const uint16_t table1_23_inner_[4]; 329 static const uint8_t table1_23_outer_[64]; 330 static const uint8_t table1_24_emit_[4]; 331 static const uint8_t table1_25_emit_[4]; 332 static const uint8_t table1_26_emit_[4]; 333 static const uint8_t table1_27_emit_[4]; 334 static const uint8_t table1_28_emit_[4]; 335 static const uint8_t table1_29_emit_[4]; 336 static const uint8_t table1_30_emit_[4]; 337 static const uint8_t table1_31_emit_[14]; 338 static const uint16_t table1_31_inner_[17]; 339 static const uint8_t table1_31_outer_[64]; 340 static const uint8_t* const table1_emit_[32]; 341 static const uint16_t* const table1_inner_[32]; 342 static const uint8_t* const table1_outer_[32]; 343 static const uint8_t table12_0_inner_[6]; 344 static const uint8_t table12_0_outer_[8]; 345 static const uint8_t table13_0_emit_[7]; 346 static const uint8_t table13_0_inner_[9]; 347 static const uint8_t table13_0_outer_[16]; 348 static const uint8_t table14_0_ops_[32]; 349 static const uint8_t table15_0_ops_[64]; 350 static const uint8_t table16_0_emit_[45]; 351 static const uint8_t table16_0_ops_[128]; 352 static const uint8_t table17_0_emit_[72]; 353 static const uint16_t table17_0_ops_[64]; 354 static const uint8_t table17_1_emit_[72]; 355 static const uint8_t table17_2_emit_[40]; 356 static const uint16_t table17_2_ops_[64]; 357 static const uint8_t table17_3_emit_[6]; 358 static const uint16_t table17_3_ops_[64]; 359 static const uint8_t* const table17_emit_[4]; 360 static const uint16_t* const table17_ops_[4]; 361 static const uint8_t table18_0_emit_[44]; 362 static const uint16_t table18_0_ops_[64]; 363 static const uint8_t table18_1_emit_[92]; 364 static const uint16_t table18_1_ops_[64]; 365 static const uint8_t table18_2_emit_[44]; 366 static const uint8_t table18_3_emit_[92]; 367 static const uint8_t table18_4_emit_[72]; 368 static const uint8_t table18_5_emit_[72]; 369 static const uint8_t table18_6_emit_[40]; 370 static const uint8_t table18_7_emit_[31]; 371 static const uint16_t table18_7_ops_[64]; 372 static const uint8_t* const table18_emit_[8]; 373 static const uint16_t* const table18_ops_[8]; 374 static const uint8_t table19_0_emit_[16]; 375 static const uint16_t table19_0_ops_[64]; 376 static const uint8_t table19_1_emit_[28]; 377 static const uint16_t table19_1_ops_[64]; 378 static const uint8_t table19_2_emit_[36]; 379 static const uint16_t table19_2_ops_[64]; 380 static const uint8_t table19_3_emit_[68]; 381 static const uint16_t table19_3_ops_[64]; 382 static const uint8_t table19_4_emit_[16]; 383 static const uint8_t table19_5_emit_[28]; 384 static const uint8_t table19_6_emit_[36]; 385 static const uint8_t table19_7_emit_[68]; 386 static const uint8_t table19_8_emit_[44]; 387 static const uint8_t table19_9_emit_[92]; 388 static const uint8_t table19_10_emit_[44]; 389 static const uint8_t table19_11_emit_[92]; 390 static const uint8_t table19_12_emit_[72]; 391 static const uint8_t table19_13_emit_[72]; 392 static const uint8_t table19_14_emit_[72]; 393 static const uint8_t table19_15_emit_[24]; 394 static const uint16_t table19_15_ops_[64]; 395 static const uint8_t* const table19_emit_[16]; 396 static const uint16_t* const table19_ops_[16]; 397 static const uint8_t table20_0_emit_[8]; 398 static const uint16_t table20_0_ops_[64]; 399 static const uint8_t table20_1_emit_[8]; 400 static const uint8_t table20_2_emit_[12]; 401 static const uint16_t table20_2_ops_[64]; 402 static const uint8_t table20_3_emit_[16]; 403 static const uint8_t table20_4_emit_[16]; 404 static const uint8_t table20_5_emit_[20]; 405 static const uint16_t table20_5_ops_[64]; 406 static const uint8_t table20_6_emit_[32]; 407 static const uint16_t table20_6_ops_[64]; 408 static const uint8_t table20_7_emit_[36]; 409 static const uint16_t table20_7_ops_[64]; 410 static const uint8_t table20_8_emit_[8]; 411 static const uint8_t table20_9_emit_[8]; 412 static const uint8_t table20_10_emit_[12]; 413 static const uint8_t table20_11_emit_[16]; 414 static const uint8_t table20_12_emit_[16]; 415 static const uint8_t table20_13_emit_[20]; 416 static const uint8_t table20_14_emit_[32]; 417 static const uint8_t table20_15_emit_[36]; 418 static const uint8_t table20_16_emit_[16]; 419 static const uint8_t table20_17_emit_[28]; 420 static const uint8_t table20_18_emit_[36]; 421 static const uint8_t table20_19_emit_[68]; 422 static const uint8_t table20_20_emit_[16]; 423 static const uint8_t table20_21_emit_[28]; 424 static const uint8_t table20_22_emit_[36]; 425 static const uint8_t table20_23_emit_[68]; 426 static const uint8_t table20_24_emit_[44]; 427 static const uint8_t table20_25_emit_[92]; 428 static const uint8_t table20_26_emit_[44]; 429 static const uint8_t table20_27_emit_[92]; 430 static const uint8_t table20_28_emit_[44]; 431 static const uint8_t table20_29_emit_[92]; 432 static const uint8_t table20_30_emit_[15]; 433 static const uint16_t table20_30_ops_[64]; 434 static const uint8_t table20_31_emit_[35]; 435 static const uint16_t table20_31_ops_[64]; 436 static const uint8_t* const table20_emit_[32]; 437 static const uint16_t* const table20_ops_[32]; 438 static const uint8_t table21_0_emit_[60]; 439 static const uint16_t table21_0_ops_[64]; 440 static const uint8_t table21_1_emit_[60]; 441 static const uint8_t table21_2_emit_[60]; 442 static const uint8_t table21_3_emit_[60]; 443 static const uint8_t table21_4_emit_[60]; 444 static const uint8_t table21_5_emit_[8]; 445 static const uint16_t table21_5_ops_[64]; 446 static const uint8_t table21_6_emit_[8]; 447 static const uint8_t table21_7_emit_[8]; 448 static const uint8_t table21_8_emit_[8]; 449 static const uint8_t table21_9_emit_[8]; 450 static const uint8_t table21_10_emit_[8]; 451 static const uint8_t table21_11_emit_[12]; 452 static const uint16_t table21_11_ops_[64]; 453 static const uint8_t table21_12_emit_[16]; 454 static const uint16_t table21_12_ops_[64]; 455 static const uint8_t table21_13_emit_[16]; 456 static const uint8_t table21_14_emit_[16]; 457 static const uint8_t table21_15_emit_[30]; 458 static const uint16_t table21_15_ops_[64]; 459 static const uint8_t table21_16_emit_[60]; 460 static const uint8_t table21_17_emit_[60]; 461 static const uint8_t table21_18_emit_[60]; 462 static const uint8_t table21_19_emit_[60]; 463 static const uint8_t table21_20_emit_[60]; 464 static const uint8_t table21_21_emit_[8]; 465 static const uint8_t table21_22_emit_[8]; 466 static const uint8_t table21_23_emit_[8]; 467 static const uint8_t table21_24_emit_[8]; 468 static const uint8_t table21_25_emit_[8]; 469 static const uint8_t table21_26_emit_[8]; 470 static const uint8_t table21_27_emit_[12]; 471 static const uint8_t table21_28_emit_[16]; 472 static const uint8_t table21_29_emit_[16]; 473 static const uint8_t table21_30_emit_[16]; 474 static const uint8_t table21_31_emit_[30]; 475 static const uint8_t table21_32_emit_[8]; 476 static const uint8_t table21_33_emit_[8]; 477 static const uint8_t table21_34_emit_[12]; 478 static const uint8_t table21_35_emit_[16]; 479 static const uint8_t table21_36_emit_[16]; 480 static const uint8_t table21_37_emit_[20]; 481 static const uint16_t table21_37_ops_[64]; 482 static const uint8_t table21_38_emit_[32]; 483 static const uint16_t table21_38_ops_[64]; 484 static const uint8_t table21_39_emit_[36]; 485 static const uint16_t table21_39_ops_[64]; 486 static const uint8_t table21_40_emit_[8]; 487 static const uint8_t table21_41_emit_[8]; 488 static const uint8_t table21_42_emit_[12]; 489 static const uint8_t table21_43_emit_[16]; 490 static const uint8_t table21_44_emit_[16]; 491 static const uint8_t table21_45_emit_[20]; 492 static const uint8_t table21_46_emit_[32]; 493 static const uint8_t table21_47_emit_[36]; 494 static const uint8_t table21_48_emit_[16]; 495 static const uint8_t table21_49_emit_[28]; 496 static const uint16_t table21_49_ops_[64]; 497 static const uint8_t table21_50_emit_[36]; 498 static const uint16_t table21_50_ops_[64]; 499 static const uint8_t table21_51_emit_[68]; 500 static const uint16_t table21_51_ops_[64]; 501 static const uint8_t table21_52_emit_[16]; 502 static const uint8_t table21_53_emit_[28]; 503 static const uint8_t table21_54_emit_[36]; 504 static const uint8_t table21_55_emit_[68]; 505 static const uint8_t table21_56_emit_[16]; 506 static const uint8_t table21_57_emit_[28]; 507 static const uint8_t table21_58_emit_[36]; 508 static const uint8_t table21_59_emit_[68]; 509 static const uint8_t table21_60_emit_[5]; 510 static const uint16_t table21_60_ops_[64]; 511 static const uint8_t table21_61_emit_[10]; 512 static const uint16_t table21_61_ops_[64]; 513 static const uint8_t table21_62_emit_[23]; 514 static const uint16_t table21_62_ops_[64]; 515 static const uint8_t table21_63_emit_[41]; 516 static const uint16_t table21_63_ops_[64]; 517 static const uint8_t* const table21_emit_[64]; 518 static const uint16_t* const table21_ops_[64]; 519 static const uint8_t table22_0_emit_[108]; 520 static const uint16_t table22_0_ops_[64]; 521 static const uint8_t table22_1_emit_[108]; 522 static const uint8_t table22_2_emit_[108]; 523 static const uint8_t table22_3_emit_[108]; 524 static const uint8_t table22_4_emit_[108]; 525 static const uint8_t table22_5_emit_[108]; 526 static const uint8_t table22_6_emit_[108]; 527 static const uint8_t table22_7_emit_[108]; 528 static const uint8_t table22_8_emit_[108]; 529 static const uint8_t table22_9_emit_[108]; 530 static const uint8_t table22_10_emit_[60]; 531 static const uint16_t table22_10_ops_[64]; 532 static const uint8_t table22_11_emit_[60]; 533 static const uint8_t table22_12_emit_[60]; 534 static const uint8_t table22_13_emit_[60]; 535 static const uint8_t table22_14_emit_[60]; 536 static const uint8_t table22_15_emit_[60]; 537 static const uint8_t table22_16_emit_[60]; 538 static const uint8_t table22_17_emit_[60]; 539 static const uint8_t table22_18_emit_[60]; 540 static const uint8_t table22_19_emit_[60]; 541 static const uint8_t table22_20_emit_[60]; 542 static const uint8_t table22_21_emit_[60]; 543 static const uint8_t table22_22_emit_[60]; 544 static const uint8_t table22_23_emit_[8]; 545 static const uint16_t table22_23_ops_[64]; 546 static const uint8_t table22_24_emit_[8]; 547 static const uint8_t table22_25_emit_[8]; 548 static const uint8_t table22_26_emit_[8]; 549 static const uint8_t table22_27_emit_[8]; 550 static const uint8_t table22_28_emit_[8]; 551 static const uint8_t table22_29_emit_[8]; 552 static const uint8_t table22_30_emit_[8]; 553 static const uint8_t table22_31_emit_[28]; 554 static const uint16_t table22_31_ops_[64]; 555 static const uint8_t table22_32_emit_[108]; 556 static const uint8_t table22_33_emit_[108]; 557 static const uint8_t table22_34_emit_[108]; 558 static const uint8_t table22_35_emit_[108]; 559 static const uint8_t table22_36_emit_[108]; 560 static const uint8_t table22_37_emit_[108]; 561 static const uint8_t table22_38_emit_[108]; 562 static const uint8_t table22_39_emit_[108]; 563 static const uint8_t table22_40_emit_[108]; 564 static const uint8_t table22_41_emit_[108]; 565 static const uint8_t table22_42_emit_[60]; 566 static const uint8_t table22_43_emit_[60]; 567 static const uint8_t table22_44_emit_[60]; 568 static const uint8_t table22_45_emit_[60]; 569 static const uint8_t table22_46_emit_[60]; 570 static const uint8_t table22_47_emit_[60]; 571 static const uint8_t table22_48_emit_[60]; 572 static const uint8_t table22_49_emit_[60]; 573 static const uint8_t table22_50_emit_[60]; 574 static const uint8_t table22_51_emit_[60]; 575 static const uint8_t table22_52_emit_[60]; 576 static const uint8_t table22_53_emit_[60]; 577 static const uint8_t table22_54_emit_[60]; 578 static const uint8_t table22_55_emit_[8]; 579 static const uint8_t table22_56_emit_[8]; 580 static const uint8_t table22_57_emit_[8]; 581 static const uint8_t table22_58_emit_[8]; 582 static const uint8_t table22_59_emit_[8]; 583 static const uint8_t table22_60_emit_[8]; 584 static const uint8_t table22_61_emit_[8]; 585 static const uint8_t table22_62_emit_[8]; 586 static const uint8_t table22_63_emit_[28]; 587 static const uint8_t table22_64_emit_[60]; 588 static const uint8_t table22_65_emit_[60]; 589 static const uint8_t table22_66_emit_[60]; 590 static const uint8_t table22_67_emit_[60]; 591 static const uint8_t table22_68_emit_[60]; 592 static const uint8_t table22_69_emit_[8]; 593 static const uint8_t table22_70_emit_[8]; 594 static const uint8_t table22_71_emit_[8]; 595 static const uint8_t table22_72_emit_[8]; 596 static const uint8_t table22_73_emit_[8]; 597 static const uint8_t table22_74_emit_[8]; 598 static const uint8_t table22_75_emit_[12]; 599 static const uint16_t table22_75_ops_[64]; 600 static const uint8_t table22_76_emit_[16]; 601 static const uint16_t table22_76_ops_[64]; 602 static const uint8_t table22_77_emit_[16]; 603 static const uint8_t table22_78_emit_[16]; 604 static const uint8_t table22_79_emit_[30]; 605 static const uint16_t table22_79_ops_[64]; 606 static const uint8_t table22_80_emit_[60]; 607 static const uint8_t table22_81_emit_[60]; 608 static const uint8_t table22_82_emit_[60]; 609 static const uint8_t table22_83_emit_[60]; 610 static const uint8_t table22_84_emit_[60]; 611 static const uint8_t table22_85_emit_[8]; 612 static const uint8_t table22_86_emit_[8]; 613 static const uint8_t table22_87_emit_[8]; 614 static const uint8_t table22_88_emit_[8]; 615 static const uint8_t table22_89_emit_[8]; 616 static const uint8_t table22_90_emit_[8]; 617 static const uint8_t table22_91_emit_[12]; 618 static const uint8_t table22_92_emit_[16]; 619 static const uint8_t table22_93_emit_[16]; 620 static const uint8_t table22_94_emit_[16]; 621 static const uint8_t table22_95_emit_[30]; 622 static const uint8_t table22_96_emit_[8]; 623 static const uint8_t table22_97_emit_[8]; 624 static const uint8_t table22_98_emit_[12]; 625 static const uint8_t table22_99_emit_[16]; 626 static const uint8_t table22_100_emit_[16]; 627 static const uint8_t table22_101_emit_[20]; 628 static const uint16_t table22_101_ops_[64]; 629 static const uint8_t table22_102_emit_[32]; 630 static const uint16_t table22_102_ops_[64]; 631 static const uint8_t table22_103_emit_[36]; 632 static const uint16_t table22_103_ops_[64]; 633 static const uint8_t table22_104_emit_[8]; 634 static const uint8_t table22_105_emit_[8]; 635 static const uint8_t table22_106_emit_[12]; 636 static const uint8_t table22_107_emit_[16]; 637 static const uint8_t table22_108_emit_[16]; 638 static const uint8_t table22_109_emit_[20]; 639 static const uint8_t table22_110_emit_[32]; 640 static const uint8_t table22_111_emit_[36]; 641 static const uint8_t table22_112_emit_[8]; 642 static const uint8_t table22_113_emit_[8]; 643 static const uint8_t table22_114_emit_[12]; 644 static const uint8_t table22_115_emit_[16]; 645 static const uint8_t table22_116_emit_[16]; 646 static const uint8_t table22_117_emit_[20]; 647 static const uint8_t table22_118_emit_[32]; 648 static const uint8_t table22_119_emit_[36]; 649 static const uint8_t table22_120_emit_[40]; 650 static const uint16_t table22_120_ops_[64]; 651 static const uint8_t table22_121_emit_[22]; 652 static const uint16_t table22_121_ops_[64]; 653 static const uint8_t table22_122_emit_[4]; 654 static const uint16_t table22_122_ops_[64]; 655 static const uint8_t table22_123_emit_[6]; 656 static const uint16_t table22_123_ops_[64]; 657 static const uint8_t table22_124_emit_[8]; 658 static const uint16_t table22_124_ops_[64]; 659 static const uint8_t table22_125_emit_[15]; 660 static const uint16_t table22_125_ops_[64]; 661 static const uint8_t table22_126_emit_[20]; 662 static const uint16_t table22_126_ops_[64]; 663 static const uint8_t table22_127_emit_[33]; 664 static const uint16_t table22_127_ops_[64]; 665 static const uint8_t* const table22_emit_[128]; 666 static const uint16_t* const table22_ops_[128]; 667 static const uint8_t table10_0_emit_[1]; 668 static const uint16_t table10_0_ops_[512]; 669 static const uint8_t table10_8_emit_[1]; 670 static const uint8_t table10_16_emit_[1]; 671 static const uint16_t table10_16_ops_[512]; 672 static const uint8_t table10_20_emit_[1]; 673 static const uint8_t table10_24_emit_[1]; 674 static const uint16_t table10_24_ops_[512]; 675 static const uint8_t table10_26_emit_[1]; 676 static const uint8_t table10_28_emit_[1]; 677 static const uint16_t table10_30_ops_[512]; 678 static const uint8_t table10_31_emit_[80]; 679 static const uint16_t table10_31_ops_[512]; 680 static const uint8_t* const table10_emit_[32]; 681 static const uint16_t* const table10_ops_[32]; 682 static const uint8_t table34_0_emit_[8]; 683 static const uint8_t table34_0_inner_[8]; 684 static const uint8_t table38_0_inner_[7]; 685 static const uint8_t table41_0_emit_[7]; 686 static const uint8_t table41_0_inner_[8]; 687 static const uint8_t table42_0_outer_[16]; 688 static const uint8_t table40_0_emit_[10]; 689 static const uint8_t table40_0_ops_[32]; 690 }; 691 template <typename F> 692 class HuffDecoder : public HuffDecoderCommon { 693 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)694 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 695 : sink_(sink), begin_(begin), end_(end) {} Run()696 bool Run() { 697 while (!done_) { 698 if (!RefillTo11()) { 699 Done0(); 700 break; 701 } 702 const auto index = (buffer_ >> (buffer_len_ - 11)) & 0x7ff; 703 const auto op = GetOp1(index); 704 const int consumed = op & 15; 705 buffer_len_ -= consumed; 706 const auto emit_ofs = op >> 7; 707 switch ((op >> 4) & 7) { 708 case 0: { 709 sink_(GetEmit1(index, emit_ofs + 0)); 710 sink_(GetEmit1(index, emit_ofs + 1)); 711 break; 712 } 713 case 1: { 714 sink_(GetEmit1(index, emit_ofs + 0)); 715 break; 716 } 717 case 2: { 718 DecodeStep0(); 719 break; 720 } 721 case 3: { 722 DecodeStep1(); 723 break; 724 } 725 case 4: { 726 DecodeStep2(); 727 break; 728 } 729 } 730 } 731 return ok_; 732 } 733 734 private: RefillTo11()735 bool RefillTo11() { 736 switch (buffer_len_) { 737 case 0: { 738 return Read2to8Bytes(); 739 } 740 case 1: 741 case 2: { 742 return Read2to7Bytes(); 743 } 744 case 3: 745 case 4: 746 case 5: 747 case 6: 748 case 7: 749 case 8: { 750 return Read1to7Bytes(); 751 } 752 case 9: 753 case 10: { 754 return Read1to6Bytes(); 755 } 756 } 757 return true; 758 } Read2to8Bytes()759 bool Read2to8Bytes() { 760 switch (end_ - begin_) { 761 case 0: 762 case 1: { 763 return false; 764 } 765 case 2: { 766 Fill2(); 767 return true; 768 } 769 case 3: { 770 Fill3(); 771 return true; 772 } 773 case 4: { 774 Fill4(); 775 return true; 776 } 777 case 5: { 778 Fill5(); 779 return true; 780 } 781 case 6: { 782 Fill6(); 783 return true; 784 } 785 case 7: { 786 Fill7(); 787 return true; 788 } 789 default: { 790 Fill8(); 791 return true; 792 } 793 } 794 } Fill2()795 void Fill2() { 796 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 797 (static_cast<uint64_t>(begin_[1]) << 0); 798 begin_ += 2; 799 buffer_len_ += 16; 800 } Fill3()801 void Fill3() { 802 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 803 (static_cast<uint64_t>(begin_[1]) << 8) | 804 (static_cast<uint64_t>(begin_[2]) << 0); 805 begin_ += 3; 806 buffer_len_ += 24; 807 } Fill4()808 void Fill4() { 809 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 810 (static_cast<uint64_t>(begin_[1]) << 16) | 811 (static_cast<uint64_t>(begin_[2]) << 8) | 812 (static_cast<uint64_t>(begin_[3]) << 0); 813 begin_ += 4; 814 buffer_len_ += 32; 815 } Fill5()816 void Fill5() { 817 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 818 (static_cast<uint64_t>(begin_[1]) << 24) | 819 (static_cast<uint64_t>(begin_[2]) << 16) | 820 (static_cast<uint64_t>(begin_[3]) << 8) | 821 (static_cast<uint64_t>(begin_[4]) << 0); 822 begin_ += 5; 823 buffer_len_ += 40; 824 } Fill6()825 void Fill6() { 826 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 827 (static_cast<uint64_t>(begin_[1]) << 32) | 828 (static_cast<uint64_t>(begin_[2]) << 24) | 829 (static_cast<uint64_t>(begin_[3]) << 16) | 830 (static_cast<uint64_t>(begin_[4]) << 8) | 831 (static_cast<uint64_t>(begin_[5]) << 0); 832 begin_ += 6; 833 buffer_len_ += 48; 834 } Fill7()835 void Fill7() { 836 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 837 (static_cast<uint64_t>(begin_[1]) << 40) | 838 (static_cast<uint64_t>(begin_[2]) << 32) | 839 (static_cast<uint64_t>(begin_[3]) << 24) | 840 (static_cast<uint64_t>(begin_[4]) << 16) | 841 (static_cast<uint64_t>(begin_[5]) << 8) | 842 (static_cast<uint64_t>(begin_[6]) << 0); 843 begin_ += 7; 844 buffer_len_ += 56; 845 } Fill8()846 void Fill8() { 847 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 848 (static_cast<uint64_t>(begin_[1]) << 48) | 849 (static_cast<uint64_t>(begin_[2]) << 40) | 850 (static_cast<uint64_t>(begin_[3]) << 32) | 851 (static_cast<uint64_t>(begin_[4]) << 24) | 852 (static_cast<uint64_t>(begin_[5]) << 16) | 853 (static_cast<uint64_t>(begin_[6]) << 8) | 854 (static_cast<uint64_t>(begin_[7]) << 0); 855 begin_ += 8; 856 buffer_len_ += 64; 857 } Read2to7Bytes()858 bool Read2to7Bytes() { 859 switch (end_ - begin_) { 860 case 0: 861 case 1: { 862 return false; 863 } 864 case 2: { 865 Fill2(); 866 return true; 867 } 868 case 3: { 869 Fill3(); 870 return true; 871 } 872 case 4: { 873 Fill4(); 874 return true; 875 } 876 case 5: { 877 Fill5(); 878 return true; 879 } 880 case 6: { 881 Fill6(); 882 return true; 883 } 884 default: { 885 Fill7(); 886 return true; 887 } 888 } 889 } Read1to7Bytes()890 bool Read1to7Bytes() { 891 switch (end_ - begin_) { 892 case 0: { 893 return false; 894 } 895 case 1: { 896 Fill1(); 897 return true; 898 } 899 case 2: { 900 Fill2(); 901 return true; 902 } 903 case 3: { 904 Fill3(); 905 return true; 906 } 907 case 4: { 908 Fill4(); 909 return true; 910 } 911 case 5: { 912 Fill5(); 913 return true; 914 } 915 case 6: { 916 Fill6(); 917 return true; 918 } 919 default: { 920 Fill7(); 921 return true; 922 } 923 } 924 } Fill1()925 void Fill1() { 926 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 927 begin_ += 1; 928 buffer_len_ += 8; 929 } Read1to6Bytes()930 bool Read1to6Bytes() { 931 switch (end_ - begin_) { 932 case 0: { 933 return false; 934 } 935 case 1: { 936 Fill1(); 937 return true; 938 } 939 case 2: { 940 Fill2(); 941 return true; 942 } 943 case 3: { 944 Fill3(); 945 return true; 946 } 947 case 4: { 948 Fill4(); 949 return true; 950 } 951 case 5: { 952 Fill5(); 953 return true; 954 } 955 default: { 956 Fill6(); 957 return true; 958 } 959 } 960 } Done0()961 void Done0() { 962 done_ = true; 963 switch (end_ - begin_) { 964 case 1: { 965 Fill1(); 966 break; 967 } 968 } 969 switch (buffer_len_) { 970 case 1: 971 case 2: 972 case 3: 973 case 4: { 974 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 975 return; 976 } 977 case 5: { 978 const auto index = buffer_ & 31; 979 const auto op = GetOp2(index); 980 switch (op & 3) { 981 case 0: { 982 sink_(GetEmit2(index, (op >> 2) + 0)); 983 break; 984 } 985 case 1: { 986 ok_ = false; 987 break; 988 } 989 } 990 return; 991 } 992 case 6: { 993 const auto index = buffer_ & 63; 994 const auto op = GetOp3(index); 995 switch (op & 3) { 996 case 0: { 997 ok_ = false; 998 break; 999 } 1000 case 1: { 1001 sink_(GetEmit3(index, (op >> 2) + 0)); 1002 break; 1003 } 1004 } 1005 return; 1006 } 1007 case 7: { 1008 const auto index = buffer_ & 127; 1009 const auto op = GetOp4(index); 1010 switch (op & 3) { 1011 case 0: { 1012 ok_ = false; 1013 break; 1014 } 1015 case 1: { 1016 sink_(GetEmit4(index, (op >> 2) + 0)); 1017 break; 1018 } 1019 } 1020 return; 1021 } 1022 case 8: { 1023 const auto index = buffer_ & 255; 1024 const auto op = GetOp5(index); 1025 switch (op & 3) { 1026 case 0: { 1027 ok_ = false; 1028 break; 1029 } 1030 case 1: { 1031 sink_(GetEmit5(index, (op >> 2) + 0)); 1032 break; 1033 } 1034 } 1035 return; 1036 } 1037 case 9: { 1038 const auto index = buffer_ & 511; 1039 const auto op = GetOp6(index); 1040 switch (op & 3) { 1041 case 0: { 1042 ok_ = false; 1043 break; 1044 } 1045 case 1: { 1046 sink_(GetEmit6(index, (op >> 2) + 0)); 1047 break; 1048 } 1049 } 1050 return; 1051 } 1052 case 10: { 1053 const auto index = buffer_ & 1023; 1054 const auto op = GetOp7(index); 1055 switch (op & 3) { 1056 case 0: { 1057 sink_(GetEmit7(index, (op >> 2) + 0)); 1058 sink_(GetEmit7(index, (op >> 2) + 1)); 1059 break; 1060 } 1061 case 1: { 1062 ok_ = false; 1063 break; 1064 } 1065 case 2: { 1066 sink_(GetEmit7(index, (op >> 2) + 0)); 1067 break; 1068 } 1069 } 1070 return; 1071 } 1072 case 0: { 1073 return; 1074 } 1075 } 1076 } DecodeStep0()1077 void DecodeStep0() { 1078 if (!RefillTo1()) { 1079 Done1(); 1080 return; 1081 } 1082 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1083 const auto op = GetOp8(index); 1084 const int consumed = op & 1; 1085 buffer_len_ -= consumed; 1086 const auto emit_ofs = op >> 1; 1087 sink_(GetEmit8(index, emit_ofs + 0)); 1088 } RefillTo1()1089 bool RefillTo1() { 1090 switch (buffer_len_) { 1091 case 0: { 1092 return Read1to8Bytes(); 1093 } 1094 } 1095 return true; 1096 } Read1to8Bytes()1097 bool Read1to8Bytes() { 1098 switch (end_ - begin_) { 1099 case 0: { 1100 return false; 1101 } 1102 case 1: { 1103 Fill1(); 1104 return true; 1105 } 1106 case 2: { 1107 Fill2(); 1108 return true; 1109 } 1110 case 3: { 1111 Fill3(); 1112 return true; 1113 } 1114 case 4: { 1115 Fill4(); 1116 return true; 1117 } 1118 case 5: { 1119 Fill5(); 1120 return true; 1121 } 1122 case 6: { 1123 Fill6(); 1124 return true; 1125 } 1126 case 7: { 1127 Fill7(); 1128 return true; 1129 } 1130 default: { 1131 Fill8(); 1132 return true; 1133 } 1134 } 1135 } Done1()1136 void Done1() { 1137 done_ = true; 1138 ok_ = false; 1139 } DecodeStep1()1140 void DecodeStep1() { 1141 if (!RefillTo2()) { 1142 Done2(); 1143 return; 1144 } 1145 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1146 const auto op = GetOp9(index); 1147 const int consumed = op & 3; 1148 buffer_len_ -= consumed; 1149 const auto emit_ofs = op >> 2; 1150 sink_(GetEmit9(index, emit_ofs + 0)); 1151 } RefillTo2()1152 bool RefillTo2() { 1153 switch (buffer_len_) { 1154 case 0: { 1155 return Read1to8Bytes(); 1156 } 1157 case 1: { 1158 return Read1to7Bytes(); 1159 } 1160 } 1161 return true; 1162 } Done2()1163 void Done2() { 1164 done_ = true; 1165 switch (buffer_len_) { 1166 case 1: 1167 case 0: { 1168 ok_ = false; 1169 return; 1170 } 1171 } 1172 } DecodeStep2()1173 void DecodeStep2() { 1174 if (!RefillTo14()) { 1175 Done3(); 1176 return; 1177 } 1178 const auto index = (buffer_ >> (buffer_len_ - 14)) & 0x3fff; 1179 const auto op = GetOp10(index); 1180 const int consumed = op & 15; 1181 buffer_len_ -= consumed; 1182 const auto emit_ofs = op >> 9; 1183 switch ((op >> 4) & 31) { 1184 case 0: { 1185 sink_(GetEmit10(index, emit_ofs + 0)); 1186 break; 1187 } 1188 case 1: { 1189 DecodeStep3(); 1190 break; 1191 } 1192 case 2: { 1193 DecodeStep4(); 1194 break; 1195 } 1196 case 3: { 1197 DecodeStep5(); 1198 break; 1199 } 1200 case 4: { 1201 DecodeStep6(); 1202 break; 1203 } 1204 case 5: { 1205 DecodeStep7(); 1206 break; 1207 } 1208 case 6: { 1209 DecodeStep8(); 1210 break; 1211 } 1212 case 7: { 1213 DecodeStep9(); 1214 break; 1215 } 1216 case 8: { 1217 DecodeStep16(); 1218 break; 1219 } 1220 case 9: { 1221 DecodeStep10(); 1222 break; 1223 } 1224 case 10: { 1225 DecodeStep11(); 1226 break; 1227 } 1228 case 11: { 1229 DecodeStep12(); 1230 break; 1231 } 1232 case 12: { 1233 DecodeStep13(); 1234 break; 1235 } 1236 case 13: { 1237 DecodeStep17(); 1238 break; 1239 } 1240 case 14: { 1241 DecodeStep14(); 1242 break; 1243 } 1244 case 15: { 1245 DecodeStep15(); 1246 break; 1247 } 1248 case 16: { 1249 DecodeStep18(); 1250 break; 1251 } 1252 } 1253 } RefillTo14()1254 bool RefillTo14() { 1255 switch (buffer_len_) { 1256 case 0: { 1257 return Read2to8Bytes(); 1258 } 1259 case 1: 1260 case 2: 1261 case 3: 1262 case 4: 1263 case 5: { 1264 return Read2to7Bytes(); 1265 } 1266 case 6: 1267 case 7: 1268 case 8: { 1269 return Read1to7Bytes(); 1270 } 1271 case 9: 1272 case 10: 1273 case 11: 1274 case 12: 1275 case 13: { 1276 return Read1to6Bytes(); 1277 } 1278 } 1279 return true; 1280 } Done3()1281 void Done3() { 1282 done_ = true; 1283 switch (end_ - begin_) { 1284 case 1: { 1285 Fill1(); 1286 break; 1287 } 1288 } 1289 switch (buffer_len_) { 1290 case 1: { 1291 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1292 return; 1293 } 1294 case 2: { 1295 const auto index = buffer_ & 3; 1296 const auto op = GetOp11(index); 1297 switch (op & 3) { 1298 case 0: { 1299 sink_(GetEmit11(index, (op >> 2) + 0)); 1300 break; 1301 } 1302 case 1: { 1303 ok_ = false; 1304 break; 1305 } 1306 } 1307 return; 1308 } 1309 case 3: { 1310 const auto index = buffer_ & 7; 1311 const auto op = GetOp12(index); 1312 switch (op & 3) { 1313 case 0: { 1314 ok_ = false; 1315 break; 1316 } 1317 case 1: { 1318 sink_(GetEmit12(index, (op >> 2) + 0)); 1319 break; 1320 } 1321 } 1322 return; 1323 } 1324 case 4: { 1325 const auto index = buffer_ & 15; 1326 const auto op = GetOp13(index); 1327 switch (op & 3) { 1328 case 0: { 1329 ok_ = false; 1330 break; 1331 } 1332 case 1: { 1333 sink_(GetEmit13(index, (op >> 2) + 0)); 1334 break; 1335 } 1336 } 1337 return; 1338 } 1339 case 5: { 1340 const auto index = buffer_ & 31; 1341 const auto op = GetOp14(index); 1342 switch (op & 3) { 1343 case 0: { 1344 ok_ = false; 1345 break; 1346 } 1347 case 1: { 1348 sink_(GetEmit14(index, (op >> 2) + 0)); 1349 break; 1350 } 1351 } 1352 return; 1353 } 1354 case 6: { 1355 const auto index = buffer_ & 63; 1356 const auto op = GetOp15(index); 1357 switch (op & 3) { 1358 case 0: { 1359 ok_ = false; 1360 break; 1361 } 1362 case 1: { 1363 sink_(GetEmit15(index, (op >> 2) + 0)); 1364 break; 1365 } 1366 } 1367 return; 1368 } 1369 case 7: { 1370 const auto index = buffer_ & 127; 1371 const auto op = GetOp16(index); 1372 switch (op & 3) { 1373 case 0: { 1374 sink_(GetEmit16(index, (op >> 2) + 0)); 1375 sink_(GetEmit16(index, (op >> 2) + 1)); 1376 break; 1377 } 1378 case 1: { 1379 ok_ = false; 1380 break; 1381 } 1382 case 2: { 1383 sink_(GetEmit16(index, (op >> 2) + 0)); 1384 break; 1385 } 1386 } 1387 return; 1388 } 1389 case 8: { 1390 const auto index = buffer_ & 255; 1391 const auto op = GetOp17(index); 1392 switch (op & 3) { 1393 case 0: { 1394 ok_ = false; 1395 break; 1396 } 1397 case 1: { 1398 sink_(GetEmit17(index, (op >> 2) + 0)); 1399 sink_(GetEmit17(index, (op >> 2) + 1)); 1400 break; 1401 } 1402 case 2: { 1403 sink_(GetEmit17(index, (op >> 2) + 0)); 1404 break; 1405 } 1406 } 1407 return; 1408 } 1409 case 9: { 1410 const auto index = buffer_ & 511; 1411 const auto op = GetOp18(index); 1412 switch (op & 3) { 1413 case 0: { 1414 ok_ = false; 1415 break; 1416 } 1417 case 1: { 1418 sink_(GetEmit18(index, (op >> 2) + 0)); 1419 sink_(GetEmit18(index, (op >> 2) + 1)); 1420 break; 1421 } 1422 case 2: { 1423 sink_(GetEmit18(index, (op >> 2) + 0)); 1424 break; 1425 } 1426 } 1427 return; 1428 } 1429 case 10: { 1430 const auto index = buffer_ & 1023; 1431 const auto op = GetOp19(index); 1432 switch (op & 3) { 1433 case 0: { 1434 ok_ = false; 1435 break; 1436 } 1437 case 1: { 1438 sink_(GetEmit19(index, (op >> 2) + 0)); 1439 sink_(GetEmit19(index, (op >> 2) + 1)); 1440 break; 1441 } 1442 case 2: { 1443 sink_(GetEmit19(index, (op >> 2) + 0)); 1444 break; 1445 } 1446 } 1447 return; 1448 } 1449 case 11: { 1450 const auto index = buffer_ & 2047; 1451 const auto op = GetOp20(index); 1452 switch (op & 3) { 1453 case 0: { 1454 ok_ = false; 1455 break; 1456 } 1457 case 1: { 1458 sink_(GetEmit20(index, (op >> 2) + 0)); 1459 sink_(GetEmit20(index, (op >> 2) + 1)); 1460 break; 1461 } 1462 case 2: { 1463 sink_(GetEmit20(index, (op >> 2) + 0)); 1464 break; 1465 } 1466 } 1467 return; 1468 } 1469 case 12: { 1470 const auto index = buffer_ & 4095; 1471 const auto op = GetOp21(index); 1472 switch (op & 7) { 1473 case 0: { 1474 sink_(GetEmit21(index, (op >> 3) + 0)); 1475 sink_(GetEmit21(index, (op >> 3) + 1)); 1476 sink_(GetEmit21(index, (op >> 3) + 2)); 1477 break; 1478 } 1479 case 1: { 1480 ok_ = false; 1481 break; 1482 } 1483 case 2: { 1484 sink_(GetEmit21(index, (op >> 3) + 0)); 1485 sink_(GetEmit21(index, (op >> 3) + 1)); 1486 break; 1487 } 1488 case 3: { 1489 sink_(GetEmit21(index, (op >> 3) + 0)); 1490 break; 1491 } 1492 } 1493 return; 1494 } 1495 case 13: { 1496 const auto index = buffer_ & 8191; 1497 const auto op = GetOp22(index); 1498 switch (op & 7) { 1499 case 0: { 1500 ok_ = false; 1501 break; 1502 } 1503 case 1: { 1504 sink_(GetEmit22(index, (op >> 3) + 0)); 1505 sink_(GetEmit22(index, (op >> 3) + 1)); 1506 sink_(GetEmit22(index, (op >> 3) + 2)); 1507 break; 1508 } 1509 case 2: { 1510 sink_(GetEmit22(index, (op >> 3) + 0)); 1511 sink_(GetEmit22(index, (op >> 3) + 1)); 1512 break; 1513 } 1514 case 3: { 1515 sink_(GetEmit22(index, (op >> 3) + 0)); 1516 break; 1517 } 1518 } 1519 return; 1520 } 1521 case 0: { 1522 return; 1523 } 1524 } 1525 } DecodeStep3()1526 void DecodeStep3() { 1527 if (!RefillTo1()) { 1528 Done4(); 1529 return; 1530 } 1531 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1532 const auto op = GetOp23(index); 1533 const int consumed = op & 1; 1534 buffer_len_ -= consumed; 1535 const auto emit_ofs = op >> 1; 1536 sink_(GetEmit23(index, emit_ofs + 0)); 1537 } Done4()1538 void Done4() { 1539 done_ = true; 1540 ok_ = false; 1541 } DecodeStep4()1542 void DecodeStep4() { 1543 if (!RefillTo1()) { 1544 Done5(); 1545 return; 1546 } 1547 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1548 const auto op = GetOp24(index); 1549 const int consumed = op & 1; 1550 buffer_len_ -= consumed; 1551 const auto emit_ofs = op >> 1; 1552 sink_(GetEmit24(index, emit_ofs + 0)); 1553 } Done5()1554 void Done5() { 1555 done_ = true; 1556 ok_ = false; 1557 } DecodeStep5()1558 void DecodeStep5() { 1559 if (!RefillTo1()) { 1560 Done6(); 1561 return; 1562 } 1563 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1564 const auto op = GetOp25(index); 1565 const int consumed = op & 1; 1566 buffer_len_ -= consumed; 1567 const auto emit_ofs = op >> 1; 1568 sink_(GetEmit25(index, emit_ofs + 0)); 1569 } Done6()1570 void Done6() { 1571 done_ = true; 1572 ok_ = false; 1573 } DecodeStep6()1574 void DecodeStep6() { 1575 if (!RefillTo1()) { 1576 Done7(); 1577 return; 1578 } 1579 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1580 const auto op = GetOp26(index); 1581 const int consumed = op & 1; 1582 buffer_len_ -= consumed; 1583 const auto emit_ofs = op >> 1; 1584 sink_(GetEmit26(index, emit_ofs + 0)); 1585 } Done7()1586 void Done7() { 1587 done_ = true; 1588 ok_ = false; 1589 } DecodeStep7()1590 void DecodeStep7() { 1591 if (!RefillTo1()) { 1592 Done8(); 1593 return; 1594 } 1595 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1596 const auto op = GetOp27(index); 1597 const int consumed = op & 1; 1598 buffer_len_ -= consumed; 1599 const auto emit_ofs = op >> 1; 1600 sink_(GetEmit27(index, emit_ofs + 0)); 1601 } Done8()1602 void Done8() { 1603 done_ = true; 1604 ok_ = false; 1605 } DecodeStep8()1606 void DecodeStep8() { 1607 if (!RefillTo1()) { 1608 Done9(); 1609 return; 1610 } 1611 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1612 const auto op = GetOp28(index); 1613 const int consumed = op & 1; 1614 buffer_len_ -= consumed; 1615 const auto emit_ofs = op >> 1; 1616 sink_(GetEmit28(index, emit_ofs + 0)); 1617 } Done9()1618 void Done9() { 1619 done_ = true; 1620 ok_ = false; 1621 } DecodeStep9()1622 void DecodeStep9() { 1623 if (!RefillTo1()) { 1624 Done10(); 1625 return; 1626 } 1627 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1628 const auto op = GetOp29(index); 1629 const int consumed = op & 1; 1630 buffer_len_ -= consumed; 1631 const auto emit_ofs = op >> 1; 1632 sink_(GetEmit29(index, emit_ofs + 0)); 1633 } Done10()1634 void Done10() { 1635 done_ = true; 1636 ok_ = false; 1637 } DecodeStep10()1638 void DecodeStep10() { 1639 if (!RefillTo2()) { 1640 Done11(); 1641 return; 1642 } 1643 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1644 const auto op = GetOp30(index); 1645 const int consumed = op & 3; 1646 buffer_len_ -= consumed; 1647 const auto emit_ofs = op >> 2; 1648 sink_(GetEmit30(index, emit_ofs + 0)); 1649 } Done11()1650 void Done11() { 1651 done_ = true; 1652 switch (buffer_len_) { 1653 case 1: 1654 case 0: { 1655 ok_ = false; 1656 return; 1657 } 1658 } 1659 } DecodeStep11()1660 void DecodeStep11() { 1661 if (!RefillTo2()) { 1662 Done12(); 1663 return; 1664 } 1665 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1666 const auto op = GetOp31(index); 1667 const int consumed = op & 3; 1668 buffer_len_ -= consumed; 1669 const auto emit_ofs = op >> 2; 1670 sink_(GetEmit31(index, emit_ofs + 0)); 1671 } Done12()1672 void Done12() { 1673 done_ = true; 1674 switch (buffer_len_) { 1675 case 1: 1676 case 0: { 1677 ok_ = false; 1678 return; 1679 } 1680 } 1681 } DecodeStep12()1682 void DecodeStep12() { 1683 if (!RefillTo2()) { 1684 Done13(); 1685 return; 1686 } 1687 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1688 const auto op = GetOp32(index); 1689 const int consumed = op & 3; 1690 buffer_len_ -= consumed; 1691 const auto emit_ofs = op >> 2; 1692 sink_(GetEmit32(index, emit_ofs + 0)); 1693 } Done13()1694 void Done13() { 1695 done_ = true; 1696 switch (buffer_len_) { 1697 case 1: 1698 case 0: { 1699 ok_ = false; 1700 return; 1701 } 1702 } 1703 } DecodeStep13()1704 void DecodeStep13() { 1705 if (!RefillTo2()) { 1706 Done14(); 1707 return; 1708 } 1709 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1710 const auto op = GetOp33(index); 1711 const int consumed = op & 3; 1712 buffer_len_ -= consumed; 1713 const auto emit_ofs = op >> 2; 1714 sink_(GetEmit33(index, emit_ofs + 0)); 1715 } Done14()1716 void Done14() { 1717 done_ = true; 1718 switch (buffer_len_) { 1719 case 1: 1720 case 0: { 1721 ok_ = false; 1722 return; 1723 } 1724 } 1725 } DecodeStep14()1726 void DecodeStep14() { 1727 if (!RefillTo3()) { 1728 Done15(); 1729 return; 1730 } 1731 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1732 const auto op = GetOp34(index); 1733 const int consumed = op & 3; 1734 buffer_len_ -= consumed; 1735 const auto emit_ofs = op >> 2; 1736 sink_(GetEmit34(index, emit_ofs + 0)); 1737 } RefillTo3()1738 bool RefillTo3() { 1739 switch (buffer_len_) { 1740 case 0: { 1741 return Read1to8Bytes(); 1742 } 1743 case 1: 1744 case 2: { 1745 return Read1to7Bytes(); 1746 } 1747 } 1748 return true; 1749 } Done15()1750 void Done15() { 1751 done_ = true; 1752 switch (buffer_len_) { 1753 case 1: 1754 case 2: 1755 case 0: { 1756 ok_ = false; 1757 return; 1758 } 1759 } 1760 } DecodeStep15()1761 void DecodeStep15() { 1762 if (!RefillTo3()) { 1763 Done16(); 1764 return; 1765 } 1766 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1767 const auto op = GetOp35(index); 1768 const int consumed = op & 3; 1769 buffer_len_ -= consumed; 1770 const auto emit_ofs = op >> 2; 1771 sink_(GetEmit35(index, emit_ofs + 0)); 1772 } Done16()1773 void Done16() { 1774 done_ = true; 1775 switch (buffer_len_) { 1776 case 1: 1777 case 2: 1778 case 0: { 1779 ok_ = false; 1780 return; 1781 } 1782 } 1783 } DecodeStep16()1784 void DecodeStep16() { 1785 if (!RefillTo2()) { 1786 Done17(); 1787 return; 1788 } 1789 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1790 const auto op = GetOp36(index); 1791 const int consumed = op & 3; 1792 buffer_len_ -= consumed; 1793 const auto emit_ofs = op >> 2; 1794 sink_(GetEmit36(index, emit_ofs + 0)); 1795 } Done17()1796 void Done17() { 1797 done_ = true; 1798 switch (buffer_len_) { 1799 case 1: { 1800 const auto index = buffer_ & 1; 1801 const auto op = GetOp37(index); 1802 switch (op & 1) { 1803 case 0: { 1804 sink_(GetEmit37(index, (op >> 1) + 0)); 1805 break; 1806 } 1807 case 1: { 1808 ok_ = false; 1809 break; 1810 } 1811 } 1812 return; 1813 } 1814 case 0: { 1815 ok_ = false; 1816 return; 1817 } 1818 } 1819 } DecodeStep17()1820 void DecodeStep17() { 1821 if (!RefillTo3()) { 1822 Done18(); 1823 return; 1824 } 1825 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1826 const auto op = GetOp38(index); 1827 const int consumed = op & 3; 1828 buffer_len_ -= consumed; 1829 const auto emit_ofs = op >> 2; 1830 sink_(GetEmit38(index, emit_ofs + 0)); 1831 } Done18()1832 void Done18() { 1833 done_ = true; 1834 switch (buffer_len_) { 1835 case 1: 1836 case 0: { 1837 ok_ = false; 1838 return; 1839 } 1840 case 2: { 1841 const auto index = buffer_ & 3; 1842 const auto op = GetOp39(index); 1843 switch (op & 1) { 1844 case 0: { 1845 sink_(GetEmit39(index, (op >> 1) + 0)); 1846 break; 1847 } 1848 case 1: { 1849 ok_ = false; 1850 break; 1851 } 1852 } 1853 return; 1854 } 1855 } 1856 } DecodeStep18()1857 void DecodeStep18() { 1858 if (!RefillTo5()) { 1859 Done19(); 1860 return; 1861 } 1862 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 1863 const auto op = GetOp40(index); 1864 const int consumed = op & 7; 1865 buffer_len_ -= consumed; 1866 const auto emit_ofs = op >> 4; 1867 switch ((op >> 3) & 1) { 1868 case 0: { 1869 sink_(GetEmit40(index, emit_ofs + 0)); 1870 break; 1871 } 1872 case 1: { 1873 begin_ = end_; 1874 buffer_len_ = 0; 1875 break; 1876 } 1877 } 1878 } RefillTo5()1879 bool RefillTo5() { 1880 switch (buffer_len_) { 1881 case 0: { 1882 return Read1to8Bytes(); 1883 } 1884 case 1: 1885 case 2: 1886 case 3: 1887 case 4: { 1888 return Read1to7Bytes(); 1889 } 1890 } 1891 return true; 1892 } Done19()1893 void Done19() { 1894 done_ = true; 1895 switch (buffer_len_) { 1896 case 1: 1897 case 2: { 1898 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1899 return; 1900 } 1901 case 3: { 1902 const auto index = buffer_ & 7; 1903 const auto op = GetOp41(index); 1904 switch (op & 1) { 1905 case 0: { 1906 sink_(GetEmit41(index, (op >> 1) + 0)); 1907 break; 1908 } 1909 } 1910 return; 1911 } 1912 case 4: { 1913 const auto index = buffer_ & 15; 1914 const auto op = GetOp42(index); 1915 switch (op & 3) { 1916 case 0: { 1917 ok_ = false; 1918 break; 1919 } 1920 case 1: { 1921 sink_(GetEmit42(index, (op >> 2) + 0)); 1922 break; 1923 } 1924 } 1925 return; 1926 } 1927 case 0: { 1928 return; 1929 } 1930 } 1931 } 1932 F sink_; 1933 const uint8_t* begin_; 1934 const uint8_t* const end_; 1935 uint64_t buffer_ = 0; 1936 int buffer_len_ = 0; 1937 bool ok_ = true; 1938 bool done_ = false; 1939 }; 1940 } // namespace geometry_11_14_5 1941 } // namespace grpc_core 1942 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_14_5_H 1943