1 // Copyright 2023 gRPC authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // This file is autogenerated: see 16 // tools/codegen/core/gen_huffman_decompressor.cc 17 18 #ifndef GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_8_6_16_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_8_6_16_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_8_6_16 { 26 class HuffDecoderCommon { 27 protected: GetOp2(size_t i)28 static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; } GetEmit2(size_t,size_t emit)29 static inline uint64_t GetEmit2(size_t, size_t emit) { 30 return table2_0_emit_[emit]; 31 } GetOp3(size_t i)32 static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; } GetEmit3(size_t,size_t emit)33 static inline uint64_t GetEmit3(size_t, size_t emit) { 34 return table3_0_emit_[emit]; 35 } GetOp4(size_t i)36 static inline uint64_t GetOp4(size_t i) { 37 return table4_ops_[i >> 6][i & 0x3f]; 38 } GetEmit4(size_t i,size_t emit)39 static inline uint64_t GetEmit4(size_t i, size_t emit) { 40 return table4_emit_[i >> 6][emit]; 41 } GetOp1(size_t i)42 static inline uint64_t GetOp1(size_t i) { 43 return table1_0_inner_[table1_0_outer_[i]]; 44 } GetEmit1(size_t,size_t emit)45 static inline uint64_t GetEmit1(size_t, size_t emit) { 46 return table1_0_emit_[emit]; 47 } GetOp5(size_t i)48 static inline uint64_t GetOp5(size_t i) { 49 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 50 } GetEmit5(size_t,size_t emit)51 static inline uint64_t GetEmit5(size_t, size_t emit) { 52 return (emit < 2 ? (emit + 33) : ((emit - 2) + 40)); 53 } GetOp7(size_t i)54 static inline uint64_t GetOp7(size_t i) { 55 return (i < 2 ? (i) : ((i - 2) + 1)); 56 } GetEmit7(size_t,size_t emit)57 static inline uint64_t GetEmit7(size_t, size_t emit) { 58 return ((void)emit, 63); 59 } GetOp8(size_t i)60 static inline uint64_t GetOp8(size_t i) { 61 return table8_0_inner_[table8_0_outer_[i]]; 62 } GetEmit8(size_t,size_t emit)63 static inline uint64_t GetEmit8(size_t, size_t emit) { 64 return (emit < 2 ? (emit ? 39 : 63) : ((emit - 2) ? 124 : 43)); 65 } GetOp9(size_t i)66 static inline uint64_t GetOp9(size_t i) { 67 return table9_0_inner_[table9_0_outer_[i]]; 68 } GetEmit9(size_t,size_t emit)69 static inline uint64_t GetEmit9(size_t, size_t emit) { 70 return table9_0_emit_[emit]; 71 } GetOp10(size_t i)72 static inline uint64_t GetOp10(size_t i) { return table10_0_ops_[i]; } GetEmit10(size_t,size_t emit)73 static inline uint64_t GetEmit10(size_t, size_t emit) { 74 return table10_0_emit_[emit]; 75 } GetOp6(size_t i)76 static inline uint64_t GetOp6(size_t i) { 77 return table6_0_inner_[table6_0_outer_[i]]; 78 } GetEmit6(size_t,size_t emit)79 static inline uint64_t GetEmit6(size_t, size_t emit) { 80 return table6_0_emit_[emit]; 81 } GetOp11(size_t i)82 static inline uint64_t GetOp11(size_t i) { return i ? 3 : 1; } GetEmit11(size_t,size_t emit)83 static inline uint64_t GetEmit11(size_t, size_t emit) { 84 return emit ? 96 : 60; 85 } GetOp13(size_t i)86 static inline uint64_t GetOp13(size_t i) { return i; } GetEmit13(size_t,size_t emit)87 static inline uint64_t GetEmit13(size_t, size_t emit) { 88 return ((void)emit, 123); 89 } GetOp14(size_t i)90 static inline uint64_t GetOp14(size_t i) { 91 return (i < 2 ? (i) : ((i - 2) ? 2 : 0)); 92 } GetEmit14(size_t,size_t emit)93 static inline uint64_t GetEmit14(size_t, size_t emit) { 94 return ((void)emit, 123); 95 } GetOp15(size_t i)96 static inline uint64_t GetOp15(size_t i) { return table15_0_outer_[i]; } GetEmit15(size_t,size_t emit)97 static inline uint64_t GetEmit15(size_t, size_t emit) { 98 return ((void)emit, 123); 99 } GetOp16(size_t i)100 static inline uint64_t GetOp16(size_t i) { return table16_0_outer_[i]; } GetEmit16(size_t,size_t emit)101 static inline uint64_t GetEmit16(size_t, size_t emit) { 102 return ((void)emit, 123); 103 } GetOp17(size_t i)104 static inline uint64_t GetOp17(size_t i) { return table17_0_ops_[i]; } GetEmit17(size_t,size_t emit)105 static inline uint64_t GetEmit17(size_t, size_t emit) { 106 return (emit < 2 ? (emit ? 92 : 123) : ((emit - 2) ? 208 : 195)); 107 } GetOp18(size_t i)108 static inline uint64_t GetOp18(size_t i) { return table18_0_ops_[i]; } GetEmit18(size_t,size_t emit)109 static inline uint64_t GetEmit18(size_t, size_t emit) { 110 return table18_0_emit_[emit]; 111 } GetOp19(size_t i)112 static inline uint64_t GetOp19(size_t i) { 113 return table19_ops_[i >> 5][i & 0x1f]; 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 >> 5][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 >> 7][i & 0x7f]; 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 >> 7][emit]; 129 } GetOp22(size_t i)130 static inline uint64_t GetOp22(size_t i) { 131 return table22_ops_[i >> 5][i & 0x1f]; 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 >> 5][emit]; 135 } GetOp23(size_t i)136 static inline uint64_t GetOp23(size_t i) { 137 return table23_ops_[i >> 6][i & 0x3f]; 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 >> 6][emit]; 141 } GetOp24(size_t i)142 static inline uint64_t GetOp24(size_t i) { 143 return table24_ops_[i >> 6][i & 0x3f]; 144 } GetEmit24(size_t i,size_t emit)145 static inline uint64_t GetEmit24(size_t i, size_t emit) { 146 return table24_emit_[i >> 6][emit]; 147 } GetOp25(size_t i)148 static inline uint64_t GetOp25(size_t i) { 149 return table25_ops_[i >> 7][i & 0x7f]; 150 } GetEmit25(size_t i,size_t emit)151 static inline uint64_t GetEmit25(size_t i, size_t emit) { 152 return table25_emit_[i >> 7][emit]; 153 } GetOp26(size_t i)154 static inline uint64_t GetOp26(size_t i) { 155 return table26_inner_[i >> 7][table26_outer_[i >> 7][i & 0x7f]]; 156 } GetEmit26(size_t i,size_t emit)157 static inline uint64_t GetEmit26(size_t i, size_t emit) { 158 return table26_emit_[i >> 7][emit]; 159 } GetOp27(size_t i)160 static inline uint64_t GetOp27(size_t i) { 161 return table27_inner_[i >> 8][table27_outer_[i >> 8][i & 0xff]]; 162 } GetEmit27(size_t i,size_t emit)163 static inline uint64_t GetEmit27(size_t i, size_t emit) { 164 return table27_emit_[i >> 8][emit]; 165 } GetOp12(size_t i)166 static inline uint64_t GetOp12(size_t i) { 167 return table12_ops_[i >> 9][i & 0x1ff]; 168 } GetEmit12(size_t i,size_t emit)169 static inline uint64_t GetEmit12(size_t i, size_t emit) { 170 return table12_emit_[i >> 9][emit]; 171 } 172 173 private: 174 static const uint8_t table2_0_emit_[10]; 175 static const uint8_t table2_0_ops_[32]; 176 static const uint8_t table3_0_emit_[36]; 177 static const uint8_t table3_0_ops_[64]; 178 static const uint8_t table4_0_emit_[22]; 179 static const uint8_t table4_0_ops_[64]; 180 static const uint8_t table4_1_emit_[46]; 181 static const uint8_t table4_1_ops_[64]; 182 static const uint8_t* const table4_emit_[2]; 183 static const uint8_t* const table4_ops_[2]; 184 static const uint8_t table1_0_emit_[74]; 185 static const uint16_t table1_0_inner_[76]; 186 static const uint8_t table1_0_outer_[256]; 187 static const uint8_t table8_0_inner_[6]; 188 static const uint8_t table8_0_outer_[8]; 189 static const uint8_t table9_0_emit_[6]; 190 static const uint8_t table9_0_inner_[8]; 191 static const uint8_t table9_0_outer_[16]; 192 static const uint8_t table10_0_emit_[12]; 193 static const uint8_t table10_0_ops_[32]; 194 static const uint8_t table6_0_emit_[14]; 195 static const uint16_t table6_0_inner_[16]; 196 static const uint8_t table6_0_outer_[64]; 197 static const uint8_t table15_0_outer_[8]; 198 static const uint8_t table16_0_outer_[16]; 199 static const uint8_t table17_0_ops_[32]; 200 static const uint8_t table18_0_emit_[31]; 201 static const uint8_t table18_0_ops_[64]; 202 static const uint8_t table19_0_emit_[44]; 203 static const uint8_t table19_0_ops_[32]; 204 static const uint8_t table19_1_emit_[28]; 205 static const uint8_t table19_1_ops_[32]; 206 static const uint8_t table19_2_emit_[15]; 207 static const uint8_t table19_2_ops_[32]; 208 static const uint8_t table19_3_emit_[9]; 209 static const uint8_t table19_3_ops_[32]; 210 static const uint8_t* const table19_emit_[4]; 211 static const uint8_t* const table19_ops_[4]; 212 static const uint16_t table20_0_ops_[64]; 213 static const uint8_t table20_1_emit_[92]; 214 static const uint16_t table20_1_ops_[64]; 215 static const uint16_t table20_2_ops_[64]; 216 static const uint8_t table20_3_emit_[35]; 217 static const uint16_t table20_3_ops_[64]; 218 static const uint8_t* const table20_emit_[4]; 219 static const uint16_t* const table20_ops_[4]; 220 static const uint16_t table21_0_ops_[128]; 221 static const uint8_t table21_1_emit_[104]; 222 static const uint16_t table21_1_ops_[128]; 223 static const uint16_t table21_2_ops_[128]; 224 static const uint8_t table21_3_emit_[64]; 225 static const uint16_t table21_3_ops_[128]; 226 static const uint8_t* const table21_emit_[4]; 227 static const uint16_t* const table21_ops_[4]; 228 static const uint8_t table22_0_emit_[4]; 229 static const uint8_t table22_0_ops_[32]; 230 static const uint8_t table22_1_emit_[4]; 231 static const uint8_t table22_2_emit_[4]; 232 static const uint8_t table22_3_emit_[4]; 233 static const uint8_t table22_4_emit_[4]; 234 static const uint8_t table22_5_emit_[8]; 235 static const uint8_t table22_5_ops_[32]; 236 static const uint8_t table22_6_emit_[8]; 237 static const uint8_t table22_7_emit_[8]; 238 static const uint8_t table22_8_emit_[8]; 239 static const uint8_t table22_9_emit_[8]; 240 static const uint8_t table22_10_emit_[8]; 241 static const uint8_t table22_11_emit_[12]; 242 static const uint8_t table22_11_ops_[32]; 243 static const uint8_t table22_12_emit_[16]; 244 static const uint8_t table22_12_ops_[32]; 245 static const uint8_t table22_13_emit_[16]; 246 static const uint8_t table22_14_emit_[16]; 247 static const uint8_t table22_15_emit_[20]; 248 static const uint8_t table22_15_ops_[32]; 249 static const uint8_t table22_16_emit_[20]; 250 static const uint8_t table22_16_ops_[32]; 251 static const uint8_t table22_17_emit_[20]; 252 static const uint8_t table22_18_emit_[20]; 253 static const uint8_t table22_19_emit_[2]; 254 static const uint8_t table22_19_ops_[32]; 255 static const uint8_t table22_20_emit_[2]; 256 static const uint8_t table22_21_emit_[2]; 257 static const uint8_t table22_22_emit_[2]; 258 static const uint8_t table22_23_emit_[4]; 259 static const uint8_t table22_23_ops_[32]; 260 static const uint8_t table22_24_emit_[4]; 261 static const uint8_t table22_25_emit_[4]; 262 static const uint8_t table22_26_emit_[7]; 263 static const uint8_t table22_26_ops_[32]; 264 static const uint8_t table22_27_emit_[8]; 265 static const uint8_t table22_27_ops_[32]; 266 static const uint8_t table22_28_emit_[8]; 267 static const uint8_t table22_29_emit_[12]; 268 static const uint8_t table22_29_ops_[32]; 269 static const uint8_t table22_30_emit_[16]; 270 static const uint8_t table22_30_ops_[32]; 271 static const uint8_t table22_31_emit_[17]; 272 static const uint8_t table22_31_ops_[32]; 273 static const uint8_t* const table22_emit_[32]; 274 static const uint8_t* const table22_ops_[32]; 275 static const uint8_t table23_0_emit_[60]; 276 static const uint16_t table23_0_ops_[64]; 277 static const uint8_t table23_1_emit_[60]; 278 static const uint8_t table23_2_emit_[60]; 279 static const uint8_t table23_3_emit_[60]; 280 static const uint8_t table23_4_emit_[60]; 281 static const uint16_t table23_5_ops_[64]; 282 static const uint16_t table23_11_ops_[64]; 283 static const uint16_t table23_12_ops_[64]; 284 static const uint8_t table23_15_emit_[30]; 285 static const uint16_t table23_15_ops_[64]; 286 static const uint8_t table23_16_emit_[72]; 287 static const uint16_t table23_16_ops_[64]; 288 static const uint8_t table23_17_emit_[72]; 289 static const uint8_t table23_18_emit_[72]; 290 static const uint8_t table23_19_emit_[40]; 291 static const uint16_t table23_19_ops_[64]; 292 static const uint8_t table23_20_emit_[40]; 293 static const uint8_t table23_21_emit_[40]; 294 static const uint8_t table23_22_emit_[40]; 295 static const uint16_t table23_23_ops_[64]; 296 static const uint16_t table23_26_ops_[64]; 297 static const uint16_t table23_27_ops_[64]; 298 static const uint16_t table23_29_ops_[64]; 299 static const uint16_t table23_30_ops_[64]; 300 static const uint8_t table23_31_emit_[21]; 301 static const uint16_t table23_31_ops_[64]; 302 static const uint8_t* const table23_emit_[32]; 303 static const uint16_t* const table23_ops_[32]; 304 static const uint8_t table24_0_emit_[108]; 305 static const uint16_t table24_0_ops_[64]; 306 static const uint8_t table24_1_emit_[108]; 307 static const uint8_t table24_2_emit_[108]; 308 static const uint8_t table24_3_emit_[108]; 309 static const uint8_t table24_4_emit_[108]; 310 static const uint8_t table24_5_emit_[108]; 311 static const uint8_t table24_6_emit_[108]; 312 static const uint8_t table24_7_emit_[108]; 313 static const uint8_t table24_8_emit_[108]; 314 static const uint8_t table24_9_emit_[108]; 315 static const uint8_t table24_10_emit_[60]; 316 static const uint16_t table24_10_ops_[64]; 317 static const uint8_t table24_11_emit_[60]; 318 static const uint8_t table24_12_emit_[60]; 319 static const uint8_t table24_13_emit_[60]; 320 static const uint8_t table24_14_emit_[60]; 321 static const uint8_t table24_15_emit_[60]; 322 static const uint8_t table24_16_emit_[60]; 323 static const uint8_t table24_17_emit_[60]; 324 static const uint8_t table24_18_emit_[60]; 325 static const uint8_t table24_19_emit_[60]; 326 static const uint8_t table24_20_emit_[60]; 327 static const uint8_t table24_21_emit_[60]; 328 static const uint8_t table24_22_emit_[60]; 329 static const uint8_t table24_23_emit_[8]; 330 static const uint16_t table24_23_ops_[64]; 331 static const uint8_t table24_24_emit_[8]; 332 static const uint8_t table24_25_emit_[8]; 333 static const uint8_t table24_26_emit_[8]; 334 static const uint8_t table24_27_emit_[8]; 335 static const uint8_t table24_28_emit_[8]; 336 static const uint8_t table24_29_emit_[8]; 337 static const uint8_t table24_30_emit_[8]; 338 static const uint8_t table24_31_emit_[28]; 339 static const uint16_t table24_31_ops_[64]; 340 static const uint8_t table24_32_emit_[44]; 341 static const uint16_t table24_32_ops_[64]; 342 static const uint8_t table24_33_emit_[92]; 343 static const uint16_t table24_33_ops_[64]; 344 static const uint8_t table24_34_emit_[44]; 345 static const uint8_t table24_35_emit_[92]; 346 static const uint8_t table24_36_emit_[44]; 347 static const uint8_t table24_37_emit_[92]; 348 static const uint8_t table24_38_emit_[72]; 349 static const uint16_t table24_38_ops_[64]; 350 static const uint8_t table24_39_emit_[72]; 351 static const uint8_t table24_40_emit_[72]; 352 static const uint8_t table24_41_emit_[72]; 353 static const uint8_t table24_42_emit_[72]; 354 static const uint8_t table24_43_emit_[72]; 355 static const uint8_t table24_44_emit_[72]; 356 static const uint8_t table24_45_emit_[72]; 357 static const uint8_t table24_46_emit_[40]; 358 static const uint16_t table24_46_ops_[64]; 359 static const uint8_t table24_47_emit_[40]; 360 static const uint8_t table24_48_emit_[40]; 361 static const uint8_t table24_49_emit_[40]; 362 static const uint8_t table24_50_emit_[40]; 363 static const uint8_t table24_51_emit_[40]; 364 static const uint8_t table24_52_emit_[22]; 365 static const uint16_t table24_52_ops_[64]; 366 static const uint8_t table24_53_emit_[4]; 367 static const uint16_t table24_53_ops_[64]; 368 static const uint8_t table24_54_emit_[4]; 369 static const uint8_t table24_55_emit_[4]; 370 static const uint8_t table24_56_emit_[4]; 371 static const uint8_t table24_57_emit_[4]; 372 static const uint8_t table24_58_emit_[4]; 373 static const uint8_t table24_59_emit_[8]; 374 static const uint16_t table24_59_ops_[64]; 375 static const uint8_t table24_60_emit_[8]; 376 static const uint8_t table24_61_emit_[8]; 377 static const uint8_t table24_62_emit_[11]; 378 static const uint16_t table24_62_ops_[64]; 379 static const uint8_t table24_63_emit_[25]; 380 static const uint16_t table24_63_ops_[64]; 381 static const uint8_t* const table24_emit_[64]; 382 static const uint16_t* const table24_ops_[64]; 383 static const uint8_t table25_0_emit_[204]; 384 static const uint16_t table25_0_ops_[128]; 385 static const uint8_t table25_1_emit_[204]; 386 static const uint8_t table25_2_emit_[204]; 387 static const uint8_t table25_3_emit_[204]; 388 static const uint8_t table25_4_emit_[204]; 389 static const uint8_t table25_5_emit_[204]; 390 static const uint8_t table25_6_emit_[204]; 391 static const uint8_t table25_7_emit_[204]; 392 static const uint8_t table25_8_emit_[204]; 393 static const uint8_t table25_9_emit_[204]; 394 static const uint8_t table25_10_emit_[216]; 395 static const uint16_t table25_10_ops_[128]; 396 static const uint8_t table25_11_emit_[216]; 397 static const uint8_t table25_12_emit_[216]; 398 static const uint8_t table25_13_emit_[216]; 399 static const uint8_t table25_14_emit_[216]; 400 static const uint8_t table25_15_emit_[216]; 401 static const uint8_t table25_16_emit_[216]; 402 static const uint8_t table25_17_emit_[216]; 403 static const uint8_t table25_18_emit_[216]; 404 static const uint8_t table25_19_emit_[216]; 405 static const uint8_t table25_20_emit_[216]; 406 static const uint8_t table25_21_emit_[216]; 407 static const uint8_t table25_22_emit_[216]; 408 static const uint8_t table25_23_emit_[120]; 409 static const uint16_t table25_23_ops_[128]; 410 static const uint8_t table25_24_emit_[120]; 411 static const uint8_t table25_25_emit_[120]; 412 static const uint8_t table25_26_emit_[120]; 413 static const uint8_t table25_27_emit_[120]; 414 static const uint8_t table25_28_emit_[120]; 415 static const uint8_t table25_29_emit_[120]; 416 static const uint8_t table25_30_emit_[120]; 417 static const uint8_t table25_31_emit_[32]; 418 static const uint16_t table25_31_ops_[128]; 419 static const uint16_t table25_32_ops_[128]; 420 static const uint8_t table25_33_emit_[104]; 421 static const uint16_t table25_33_ops_[128]; 422 static const uint8_t table25_35_emit_[104]; 423 static const uint8_t table25_37_emit_[104]; 424 static const uint8_t table25_38_emit_[136]; 425 static const uint16_t table25_38_ops_[128]; 426 static const uint8_t table25_39_emit_[136]; 427 static const uint8_t table25_40_emit_[136]; 428 static const uint8_t table25_41_emit_[136]; 429 static const uint8_t table25_42_emit_[136]; 430 static const uint8_t table25_43_emit_[136]; 431 static const uint8_t table25_44_emit_[136]; 432 static const uint8_t table25_45_emit_[136]; 433 static const uint8_t table25_46_emit_[144]; 434 static const uint16_t table25_46_ops_[128]; 435 static const uint8_t table25_47_emit_[144]; 436 static const uint8_t table25_48_emit_[144]; 437 static const uint8_t table25_49_emit_[144]; 438 static const uint8_t table25_50_emit_[144]; 439 static const uint8_t table25_51_emit_[144]; 440 static const uint8_t table25_52_emit_[112]; 441 static const uint16_t table25_52_ops_[128]; 442 static const uint8_t table25_53_emit_[80]; 443 static const uint16_t table25_53_ops_[128]; 444 static const uint8_t table25_54_emit_[80]; 445 static const uint8_t table25_55_emit_[80]; 446 static const uint8_t table25_56_emit_[80]; 447 static const uint8_t table25_57_emit_[80]; 448 static const uint8_t table25_58_emit_[80]; 449 static const uint16_t table25_59_ops_[128]; 450 static const uint16_t table25_62_ops_[128]; 451 static const uint8_t table25_63_emit_[44]; 452 static const uint16_t table25_63_ops_[128]; 453 static const uint8_t* const table25_emit_[64]; 454 static const uint16_t* const table25_ops_[64]; 455 static const uint8_t table26_0_emit_[66]; 456 static const uint16_t table26_0_inner_[23]; 457 static const uint8_t table26_0_outer_[128]; 458 static const uint8_t table26_1_emit_[156]; 459 static const uint16_t table26_1_inner_[54]; 460 static const uint8_t table26_1_outer_[128]; 461 static const uint8_t table26_2_emit_[66]; 462 static const uint8_t table26_3_emit_[156]; 463 static const uint8_t table26_4_emit_[66]; 464 static const uint8_t table26_5_emit_[156]; 465 static const uint8_t table26_6_emit_[66]; 466 static const uint8_t table26_7_emit_[156]; 467 static const uint8_t table26_8_emit_[66]; 468 static const uint8_t table26_9_emit_[156]; 469 static const uint8_t table26_10_emit_[66]; 470 static const uint8_t table26_11_emit_[156]; 471 static const uint8_t table26_12_emit_[66]; 472 static const uint8_t table26_13_emit_[156]; 473 static const uint8_t table26_14_emit_[66]; 474 static const uint8_t table26_15_emit_[156]; 475 static const uint8_t table26_16_emit_[66]; 476 static const uint8_t table26_17_emit_[156]; 477 static const uint8_t table26_18_emit_[66]; 478 static const uint8_t table26_19_emit_[156]; 479 static const uint8_t table26_20_emit_[204]; 480 static const uint16_t table26_20_inner_[70]; 481 static const uint8_t table26_20_outer_[128]; 482 static const uint8_t table26_21_emit_[204]; 483 static const uint8_t table26_22_emit_[204]; 484 static const uint8_t table26_23_emit_[204]; 485 static const uint8_t table26_24_emit_[204]; 486 static const uint8_t table26_25_emit_[204]; 487 static const uint8_t table26_26_emit_[204]; 488 static const uint8_t table26_27_emit_[204]; 489 static const uint8_t table26_28_emit_[204]; 490 static const uint8_t table26_29_emit_[204]; 491 static const uint8_t table26_30_emit_[204]; 492 static const uint8_t table26_31_emit_[204]; 493 static const uint8_t table26_32_emit_[204]; 494 static const uint8_t table26_33_emit_[204]; 495 static const uint8_t table26_34_emit_[204]; 496 static const uint8_t table26_35_emit_[204]; 497 static const uint8_t table26_36_emit_[204]; 498 static const uint8_t table26_37_emit_[204]; 499 static const uint8_t table26_38_emit_[204]; 500 static const uint8_t table26_39_emit_[204]; 501 static const uint8_t table26_40_emit_[204]; 502 static const uint8_t table26_41_emit_[204]; 503 static const uint8_t table26_42_emit_[204]; 504 static const uint8_t table26_43_emit_[204]; 505 static const uint8_t table26_44_emit_[204]; 506 static const uint8_t table26_45_emit_[204]; 507 static const uint8_t table26_46_emit_[216]; 508 static const uint16_t table26_46_inner_[75]; 509 static const uint8_t table26_46_outer_[128]; 510 static const uint8_t table26_47_emit_[216]; 511 static const uint8_t table26_48_emit_[216]; 512 static const uint8_t table26_49_emit_[216]; 513 static const uint8_t table26_50_emit_[216]; 514 static const uint8_t table26_51_emit_[216]; 515 static const uint8_t table26_52_emit_[216]; 516 static const uint8_t table26_53_emit_[216]; 517 static const uint8_t table26_54_emit_[216]; 518 static const uint8_t table26_55_emit_[216]; 519 static const uint8_t table26_56_emit_[216]; 520 static const uint8_t table26_57_emit_[216]; 521 static const uint8_t table26_58_emit_[216]; 522 static const uint8_t table26_59_emit_[216]; 523 static const uint8_t table26_60_emit_[216]; 524 static const uint8_t table26_61_emit_[216]; 525 static const uint8_t table26_62_emit_[120]; 526 static const uint16_t table26_62_inner_[45]; 527 static const uint8_t table26_62_outer_[128]; 528 static const uint8_t table26_63_emit_[92]; 529 static const uint16_t table26_63_inner_[40]; 530 static const uint8_t table26_63_outer_[128]; 531 static const uint8_t table26_64_emit_[16]; 532 static const uint16_t table26_64_inner_[9]; 533 static const uint8_t table26_64_outer_[128]; 534 static const uint8_t table26_65_emit_[28]; 535 static const uint16_t table26_65_inner_[15]; 536 static const uint8_t table26_65_outer_[128]; 537 static const uint8_t table26_66_emit_[36]; 538 static const uint16_t table26_66_inner_[19]; 539 static const uint8_t table26_66_outer_[128]; 540 static const uint8_t table26_67_emit_[68]; 541 static const uint16_t table26_67_inner_[36]; 542 static const uint8_t table26_67_outer_[128]; 543 static const uint8_t table26_68_emit_[16]; 544 static const uint8_t table26_69_emit_[28]; 545 static const uint8_t table26_70_emit_[36]; 546 static const uint8_t table26_71_emit_[68]; 547 static const uint8_t table26_72_emit_[16]; 548 static const uint8_t table26_73_emit_[28]; 549 static const uint8_t table26_74_emit_[36]; 550 static const uint8_t table26_75_emit_[68]; 551 static const uint8_t table26_76_emit_[44]; 552 static const uint16_t table26_76_inner_[23]; 553 static const uint8_t table26_77_emit_[104]; 554 static const uint16_t table26_77_inner_[54]; 555 static const uint8_t table26_78_emit_[44]; 556 static const uint8_t table26_79_emit_[104]; 557 static const uint8_t table26_80_emit_[44]; 558 static const uint8_t table26_81_emit_[104]; 559 static const uint8_t table26_82_emit_[44]; 560 static const uint8_t table26_83_emit_[104]; 561 static const uint8_t table26_84_emit_[44]; 562 static const uint8_t table26_85_emit_[104]; 563 static const uint8_t table26_86_emit_[44]; 564 static const uint8_t table26_87_emit_[104]; 565 static const uint8_t table26_88_emit_[44]; 566 static const uint8_t table26_89_emit_[104]; 567 static const uint8_t table26_90_emit_[44]; 568 static const uint8_t table26_91_emit_[104]; 569 static const uint8_t table26_92_emit_[136]; 570 static const uint16_t table26_92_inner_[70]; 571 static const uint8_t table26_93_emit_[136]; 572 static const uint8_t table26_94_emit_[136]; 573 static const uint8_t table26_95_emit_[136]; 574 static const uint8_t table26_96_emit_[136]; 575 static const uint8_t table26_97_emit_[136]; 576 static const uint8_t table26_98_emit_[136]; 577 static const uint8_t table26_99_emit_[136]; 578 static const uint8_t table26_100_emit_[136]; 579 static const uint8_t table26_101_emit_[136]; 580 static const uint8_t table26_102_emit_[136]; 581 static const uint8_t table26_103_emit_[136]; 582 static const uint8_t table26_104_emit_[136]; 583 static const uint8_t table26_105_emit_[144]; 584 static const uint16_t table26_105_inner_[75]; 585 static const uint8_t table26_106_emit_[144]; 586 static const uint8_t table26_107_emit_[144]; 587 static const uint8_t table26_108_emit_[144]; 588 static const uint8_t table26_109_emit_[144]; 589 static const uint8_t table26_110_emit_[144]; 590 static const uint8_t table26_111_emit_[144]; 591 static const uint8_t table26_112_emit_[144]; 592 static const uint8_t table26_113_emit_[144]; 593 static const uint8_t table26_114_emit_[144]; 594 static const uint8_t table26_115_emit_[144]; 595 static const uint8_t table26_116_emit_[144]; 596 static const uint8_t table26_117_emit_[144]; 597 static const uint8_t table26_118_emit_[80]; 598 static const uint16_t table26_118_inner_[45]; 599 static const uint8_t table26_119_emit_[80]; 600 static const uint8_t table26_120_emit_[80]; 601 static const uint8_t table26_121_emit_[80]; 602 static const uint8_t table26_122_emit_[80]; 603 static const uint8_t table26_123_emit_[80]; 604 static const uint8_t table26_124_emit_[80]; 605 static const uint8_t table26_125_emit_[26]; 606 static const uint16_t table26_125_inner_[18]; 607 static const uint8_t table26_125_outer_[128]; 608 static const uint8_t table26_126_emit_[10]; 609 static const uint16_t table26_126_inner_[11]; 610 static const uint8_t table26_126_outer_[128]; 611 static const uint8_t table26_127_emit_[63]; 612 static const uint16_t table26_127_inner_[65]; 613 static const uint8_t table26_127_outer_[128]; 614 static const uint8_t* const table26_emit_[128]; 615 static const uint16_t* const table26_inner_[128]; 616 static const uint8_t* const table26_outer_[128]; 617 static const uint8_t table27_0_outer_[256]; 618 static const uint8_t table27_1_outer_[256]; 619 static const uint8_t table27_20_emit_[222]; 620 static const uint16_t table27_20_inner_[76]; 621 static const uint8_t table27_20_outer_[256]; 622 static const uint8_t table27_21_emit_[222]; 623 static const uint8_t table27_22_emit_[222]; 624 static const uint8_t table27_23_emit_[222]; 625 static const uint8_t table27_24_emit_[222]; 626 static const uint8_t table27_25_emit_[222]; 627 static const uint8_t table27_26_emit_[222]; 628 static const uint8_t table27_27_emit_[222]; 629 static const uint8_t table27_28_emit_[222]; 630 static const uint8_t table27_29_emit_[222]; 631 static const uint8_t table27_30_emit_[222]; 632 static const uint8_t table27_31_emit_[222]; 633 static const uint8_t table27_32_emit_[222]; 634 static const uint8_t table27_33_emit_[222]; 635 static const uint8_t table27_34_emit_[222]; 636 static const uint8_t table27_35_emit_[222]; 637 static const uint8_t table27_36_emit_[222]; 638 static const uint8_t table27_37_emit_[222]; 639 static const uint8_t table27_38_emit_[222]; 640 static const uint8_t table27_39_emit_[222]; 641 static const uint8_t table27_40_emit_[222]; 642 static const uint8_t table27_41_emit_[222]; 643 static const uint8_t table27_42_emit_[222]; 644 static const uint8_t table27_43_emit_[222]; 645 static const uint8_t table27_44_emit_[222]; 646 static const uint8_t table27_45_emit_[222]; 647 static const uint8_t table27_46_emit_[408]; 648 static const uint16_t table27_46_inner_[139]; 649 static const uint8_t table27_46_outer_[256]; 650 static const uint8_t table27_47_emit_[408]; 651 static const uint8_t table27_48_emit_[408]; 652 static const uint8_t table27_49_emit_[408]; 653 static const uint8_t table27_50_emit_[408]; 654 static const uint8_t table27_51_emit_[408]; 655 static const uint8_t table27_52_emit_[408]; 656 static const uint8_t table27_53_emit_[408]; 657 static const uint8_t table27_54_emit_[408]; 658 static const uint8_t table27_55_emit_[408]; 659 static const uint8_t table27_56_emit_[408]; 660 static const uint8_t table27_57_emit_[408]; 661 static const uint8_t table27_58_emit_[408]; 662 static const uint8_t table27_59_emit_[408]; 663 static const uint8_t table27_60_emit_[408]; 664 static const uint8_t table27_61_emit_[408]; 665 static const uint8_t table27_62_emit_[432]; 666 static const uint16_t table27_62_inner_[149]; 667 static const uint8_t table27_62_outer_[256]; 668 static const uint8_t table27_63_emit_[252]; 669 static const uint16_t table27_63_inner_[94]; 670 static const uint8_t table27_63_outer_[256]; 671 static const uint8_t table27_64_emit_[240]; 672 static const uint16_t table27_64_inner_[89]; 673 static const uint8_t table27_64_outer_[256]; 674 static const uint8_t table27_65_emit_[84]; 675 static const uint16_t table27_65_inner_[35]; 676 static const uint8_t table27_65_outer_[256]; 677 static const uint8_t table27_66_outer_[256]; 678 static const uint8_t table27_67_emit_[78]; 679 static const uint16_t table27_67_inner_[41]; 680 static const uint8_t table27_67_outer_[256]; 681 static const uint8_t table27_68_emit_[240]; 682 static const uint8_t table27_69_emit_[84]; 683 static const uint8_t table27_71_emit_[78]; 684 static const uint8_t table27_72_emit_[240]; 685 static const uint8_t table27_73_emit_[84]; 686 static const uint8_t table27_75_emit_[78]; 687 static const uint8_t table27_92_emit_[148]; 688 static const uint16_t table27_92_inner_[76]; 689 static const uint8_t table27_93_emit_[148]; 690 static const uint8_t table27_94_emit_[148]; 691 static const uint8_t table27_95_emit_[148]; 692 static const uint8_t table27_96_emit_[148]; 693 static const uint8_t table27_97_emit_[148]; 694 static const uint8_t table27_98_emit_[148]; 695 static const uint8_t table27_99_emit_[148]; 696 static const uint8_t table27_100_emit_[148]; 697 static const uint8_t table27_101_emit_[148]; 698 static const uint8_t table27_102_emit_[148]; 699 static const uint8_t table27_103_emit_[148]; 700 static const uint8_t table27_104_emit_[148]; 701 static const uint8_t table27_105_emit_[272]; 702 static const uint16_t table27_105_inner_[139]; 703 static const uint8_t table27_106_emit_[272]; 704 static const uint8_t table27_107_emit_[272]; 705 static const uint8_t table27_108_emit_[272]; 706 static const uint8_t table27_109_emit_[272]; 707 static const uint8_t table27_110_emit_[272]; 708 static const uint8_t table27_111_emit_[272]; 709 static const uint8_t table27_112_emit_[272]; 710 static const uint8_t table27_113_emit_[272]; 711 static const uint8_t table27_114_emit_[272]; 712 static const uint8_t table27_115_emit_[272]; 713 static const uint8_t table27_116_emit_[272]; 714 static const uint8_t table27_117_emit_[272]; 715 static const uint8_t table27_118_emit_[288]; 716 static const uint16_t table27_118_inner_[149]; 717 static const uint8_t table27_119_emit_[288]; 718 static const uint8_t table27_120_emit_[288]; 719 static const uint8_t table27_121_emit_[288]; 720 static const uint8_t table27_122_emit_[288]; 721 static const uint8_t table27_123_emit_[288]; 722 static const uint8_t table27_124_emit_[288]; 723 static const uint8_t table27_125_emit_[192]; 724 static const uint16_t table27_125_inner_[104]; 725 static const uint8_t table27_125_outer_[256]; 726 static const uint8_t table27_126_emit_[124]; 727 static const uint16_t table27_126_inner_[71]; 728 static const uint8_t table27_126_outer_[256]; 729 static const uint8_t table27_127_outer_[256]; 730 static const uint8_t* const table27_emit_[128]; 731 static const uint16_t* const table27_inner_[128]; 732 static const uint8_t* const table27_outer_[128]; 733 static const uint8_t table12_0_emit_[1]; 734 static const uint16_t table12_0_ops_[512]; 735 static const uint8_t table12_64_emit_[1]; 736 static const uint16_t table12_64_ops_[512]; 737 static const uint8_t table12_68_emit_[1]; 738 static const uint8_t table12_72_emit_[1]; 739 static const uint8_t table12_76_emit_[1]; 740 static const uint16_t table12_76_ops_[512]; 741 static const uint8_t table12_78_emit_[1]; 742 static const uint8_t table12_80_emit_[1]; 743 static const uint8_t table12_82_emit_[1]; 744 static const uint8_t table12_84_emit_[1]; 745 static const uint8_t table12_86_emit_[1]; 746 static const uint8_t table12_88_emit_[1]; 747 static const uint8_t table12_90_emit_[1]; 748 static const uint8_t table12_92_emit_[1]; 749 static const uint16_t table12_92_ops_[512]; 750 static const uint8_t table12_93_emit_[1]; 751 static const uint8_t table12_94_emit_[1]; 752 static const uint8_t table12_95_emit_[1]; 753 static const uint8_t table12_96_emit_[1]; 754 static const uint8_t table12_97_emit_[1]; 755 static const uint8_t table12_98_emit_[1]; 756 static const uint8_t table12_99_emit_[1]; 757 static const uint8_t table12_100_emit_[1]; 758 static const uint8_t table12_101_emit_[1]; 759 static const uint8_t table12_102_emit_[1]; 760 static const uint8_t table12_103_emit_[1]; 761 static const uint8_t table12_104_emit_[1]; 762 static const uint8_t table12_105_emit_[2]; 763 static const uint16_t table12_105_ops_[512]; 764 static const uint8_t table12_106_emit_[2]; 765 static const uint8_t table12_107_emit_[2]; 766 static const uint8_t table12_108_emit_[2]; 767 static const uint8_t table12_109_emit_[2]; 768 static const uint8_t table12_110_emit_[2]; 769 static const uint8_t table12_111_emit_[2]; 770 static const uint8_t table12_112_emit_[2]; 771 static const uint8_t table12_113_emit_[2]; 772 static const uint8_t table12_114_emit_[2]; 773 static const uint8_t table12_115_emit_[2]; 774 static const uint8_t table12_116_emit_[2]; 775 static const uint8_t table12_117_emit_[2]; 776 static const uint8_t table12_118_emit_[4]; 777 static const uint16_t table12_118_ops_[512]; 778 static const uint8_t table12_119_emit_[4]; 779 static const uint8_t table12_120_emit_[4]; 780 static const uint8_t table12_121_emit_[4]; 781 static const uint8_t table12_122_emit_[4]; 782 static const uint8_t table12_123_emit_[4]; 783 static const uint8_t table12_124_emit_[4]; 784 static const uint8_t table12_125_emit_[7]; 785 static const uint16_t table12_125_ops_[512]; 786 static const uint16_t table12_126_ops_[512]; 787 static const uint8_t table12_127_emit_[66]; 788 static const uint16_t table12_127_ops_[512]; 789 static const uint8_t* const table12_emit_[128]; 790 static const uint16_t* const table12_ops_[128]; 791 }; 792 template <typename F> 793 class HuffDecoder : public HuffDecoderCommon { 794 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)795 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 796 : sink_(sink), begin_(begin), end_(end) {} Run()797 bool Run() { 798 while (!done_) { 799 if (!RefillTo8()) { 800 Done0(); 801 break; 802 } 803 const auto index = (buffer_ >> (buffer_len_ - 8)) & 0xff; 804 const auto op = GetOp1(index); 805 const int consumed = op & 15; 806 buffer_len_ -= consumed; 807 const auto emit_ofs = op >> 6; 808 switch ((op >> 4) & 3) { 809 case 0: { 810 sink_(GetEmit1(index, emit_ofs + 0)); 811 break; 812 } 813 case 1: { 814 DecodeStep0(); 815 break; 816 } 817 case 2: { 818 DecodeStep1(); 819 break; 820 } 821 } 822 } 823 return ok_; 824 } 825 826 private: RefillTo8()827 bool RefillTo8() { 828 switch (buffer_len_) { 829 case 0: { 830 return Read1to8Bytes(); 831 } 832 case 1: 833 case 2: 834 case 3: 835 case 4: 836 case 5: 837 case 6: 838 case 7: { 839 return Read1to7Bytes(); 840 } 841 } 842 return true; 843 } Read1to8Bytes()844 bool Read1to8Bytes() { 845 switch (end_ - begin_) { 846 case 0: { 847 return false; 848 } 849 case 1: { 850 Fill1(); 851 return true; 852 } 853 case 2: { 854 Fill2(); 855 return true; 856 } 857 case 3: { 858 Fill3(); 859 return true; 860 } 861 case 4: { 862 Fill4(); 863 return true; 864 } 865 case 5: { 866 Fill5(); 867 return true; 868 } 869 case 6: { 870 Fill6(); 871 return true; 872 } 873 case 7: { 874 Fill7(); 875 return true; 876 } 877 default: { 878 Fill8(); 879 return true; 880 } 881 } 882 } Fill1()883 void Fill1() { 884 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 885 begin_ += 1; 886 buffer_len_ += 8; 887 } Fill2()888 void Fill2() { 889 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 890 (static_cast<uint64_t>(begin_[1]) << 0); 891 begin_ += 2; 892 buffer_len_ += 16; 893 } Fill3()894 void Fill3() { 895 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 896 (static_cast<uint64_t>(begin_[1]) << 8) | 897 (static_cast<uint64_t>(begin_[2]) << 0); 898 begin_ += 3; 899 buffer_len_ += 24; 900 } Fill4()901 void Fill4() { 902 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 903 (static_cast<uint64_t>(begin_[1]) << 16) | 904 (static_cast<uint64_t>(begin_[2]) << 8) | 905 (static_cast<uint64_t>(begin_[3]) << 0); 906 begin_ += 4; 907 buffer_len_ += 32; 908 } Fill5()909 void Fill5() { 910 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 911 (static_cast<uint64_t>(begin_[1]) << 24) | 912 (static_cast<uint64_t>(begin_[2]) << 16) | 913 (static_cast<uint64_t>(begin_[3]) << 8) | 914 (static_cast<uint64_t>(begin_[4]) << 0); 915 begin_ += 5; 916 buffer_len_ += 40; 917 } Fill6()918 void Fill6() { 919 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 920 (static_cast<uint64_t>(begin_[1]) << 32) | 921 (static_cast<uint64_t>(begin_[2]) << 24) | 922 (static_cast<uint64_t>(begin_[3]) << 16) | 923 (static_cast<uint64_t>(begin_[4]) << 8) | 924 (static_cast<uint64_t>(begin_[5]) << 0); 925 begin_ += 6; 926 buffer_len_ += 48; 927 } Fill7()928 void Fill7() { 929 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 930 (static_cast<uint64_t>(begin_[1]) << 40) | 931 (static_cast<uint64_t>(begin_[2]) << 32) | 932 (static_cast<uint64_t>(begin_[3]) << 24) | 933 (static_cast<uint64_t>(begin_[4]) << 16) | 934 (static_cast<uint64_t>(begin_[5]) << 8) | 935 (static_cast<uint64_t>(begin_[6]) << 0); 936 begin_ += 7; 937 buffer_len_ += 56; 938 } Fill8()939 void Fill8() { 940 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 941 (static_cast<uint64_t>(begin_[1]) << 48) | 942 (static_cast<uint64_t>(begin_[2]) << 40) | 943 (static_cast<uint64_t>(begin_[3]) << 32) | 944 (static_cast<uint64_t>(begin_[4]) << 24) | 945 (static_cast<uint64_t>(begin_[5]) << 16) | 946 (static_cast<uint64_t>(begin_[6]) << 8) | 947 (static_cast<uint64_t>(begin_[7]) << 0); 948 begin_ += 8; 949 buffer_len_ += 64; 950 } Read1to7Bytes()951 bool Read1to7Bytes() { 952 switch (end_ - begin_) { 953 case 0: { 954 return false; 955 } 956 case 1: { 957 Fill1(); 958 return true; 959 } 960 case 2: { 961 Fill2(); 962 return true; 963 } 964 case 3: { 965 Fill3(); 966 return true; 967 } 968 case 4: { 969 Fill4(); 970 return true; 971 } 972 case 5: { 973 Fill5(); 974 return true; 975 } 976 case 6: { 977 Fill6(); 978 return true; 979 } 980 default: { 981 Fill7(); 982 return true; 983 } 984 } 985 } Done0()986 void Done0() { 987 done_ = true; 988 switch (end_ - begin_) {} 989 switch (buffer_len_) { 990 case 1: 991 case 2: 992 case 3: 993 case 4: { 994 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 995 return; 996 } 997 case 5: { 998 const auto index = buffer_ & 31; 999 const auto op = GetOp2(index); 1000 switch (op & 3) { 1001 case 0: { 1002 sink_(GetEmit2(index, (op >> 2) + 0)); 1003 break; 1004 } 1005 case 1: { 1006 ok_ = false; 1007 break; 1008 } 1009 } 1010 return; 1011 } 1012 case 6: { 1013 const auto index = buffer_ & 63; 1014 const auto op = GetOp3(index); 1015 switch (op & 3) { 1016 case 0: { 1017 ok_ = false; 1018 break; 1019 } 1020 case 1: { 1021 sink_(GetEmit3(index, (op >> 2) + 0)); 1022 break; 1023 } 1024 } 1025 return; 1026 } 1027 case 7: { 1028 const auto index = buffer_ & 127; 1029 const auto op = GetOp4(index); 1030 switch (op & 3) { 1031 case 0: { 1032 ok_ = false; 1033 break; 1034 } 1035 case 1: { 1036 sink_(GetEmit4(index, (op >> 2) + 0)); 1037 break; 1038 } 1039 } 1040 return; 1041 } 1042 case 0: { 1043 return; 1044 } 1045 } 1046 } DecodeStep0()1047 void DecodeStep0() { 1048 if (!RefillTo2()) { 1049 Done1(); 1050 return; 1051 } 1052 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1053 const auto op = GetOp5(index); 1054 const int consumed = op & 3; 1055 buffer_len_ -= consumed; 1056 const auto emit_ofs = op >> 2; 1057 sink_(GetEmit5(index, emit_ofs + 0)); 1058 } RefillTo2()1059 bool RefillTo2() { 1060 switch (buffer_len_) { 1061 case 0: { 1062 return Read1to8Bytes(); 1063 } 1064 case 1: { 1065 return Read1to7Bytes(); 1066 } 1067 } 1068 return true; 1069 } Done1()1070 void Done1() { 1071 done_ = true; 1072 switch (buffer_len_) { 1073 case 1: 1074 case 0: { 1075 ok_ = false; 1076 return; 1077 } 1078 } 1079 } DecodeStep1()1080 void DecodeStep1() { 1081 if (!RefillTo6()) { 1082 Done2(); 1083 return; 1084 } 1085 const auto index = (buffer_ >> (buffer_len_ - 6)) & 0x3f; 1086 const auto op = GetOp6(index); 1087 const int consumed = op & 7; 1088 buffer_len_ -= consumed; 1089 const auto emit_ofs = op >> 5; 1090 switch ((op >> 3) & 3) { 1091 case 0: { 1092 sink_(GetEmit6(index, emit_ofs + 0)); 1093 break; 1094 } 1095 case 1: { 1096 DecodeStep2(); 1097 break; 1098 } 1099 case 2: { 1100 DecodeStep3(); 1101 break; 1102 } 1103 } 1104 } RefillTo6()1105 bool RefillTo6() { 1106 switch (buffer_len_) { 1107 case 0: { 1108 return Read1to8Bytes(); 1109 } 1110 case 1: 1111 case 2: 1112 case 3: 1113 case 4: 1114 case 5: { 1115 return Read1to7Bytes(); 1116 } 1117 } 1118 return true; 1119 } Done2()1120 void Done2() { 1121 done_ = true; 1122 switch (buffer_len_) { 1123 case 1: { 1124 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1125 return; 1126 } 1127 case 2: { 1128 const auto index = buffer_ & 3; 1129 const auto op = GetOp7(index); 1130 switch (op & 3) { 1131 case 0: { 1132 sink_(GetEmit7(index, (op >> 2) + 0)); 1133 break; 1134 } 1135 case 1: { 1136 ok_ = false; 1137 break; 1138 } 1139 } 1140 return; 1141 } 1142 case 3: { 1143 const auto index = buffer_ & 7; 1144 const auto op = GetOp8(index); 1145 switch (op & 3) { 1146 case 0: { 1147 ok_ = false; 1148 break; 1149 } 1150 case 1: { 1151 sink_(GetEmit8(index, (op >> 2) + 0)); 1152 break; 1153 } 1154 } 1155 return; 1156 } 1157 case 4: { 1158 const auto index = buffer_ & 15; 1159 const auto op = GetOp9(index); 1160 switch (op & 3) { 1161 case 0: { 1162 ok_ = false; 1163 break; 1164 } 1165 case 1: { 1166 sink_(GetEmit9(index, (op >> 2) + 0)); 1167 break; 1168 } 1169 } 1170 return; 1171 } 1172 case 5: { 1173 const auto index = buffer_ & 31; 1174 const auto op = GetOp10(index); 1175 switch (op & 3) { 1176 case 0: { 1177 ok_ = false; 1178 break; 1179 } 1180 case 1: { 1181 sink_(GetEmit10(index, (op >> 2) + 0)); 1182 break; 1183 } 1184 } 1185 return; 1186 } 1187 case 0: { 1188 return; 1189 } 1190 } 1191 } DecodeStep2()1192 void DecodeStep2() { 1193 if (!RefillTo1()) { 1194 Done3(); 1195 return; 1196 } 1197 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1198 const auto op = GetOp11(index); 1199 const int consumed = op & 1; 1200 buffer_len_ -= consumed; 1201 const auto emit_ofs = op >> 1; 1202 sink_(GetEmit11(index, emit_ofs + 0)); 1203 } RefillTo1()1204 bool RefillTo1() { 1205 switch (buffer_len_) { 1206 case 0: { 1207 return Read1to8Bytes(); 1208 } 1209 } 1210 return true; 1211 } Done3()1212 void Done3() { 1213 done_ = true; 1214 ok_ = false; 1215 } DecodeStep3()1216 void DecodeStep3() { 1217 if (!RefillTo16()) { 1218 Done4(); 1219 return; 1220 } 1221 const auto index = (buffer_ >> (buffer_len_ - 16)) & 0xffff; 1222 const auto op = GetOp12(index); 1223 const int consumed = op & 31; 1224 buffer_len_ -= consumed; 1225 const auto emit_ofs = op >> 6; 1226 switch ((op >> 5) & 1) { 1227 case 0: { 1228 sink_(GetEmit12(index, emit_ofs + 0)); 1229 break; 1230 } 1231 case 1: { 1232 begin_ = end_; 1233 buffer_len_ = 0; 1234 break; 1235 } 1236 } 1237 } RefillTo16()1238 bool RefillTo16() { 1239 switch (buffer_len_) { 1240 case 0: { 1241 return Read2to8Bytes(); 1242 } 1243 case 1: 1244 case 2: 1245 case 3: 1246 case 4: 1247 case 5: 1248 case 6: 1249 case 7: { 1250 return Read2to7Bytes(); 1251 } 1252 case 8: { 1253 return Read1to7Bytes(); 1254 } 1255 case 9: 1256 case 10: 1257 case 11: 1258 case 12: 1259 case 13: 1260 case 14: 1261 case 15: { 1262 return Read1to6Bytes(); 1263 } 1264 } 1265 return true; 1266 } Read2to8Bytes()1267 bool Read2to8Bytes() { 1268 switch (end_ - begin_) { 1269 case 0: 1270 case 1: { 1271 return false; 1272 } 1273 case 2: { 1274 Fill2(); 1275 return true; 1276 } 1277 case 3: { 1278 Fill3(); 1279 return true; 1280 } 1281 case 4: { 1282 Fill4(); 1283 return true; 1284 } 1285 case 5: { 1286 Fill5(); 1287 return true; 1288 } 1289 case 6: { 1290 Fill6(); 1291 return true; 1292 } 1293 case 7: { 1294 Fill7(); 1295 return true; 1296 } 1297 default: { 1298 Fill8(); 1299 return true; 1300 } 1301 } 1302 } Read2to7Bytes()1303 bool Read2to7Bytes() { 1304 switch (end_ - begin_) { 1305 case 0: 1306 case 1: { 1307 return false; 1308 } 1309 case 2: { 1310 Fill2(); 1311 return true; 1312 } 1313 case 3: { 1314 Fill3(); 1315 return true; 1316 } 1317 case 4: { 1318 Fill4(); 1319 return true; 1320 } 1321 case 5: { 1322 Fill5(); 1323 return true; 1324 } 1325 case 6: { 1326 Fill6(); 1327 return true; 1328 } 1329 default: { 1330 Fill7(); 1331 return true; 1332 } 1333 } 1334 } Read1to6Bytes()1335 bool Read1to6Bytes() { 1336 switch (end_ - begin_) { 1337 case 0: { 1338 return false; 1339 } 1340 case 1: { 1341 Fill1(); 1342 return true; 1343 } 1344 case 2: { 1345 Fill2(); 1346 return true; 1347 } 1348 case 3: { 1349 Fill3(); 1350 return true; 1351 } 1352 case 4: { 1353 Fill4(); 1354 return true; 1355 } 1356 case 5: { 1357 Fill5(); 1358 return true; 1359 } 1360 default: { 1361 Fill6(); 1362 return true; 1363 } 1364 } 1365 } Done4()1366 void Done4() { 1367 done_ = true; 1368 switch (end_ - begin_) { 1369 case 1: { 1370 Fill1(); 1371 break; 1372 } 1373 } 1374 switch (buffer_len_) { 1375 case 1: { 1376 const auto index = buffer_ & 1; 1377 const auto op = GetOp13(index); 1378 switch (op & 1) { 1379 case 0: { 1380 sink_(GetEmit13(index, (op >> 1) + 0)); 1381 break; 1382 } 1383 } 1384 return; 1385 } 1386 case 2: { 1387 const auto index = buffer_ & 3; 1388 const auto op = GetOp14(index); 1389 switch (op & 3) { 1390 case 0: { 1391 ok_ = false; 1392 break; 1393 } 1394 case 1: { 1395 sink_(GetEmit14(index, (op >> 2) + 0)); 1396 break; 1397 } 1398 } 1399 return; 1400 } 1401 case 3: { 1402 const auto index = buffer_ & 7; 1403 const auto op = GetOp15(index); 1404 switch (op & 3) { 1405 case 0: { 1406 ok_ = false; 1407 break; 1408 } 1409 case 1: { 1410 sink_(GetEmit15(index, (op >> 2) + 0)); 1411 break; 1412 } 1413 } 1414 return; 1415 } 1416 case 4: { 1417 const auto index = buffer_ & 15; 1418 const auto op = GetOp16(index); 1419 switch (op & 3) { 1420 case 0: { 1421 ok_ = false; 1422 break; 1423 } 1424 case 1: { 1425 sink_(GetEmit16(index, (op >> 2) + 0)); 1426 break; 1427 } 1428 } 1429 return; 1430 } 1431 case 5: { 1432 const auto index = buffer_ & 31; 1433 const auto op = GetOp17(index); 1434 switch (op & 3) { 1435 case 0: { 1436 ok_ = false; 1437 break; 1438 } 1439 case 1: { 1440 sink_(GetEmit17(index, (op >> 2) + 0)); 1441 break; 1442 } 1443 } 1444 return; 1445 } 1446 case 6: { 1447 const auto index = buffer_ & 63; 1448 const auto op = GetOp18(index); 1449 switch (op & 3) { 1450 case 0: { 1451 sink_(GetEmit18(index, (op >> 2) + 0)); 1452 sink_(GetEmit18(index, (op >> 2) + 1)); 1453 break; 1454 } 1455 case 1: { 1456 ok_ = false; 1457 break; 1458 } 1459 case 2: { 1460 sink_(GetEmit18(index, (op >> 2) + 0)); 1461 break; 1462 } 1463 } 1464 return; 1465 } 1466 case 7: { 1467 const auto index = buffer_ & 127; 1468 const auto op = GetOp19(index); 1469 switch (op & 3) { 1470 case 0: { 1471 ok_ = false; 1472 break; 1473 } 1474 case 1: { 1475 sink_(GetEmit19(index, (op >> 2) + 0)); 1476 sink_(GetEmit19(index, (op >> 2) + 1)); 1477 break; 1478 } 1479 case 2: { 1480 sink_(GetEmit19(index, (op >> 2) + 0)); 1481 break; 1482 } 1483 } 1484 return; 1485 } 1486 case 8: { 1487 const auto index = buffer_ & 255; 1488 const auto op = GetOp20(index); 1489 switch (op & 3) { 1490 case 0: { 1491 ok_ = false; 1492 break; 1493 } 1494 case 1: { 1495 sink_(GetEmit20(index, (op >> 2) + 0)); 1496 sink_(GetEmit20(index, (op >> 2) + 1)); 1497 break; 1498 } 1499 case 2: { 1500 sink_(GetEmit20(index, (op >> 2) + 0)); 1501 break; 1502 } 1503 } 1504 return; 1505 } 1506 case 9: { 1507 const auto index = buffer_ & 511; 1508 const auto op = GetOp21(index); 1509 switch (op & 3) { 1510 case 0: { 1511 ok_ = false; 1512 break; 1513 } 1514 case 1: { 1515 sink_(GetEmit21(index, (op >> 2) + 0)); 1516 sink_(GetEmit21(index, (op >> 2) + 1)); 1517 break; 1518 } 1519 case 2: { 1520 sink_(GetEmit21(index, (op >> 2) + 0)); 1521 break; 1522 } 1523 } 1524 return; 1525 } 1526 case 10: { 1527 const auto index = buffer_ & 1023; 1528 const auto op = GetOp22(index); 1529 switch (op & 3) { 1530 case 0: { 1531 ok_ = false; 1532 break; 1533 } 1534 case 1: { 1535 sink_(GetEmit22(index, (op >> 2) + 0)); 1536 sink_(GetEmit22(index, (op >> 2) + 1)); 1537 break; 1538 } 1539 case 2: { 1540 sink_(GetEmit22(index, (op >> 2) + 0)); 1541 break; 1542 } 1543 } 1544 return; 1545 } 1546 case 11: { 1547 const auto index = buffer_ & 2047; 1548 const auto op = GetOp23(index); 1549 switch (op & 7) { 1550 case 0: { 1551 sink_(GetEmit23(index, (op >> 3) + 0)); 1552 sink_(GetEmit23(index, (op >> 3) + 1)); 1553 sink_(GetEmit23(index, (op >> 3) + 2)); 1554 break; 1555 } 1556 case 1: { 1557 ok_ = false; 1558 break; 1559 } 1560 case 2: { 1561 sink_(GetEmit23(index, (op >> 3) + 0)); 1562 sink_(GetEmit23(index, (op >> 3) + 1)); 1563 break; 1564 } 1565 case 3: { 1566 sink_(GetEmit23(index, (op >> 3) + 0)); 1567 break; 1568 } 1569 } 1570 return; 1571 } 1572 case 12: { 1573 const auto index = buffer_ & 4095; 1574 const auto op = GetOp24(index); 1575 switch (op & 7) { 1576 case 0: { 1577 ok_ = false; 1578 break; 1579 } 1580 case 1: { 1581 sink_(GetEmit24(index, (op >> 3) + 0)); 1582 sink_(GetEmit24(index, (op >> 3) + 1)); 1583 sink_(GetEmit24(index, (op >> 3) + 2)); 1584 break; 1585 } 1586 case 2: { 1587 sink_(GetEmit24(index, (op >> 3) + 0)); 1588 sink_(GetEmit24(index, (op >> 3) + 1)); 1589 break; 1590 } 1591 case 3: { 1592 sink_(GetEmit24(index, (op >> 3) + 0)); 1593 break; 1594 } 1595 } 1596 return; 1597 } 1598 case 13: { 1599 const auto index = buffer_ & 8191; 1600 const auto op = GetOp25(index); 1601 switch (op & 7) { 1602 case 0: { 1603 ok_ = false; 1604 break; 1605 } 1606 case 1: { 1607 sink_(GetEmit25(index, (op >> 3) + 0)); 1608 sink_(GetEmit25(index, (op >> 3) + 1)); 1609 sink_(GetEmit25(index, (op >> 3) + 2)); 1610 break; 1611 } 1612 case 2: { 1613 sink_(GetEmit25(index, (op >> 3) + 0)); 1614 sink_(GetEmit25(index, (op >> 3) + 1)); 1615 break; 1616 } 1617 case 3: { 1618 sink_(GetEmit25(index, (op >> 3) + 0)); 1619 break; 1620 } 1621 } 1622 return; 1623 } 1624 case 14: { 1625 const auto index = buffer_ & 16383; 1626 const auto op = GetOp26(index); 1627 switch (op & 7) { 1628 case 0: { 1629 ok_ = false; 1630 break; 1631 } 1632 case 1: { 1633 sink_(GetEmit26(index, (op >> 3) + 0)); 1634 sink_(GetEmit26(index, (op >> 3) + 1)); 1635 sink_(GetEmit26(index, (op >> 3) + 2)); 1636 break; 1637 } 1638 case 2: { 1639 sink_(GetEmit26(index, (op >> 3) + 0)); 1640 sink_(GetEmit26(index, (op >> 3) + 1)); 1641 break; 1642 } 1643 case 3: { 1644 sink_(GetEmit26(index, (op >> 3) + 0)); 1645 break; 1646 } 1647 } 1648 return; 1649 } 1650 case 15: { 1651 const auto index = buffer_ & 32767; 1652 const auto op = GetOp27(index); 1653 switch (op & 7) { 1654 case 0: { 1655 ok_ = false; 1656 break; 1657 } 1658 case 1: { 1659 sink_(GetEmit27(index, (op >> 3) + 0)); 1660 sink_(GetEmit27(index, (op >> 3) + 1)); 1661 sink_(GetEmit27(index, (op >> 3) + 2)); 1662 break; 1663 } 1664 case 2: { 1665 sink_(GetEmit27(index, (op >> 3) + 0)); 1666 sink_(GetEmit27(index, (op >> 3) + 1)); 1667 break; 1668 } 1669 case 3: { 1670 sink_(GetEmit27(index, (op >> 3) + 0)); 1671 break; 1672 } 1673 } 1674 return; 1675 } 1676 case 0: { 1677 return; 1678 } 1679 } 1680 } 1681 F sink_; 1682 const uint8_t* begin_; 1683 const uint8_t* const end_; 1684 uint64_t buffer_ = 0; 1685 int buffer_len_ = 0; 1686 bool ok_ = true; 1687 bool done_ = false; 1688 }; 1689 } // namespace geometry_8_6_16 1690 } // namespace grpc_core 1691 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_8_6_16_H 1692