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