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_6_15_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_6_15_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_9_6_15 { 26 class HuffDecoderCommon { 27 protected: GetOp2(size_t i)28 static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; } GetEmit2(size_t,size_t emit)29 static inline uint64_t GetEmit2(size_t, size_t emit) { 30 return table2_0_emit_[emit]; 31 } GetOp3(size_t i)32 static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; } GetEmit3(size_t,size_t emit)33 static inline uint64_t GetEmit3(size_t, size_t emit) { 34 return table3_0_emit_[emit]; 35 } 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 } GetOp10(size_t i)92 static inline uint64_t GetOp10(size_t i) { return table10_0_ops_[i]; } GetEmit10(size_t,size_t emit)93 static inline uint64_t GetEmit10(size_t, size_t emit) { 94 return table10_0_emit_[emit]; 95 } GetOp16(size_t i)96 static inline uint64_t GetOp16(size_t i) { 97 return table16_0_inner_[(i < 3 ? (i) : ((i - 3) / 12 + 3))]; 98 } GetEmit16(size_t,size_t emit)99 static inline uint64_t GetEmit16(size_t, size_t emit) { 100 return (emit < 1 ? (((void)emit, 92)) : ((emit - 1) ? 208 : 195)); 101 } GetOp17(size_t i)102 static inline uint64_t GetOp17(size_t i) { return table17_0_ops_[i]; } GetEmit17(size_t,size_t emit)103 static inline uint64_t GetEmit17(size_t, size_t emit) { 104 return table17_0_emit_[emit]; 105 } GetOp18(size_t i)106 static inline uint64_t GetOp18(size_t i) { return table18_0_ops_[i]; } GetEmit18(size_t,size_t emit)107 static inline uint64_t GetEmit18(size_t, size_t emit) { 108 return table18_0_emit_[emit]; 109 } GetOp19(size_t i)110 static inline uint64_t GetOp19(size_t i) { return table19_0_ops_[i]; } GetEmit19(size_t,size_t emit)111 static inline uint64_t GetEmit19(size_t, size_t emit) { 112 return table19_0_emit_[emit]; 113 } GetOp20(size_t i)114 static inline uint64_t GetOp20(size_t i) { 115 return table20_ops_[i >> 7][i & 0x7f]; 116 } GetEmit20(size_t i,size_t emit)117 static inline uint64_t GetEmit20(size_t i, size_t emit) { 118 return table20_emit_[i >> 7][emit]; 119 } GetOp21(size_t i)120 static inline uint64_t GetOp21(size_t i) { 121 return table21_ops_[i >> 7][i & 0x7f]; 122 } GetEmit21(size_t i,size_t emit)123 static inline uint64_t GetEmit21(size_t i, size_t emit) { 124 return table21_emit_[i >> 7][emit]; 125 } GetOp22(size_t i)126 static inline uint64_t GetOp22(size_t i) { 127 return table22_ops_[i >> 6][i & 0x3f]; 128 } GetEmit22(size_t i,size_t emit)129 static inline uint64_t GetEmit22(size_t i, size_t emit) { 130 return table22_emit_[i >> 6][emit]; 131 } GetOp23(size_t i)132 static inline uint64_t GetOp23(size_t i) { 133 return table23_ops_[i >> 6][i & 0x3f]; 134 } GetEmit23(size_t i,size_t emit)135 static inline uint64_t GetEmit23(size_t i, size_t emit) { 136 return table23_emit_[i >> 6][emit]; 137 } GetOp24(size_t i)138 static inline uint64_t GetOp24(size_t i) { 139 return table24_ops_[i >> 6][i & 0x3f]; 140 } GetEmit24(size_t i,size_t emit)141 static inline uint64_t GetEmit24(size_t i, size_t emit) { 142 return table24_emit_[i >> 6][emit]; 143 } GetOp25(size_t i)144 static inline uint64_t GetOp25(size_t i) { 145 return table25_ops_[i >> 7][i & 0x7f]; 146 } GetEmit25(size_t i,size_t emit)147 static inline uint64_t GetEmit25(size_t i, size_t emit) { 148 return table25_emit_[i >> 7][emit]; 149 } GetOp26(size_t i)150 static inline uint64_t GetOp26(size_t i) { 151 return table26_ops_[i >> 7][i & 0x7f]; 152 } GetEmit26(size_t i,size_t emit)153 static inline uint64_t GetEmit26(size_t i, size_t emit) { 154 return table26_emit_[i >> 7][emit]; 155 } GetOp15(size_t i)156 static inline uint64_t GetOp15(size_t i) { 157 return table15_ops_[i >> 8][i & 0xff]; 158 } GetEmit15(size_t i,size_t emit)159 static inline uint64_t GetEmit15(size_t i, size_t emit) { 160 return table15_emit_[i >> 8][emit]; 161 } 162 163 private: 164 static const uint8_t table2_0_emit_[10]; 165 static const uint8_t table2_0_ops_[32]; 166 static const uint8_t table3_0_emit_[36]; 167 static const uint8_t table3_0_ops_[64]; 168 static const uint8_t table4_0_emit_[22]; 169 static const uint8_t table4_0_ops_[64]; 170 static const uint8_t table4_1_emit_[46]; 171 static const uint8_t table4_1_ops_[64]; 172 static const uint8_t* const table4_emit_[2]; 173 static const uint8_t* const table4_ops_[2]; 174 static const uint8_t table5_0_ops_[128]; 175 static const uint8_t table5_1_emit_[52]; 176 static const uint8_t table5_1_ops_[128]; 177 static const uint8_t* const table5_emit_[2]; 178 static const uint8_t* const table5_ops_[2]; 179 static const uint8_t table1_0_emit_[2]; 180 static const uint16_t table1_0_ops_[32]; 181 static const uint8_t table1_1_emit_[2]; 182 static const uint8_t table1_2_emit_[2]; 183 static const uint8_t table1_3_emit_[2]; 184 static const uint8_t table1_4_emit_[2]; 185 static const uint8_t table1_5_emit_[4]; 186 static const uint16_t table1_5_ops_[32]; 187 static const uint8_t table1_6_emit_[4]; 188 static const uint8_t table1_7_emit_[4]; 189 static const uint8_t table1_8_emit_[4]; 190 static const uint8_t table1_9_emit_[4]; 191 static const uint8_t table1_10_emit_[4]; 192 static const uint8_t table1_11_emit_[6]; 193 static const uint16_t table1_11_ops_[32]; 194 static const uint8_t table1_12_emit_[8]; 195 static const uint16_t table1_12_ops_[32]; 196 static const uint8_t table1_13_emit_[8]; 197 static const uint8_t table1_14_emit_[8]; 198 static const uint8_t table1_15_emit_[10]; 199 static const uint16_t table1_15_ops_[32]; 200 static const uint8_t* const table1_emit_[16]; 201 static const uint16_t* const table1_ops_[16]; 202 static const uint8_t table12_0_inner_[5]; 203 static const uint8_t table12_0_outer_[8]; 204 static const uint8_t table13_0_emit_[9]; 205 static const uint8_t table13_0_inner_[11]; 206 static const uint8_t table13_0_outer_[16]; 207 static const uint8_t table14_0_emit_[11]; 208 static const uint8_t table14_0_ops_[32]; 209 static const uint8_t table10_0_emit_[14]; 210 static const uint8_t table10_0_ops_[64]; 211 static const uint8_t table16_0_inner_[5]; 212 static const uint8_t table17_0_emit_[11]; 213 static const uint8_t table17_0_ops_[32]; 214 static const uint8_t table18_0_emit_[24]; 215 static const uint8_t table18_0_ops_[64]; 216 static const uint8_t table19_0_emit_[50]; 217 static const uint8_t table19_0_ops_[128]; 218 static const uint8_t table20_0_emit_[15]; 219 static const uint8_t table20_0_ops_[128]; 220 static const uint8_t table20_1_emit_[64]; 221 static const uint8_t table20_1_ops_[128]; 222 static const uint8_t* const table20_emit_[2]; 223 static const uint8_t* const table20_ops_[2]; 224 static const uint8_t table21_0_emit_[62]; 225 static const uint8_t table21_0_ops_[128]; 226 static const uint8_t table21_1_emit_[10]; 227 static const uint8_t table21_1_ops_[128]; 228 static const uint8_t table21_2_emit_[23]; 229 static const uint8_t table21_2_ops_[128]; 230 static const uint8_t table21_3_emit_[53]; 231 static const uint8_t table21_3_ops_[128]; 232 static const uint8_t* const table21_emit_[4]; 233 static const uint8_t* const table21_ops_[4]; 234 static const uint8_t table22_0_emit_[72]; 235 static const uint16_t table22_0_ops_[64]; 236 static const uint8_t table22_1_emit_[72]; 237 static const uint8_t table22_2_emit_[72]; 238 static const uint8_t table22_3_emit_[40]; 239 static const uint16_t table22_3_ops_[64]; 240 static const uint8_t table22_4_emit_[40]; 241 static const uint8_t table22_5_emit_[40]; 242 static const uint8_t table22_6_emit_[40]; 243 static const uint8_t table22_7_emit_[4]; 244 static const uint16_t table22_7_ops_[64]; 245 static const uint8_t table22_8_emit_[4]; 246 static const uint8_t table22_9_emit_[4]; 247 static const uint8_t table22_10_emit_[7]; 248 static const uint16_t table22_10_ops_[64]; 249 static const uint8_t table22_11_emit_[8]; 250 static const uint16_t table22_11_ops_[64]; 251 static const uint8_t table22_12_emit_[8]; 252 static const uint8_t table22_13_emit_[12]; 253 static const uint16_t table22_13_ops_[64]; 254 static const uint8_t table22_14_emit_[16]; 255 static const uint16_t table22_14_ops_[64]; 256 static const uint8_t table22_15_emit_[21]; 257 static const uint16_t table22_15_ops_[64]; 258 static const uint8_t* const table22_emit_[16]; 259 static const uint16_t* const table22_ops_[16]; 260 static const uint8_t table23_0_emit_[44]; 261 static const uint16_t table23_0_ops_[64]; 262 static const uint8_t table23_1_emit_[92]; 263 static const uint16_t table23_1_ops_[64]; 264 static const uint8_t table23_2_emit_[44]; 265 static const uint8_t table23_3_emit_[92]; 266 static const uint8_t table23_4_emit_[44]; 267 static const uint8_t table23_5_emit_[92]; 268 static const uint8_t table23_6_emit_[72]; 269 static const uint8_t table23_7_emit_[72]; 270 static const uint8_t table23_8_emit_[72]; 271 static const uint8_t table23_9_emit_[72]; 272 static const uint8_t table23_10_emit_[72]; 273 static const uint8_t table23_11_emit_[72]; 274 static const uint8_t table23_12_emit_[72]; 275 static const uint8_t table23_13_emit_[72]; 276 static const uint8_t table23_14_emit_[40]; 277 static const uint8_t table23_15_emit_[40]; 278 static const uint8_t table23_16_emit_[40]; 279 static const uint8_t table23_17_emit_[40]; 280 static const uint8_t table23_18_emit_[40]; 281 static const uint8_t table23_19_emit_[40]; 282 static const uint8_t table23_20_emit_[22]; 283 static const uint16_t table23_20_ops_[64]; 284 static const uint8_t table23_21_emit_[4]; 285 static const uint8_t table23_22_emit_[4]; 286 static const uint8_t table23_23_emit_[4]; 287 static const uint8_t table23_24_emit_[4]; 288 static const uint8_t table23_25_emit_[4]; 289 static const uint8_t table23_26_emit_[4]; 290 static const uint8_t table23_27_emit_[8]; 291 static const uint8_t table23_28_emit_[8]; 292 static const uint8_t table23_29_emit_[8]; 293 static const uint8_t table23_30_emit_[11]; 294 static const uint16_t table23_30_ops_[64]; 295 static const uint8_t table23_31_emit_[25]; 296 static const uint16_t table23_31_ops_[64]; 297 static const uint8_t* const table23_emit_[32]; 298 static const uint16_t* const table23_ops_[32]; 299 static const uint8_t table24_0_emit_[16]; 300 static const uint16_t table24_0_ops_[64]; 301 static const uint8_t table24_1_emit_[28]; 302 static const uint16_t table24_1_ops_[64]; 303 static const uint8_t table24_2_emit_[36]; 304 static const uint16_t table24_2_ops_[64]; 305 static const uint8_t table24_3_emit_[68]; 306 static const uint16_t table24_3_ops_[64]; 307 static const uint8_t table24_4_emit_[16]; 308 static const uint8_t table24_5_emit_[28]; 309 static const uint8_t table24_6_emit_[36]; 310 static const uint8_t table24_7_emit_[68]; 311 static const uint8_t table24_8_emit_[16]; 312 static const uint8_t table24_9_emit_[28]; 313 static const uint8_t table24_10_emit_[36]; 314 static const uint8_t table24_11_emit_[68]; 315 static const uint8_t table24_12_emit_[44]; 316 static const uint8_t table24_13_emit_[92]; 317 static const uint8_t table24_14_emit_[44]; 318 static const uint8_t table24_15_emit_[92]; 319 static const uint8_t table24_16_emit_[44]; 320 static const uint8_t table24_17_emit_[92]; 321 static const uint8_t table24_18_emit_[44]; 322 static const uint8_t table24_19_emit_[92]; 323 static const uint8_t table24_20_emit_[44]; 324 static const uint8_t table24_21_emit_[92]; 325 static const uint8_t table24_22_emit_[44]; 326 static const uint8_t table24_23_emit_[92]; 327 static const uint8_t table24_24_emit_[44]; 328 static const uint8_t table24_25_emit_[92]; 329 static const uint8_t table24_26_emit_[44]; 330 static const uint8_t table24_27_emit_[92]; 331 static const uint8_t table24_28_emit_[72]; 332 static const uint8_t table24_29_emit_[72]; 333 static const uint8_t table24_30_emit_[72]; 334 static const uint8_t table24_31_emit_[72]; 335 static const uint8_t table24_32_emit_[72]; 336 static const uint8_t table24_33_emit_[72]; 337 static const uint8_t table24_34_emit_[72]; 338 static const uint8_t table24_35_emit_[72]; 339 static const uint8_t table24_36_emit_[72]; 340 static const uint8_t table24_37_emit_[72]; 341 static const uint8_t table24_38_emit_[72]; 342 static const uint8_t table24_39_emit_[72]; 343 static const uint8_t table24_40_emit_[72]; 344 static const uint8_t table24_41_emit_[40]; 345 static const uint8_t table24_42_emit_[40]; 346 static const uint8_t table24_43_emit_[40]; 347 static const uint8_t table24_44_emit_[40]; 348 static const uint8_t table24_45_emit_[40]; 349 static const uint8_t table24_46_emit_[40]; 350 static const uint8_t table24_47_emit_[40]; 351 static const uint8_t table24_48_emit_[40]; 352 static const uint8_t table24_49_emit_[40]; 353 static const uint8_t table24_50_emit_[40]; 354 static const uint8_t table24_51_emit_[40]; 355 static const uint8_t table24_52_emit_[40]; 356 static const uint8_t table24_53_emit_[40]; 357 static const uint8_t table24_54_emit_[4]; 358 static const uint8_t table24_55_emit_[4]; 359 static const uint8_t table24_56_emit_[4]; 360 static const uint8_t table24_57_emit_[4]; 361 static const uint8_t table24_58_emit_[4]; 362 static const uint8_t table24_59_emit_[4]; 363 static const uint8_t table24_60_emit_[4]; 364 static const uint8_t table24_61_emit_[7]; 365 static const uint8_t table24_62_emit_[10]; 366 static const uint16_t table24_62_ops_[64]; 367 static const uint8_t table24_63_emit_[34]; 368 static const uint16_t table24_63_ops_[64]; 369 static const uint8_t* const table24_emit_[64]; 370 static const uint16_t* const table24_ops_[64]; 371 static const uint16_t table25_0_ops_[128]; 372 static const uint16_t table25_1_ops_[128]; 373 static const uint16_t table25_2_ops_[128]; 374 static const uint16_t table25_3_ops_[128]; 375 static const uint16_t table25_12_ops_[128]; 376 static const uint8_t table25_13_emit_[104]; 377 static const uint16_t table25_13_ops_[128]; 378 static const uint8_t table25_15_emit_[104]; 379 static const uint8_t table25_17_emit_[104]; 380 static const uint8_t table25_19_emit_[104]; 381 static const uint8_t table25_21_emit_[104]; 382 static const uint8_t table25_23_emit_[104]; 383 static const uint8_t table25_25_emit_[104]; 384 static const uint8_t table25_27_emit_[104]; 385 static const uint8_t table25_28_emit_[136]; 386 static const uint16_t table25_28_ops_[128]; 387 static const uint8_t table25_29_emit_[136]; 388 static const uint8_t table25_30_emit_[136]; 389 static const uint8_t table25_31_emit_[136]; 390 static const uint8_t table25_32_emit_[136]; 391 static const uint8_t table25_33_emit_[136]; 392 static const uint8_t table25_34_emit_[136]; 393 static const uint8_t table25_35_emit_[136]; 394 static const uint8_t table25_36_emit_[136]; 395 static const uint8_t table25_37_emit_[136]; 396 static const uint8_t table25_38_emit_[136]; 397 static const uint8_t table25_39_emit_[136]; 398 static const uint8_t table25_40_emit_[136]; 399 static const uint8_t table25_41_emit_[144]; 400 static const uint16_t table25_41_ops_[128]; 401 static const uint8_t table25_42_emit_[144]; 402 static const uint8_t table25_43_emit_[144]; 403 static const uint8_t table25_44_emit_[144]; 404 static const uint8_t table25_45_emit_[144]; 405 static const uint8_t table25_46_emit_[144]; 406 static const uint8_t table25_47_emit_[144]; 407 static const uint8_t table25_48_emit_[144]; 408 static const uint8_t table25_49_emit_[144]; 409 static const uint8_t table25_50_emit_[144]; 410 static const uint8_t table25_51_emit_[144]; 411 static const uint8_t table25_52_emit_[144]; 412 static const uint8_t table25_53_emit_[144]; 413 static const uint8_t table25_54_emit_[80]; 414 static const uint16_t table25_54_ops_[128]; 415 static const uint8_t table25_55_emit_[80]; 416 static const uint8_t table25_56_emit_[80]; 417 static const uint8_t table25_57_emit_[80]; 418 static const uint8_t table25_58_emit_[80]; 419 static const uint8_t table25_59_emit_[80]; 420 static const uint8_t table25_60_emit_[80]; 421 static const uint8_t table25_61_emit_[26]; 422 static const uint16_t table25_61_ops_[128]; 423 static const uint16_t table25_62_ops_[128]; 424 static const uint8_t table25_63_emit_[63]; 425 static const uint16_t table25_63_ops_[128]; 426 static const uint8_t* const table25_emit_[64]; 427 static const uint16_t* const table25_ops_[64]; 428 static const uint8_t table26_0_emit_[120]; 429 static const uint16_t table26_0_ops_[128]; 430 static const uint8_t table26_1_emit_[120]; 431 static const uint8_t table26_2_emit_[68]; 432 static const uint16_t table26_2_ops_[128]; 433 static const uint8_t table26_3_emit_[16]; 434 static const uint16_t table26_3_ops_[128]; 435 static const uint8_t table26_4_emit_[16]; 436 static const uint8_t table26_5_emit_[20]; 437 static const uint16_t table26_5_ops_[128]; 438 static const uint8_t table26_6_emit_[32]; 439 static const uint16_t table26_6_ops_[128]; 440 static const uint8_t table26_7_emit_[46]; 441 static const uint16_t table26_7_ops_[128]; 442 static const uint8_t table26_8_emit_[120]; 443 static const uint8_t table26_9_emit_[120]; 444 static const uint8_t table26_10_emit_[68]; 445 static const uint8_t table26_11_emit_[16]; 446 static const uint8_t table26_12_emit_[16]; 447 static const uint8_t table26_13_emit_[20]; 448 static const uint8_t table26_14_emit_[32]; 449 static const uint8_t table26_15_emit_[46]; 450 static const uint8_t table26_16_emit_[120]; 451 static const uint8_t table26_17_emit_[120]; 452 static const uint8_t table26_18_emit_[68]; 453 static const uint8_t table26_19_emit_[16]; 454 static const uint8_t table26_20_emit_[16]; 455 static const uint8_t table26_21_emit_[20]; 456 static const uint8_t table26_22_emit_[32]; 457 static const uint8_t table26_23_emit_[46]; 458 static const uint8_t table26_24_emit_[16]; 459 static const uint8_t table26_25_emit_[28]; 460 static const uint16_t table26_25_ops_[128]; 461 static const uint8_t table26_26_emit_[36]; 462 static const uint16_t table26_26_ops_[128]; 463 static const uint8_t table26_27_emit_[68]; 464 static const uint16_t table26_27_ops_[128]; 465 static const uint8_t table26_28_emit_[16]; 466 static const uint8_t table26_29_emit_[28]; 467 static const uint8_t table26_30_emit_[36]; 468 static const uint8_t table26_31_emit_[68]; 469 static const uint8_t table26_32_emit_[16]; 470 static const uint8_t table26_33_emit_[28]; 471 static const uint8_t table26_34_emit_[36]; 472 static const uint8_t table26_35_emit_[68]; 473 static const uint8_t table26_36_emit_[16]; 474 static const uint8_t table26_37_emit_[28]; 475 static const uint8_t table26_38_emit_[36]; 476 static const uint8_t table26_39_emit_[68]; 477 static const uint8_t table26_40_emit_[16]; 478 static const uint8_t table26_41_emit_[28]; 479 static const uint8_t table26_42_emit_[36]; 480 static const uint8_t table26_43_emit_[68]; 481 static const uint8_t table26_44_emit_[16]; 482 static const uint8_t table26_45_emit_[28]; 483 static const uint8_t table26_46_emit_[36]; 484 static const uint8_t table26_47_emit_[68]; 485 static const uint8_t table26_48_emit_[16]; 486 static const uint8_t table26_49_emit_[28]; 487 static const uint8_t table26_50_emit_[36]; 488 static const uint8_t table26_51_emit_[68]; 489 static const uint8_t table26_52_emit_[16]; 490 static const uint8_t table26_53_emit_[28]; 491 static const uint8_t table26_54_emit_[36]; 492 static const uint8_t table26_55_emit_[68]; 493 static const uint8_t table26_56_emit_[44]; 494 static const uint16_t table26_56_ops_[128]; 495 static const uint8_t table26_57_emit_[104]; 496 static const uint16_t table26_57_ops_[128]; 497 static const uint8_t table26_58_emit_[44]; 498 static const uint8_t table26_59_emit_[104]; 499 static const uint8_t table26_60_emit_[44]; 500 static const uint8_t table26_61_emit_[104]; 501 static const uint8_t table26_62_emit_[44]; 502 static const uint8_t table26_63_emit_[104]; 503 static const uint8_t table26_64_emit_[44]; 504 static const uint8_t table26_65_emit_[104]; 505 static const uint8_t table26_66_emit_[44]; 506 static const uint8_t table26_67_emit_[104]; 507 static const uint8_t table26_68_emit_[44]; 508 static const uint8_t table26_69_emit_[104]; 509 static const uint8_t table26_70_emit_[44]; 510 static const uint8_t table26_71_emit_[104]; 511 static const uint8_t table26_72_emit_[44]; 512 static const uint8_t table26_73_emit_[104]; 513 static const uint8_t table26_74_emit_[44]; 514 static const uint8_t table26_75_emit_[104]; 515 static const uint8_t table26_76_emit_[44]; 516 static const uint8_t table26_77_emit_[104]; 517 static const uint8_t table26_78_emit_[44]; 518 static const uint8_t table26_79_emit_[104]; 519 static const uint8_t table26_80_emit_[44]; 520 static const uint8_t table26_81_emit_[104]; 521 static const uint8_t table26_82_emit_[136]; 522 static const uint16_t table26_82_ops_[128]; 523 static const uint8_t table26_83_emit_[136]; 524 static const uint8_t table26_84_emit_[136]; 525 static const uint8_t table26_85_emit_[136]; 526 static const uint8_t table26_86_emit_[136]; 527 static const uint8_t table26_87_emit_[136]; 528 static const uint8_t table26_88_emit_[136]; 529 static const uint8_t table26_89_emit_[136]; 530 static const uint8_t table26_90_emit_[136]; 531 static const uint8_t table26_91_emit_[136]; 532 static const uint8_t table26_92_emit_[136]; 533 static const uint8_t table26_93_emit_[136]; 534 static const uint8_t table26_94_emit_[136]; 535 static const uint8_t table26_95_emit_[136]; 536 static const uint8_t table26_96_emit_[136]; 537 static const uint8_t table26_97_emit_[136]; 538 static const uint8_t table26_98_emit_[136]; 539 static const uint8_t table26_99_emit_[136]; 540 static const uint8_t table26_100_emit_[136]; 541 static const uint8_t table26_101_emit_[136]; 542 static const uint8_t table26_102_emit_[136]; 543 static const uint8_t table26_103_emit_[136]; 544 static const uint8_t table26_104_emit_[136]; 545 static const uint8_t table26_105_emit_[136]; 546 static const uint8_t table26_106_emit_[136]; 547 static const uint8_t table26_107_emit_[136]; 548 static const uint8_t table26_108_emit_[144]; 549 static const uint16_t table26_108_ops_[128]; 550 static const uint8_t table26_109_emit_[144]; 551 static const uint8_t table26_110_emit_[144]; 552 static const uint8_t table26_111_emit_[144]; 553 static const uint8_t table26_112_emit_[144]; 554 static const uint8_t table26_113_emit_[144]; 555 static const uint8_t table26_114_emit_[144]; 556 static const uint8_t table26_115_emit_[144]; 557 static const uint8_t table26_116_emit_[144]; 558 static const uint8_t table26_117_emit_[144]; 559 static const uint8_t table26_118_emit_[144]; 560 static const uint8_t table26_119_emit_[144]; 561 static const uint8_t table26_120_emit_[144]; 562 static const uint8_t table26_121_emit_[144]; 563 static const uint8_t table26_122_emit_[112]; 564 static const uint16_t table26_122_ops_[128]; 565 static const uint8_t table26_123_emit_[80]; 566 static const uint16_t table26_123_ops_[128]; 567 static const uint8_t table26_124_emit_[80]; 568 static const uint8_t table26_125_emit_[44]; 569 static const uint16_t table26_125_ops_[128]; 570 static const uint8_t table26_126_emit_[17]; 571 static const uint16_t table26_126_ops_[128]; 572 static const uint8_t table26_127_emit_[46]; 573 static const uint16_t table26_127_ops_[128]; 574 static const uint8_t* const table26_emit_[128]; 575 static const uint16_t* const table26_ops_[128]; 576 static const uint8_t table15_0_emit_[1]; 577 static const uint16_t table15_0_ops_[256]; 578 static const uint8_t table15_8_emit_[1]; 579 static const uint8_t table15_16_emit_[1]; 580 static const uint8_t table15_24_emit_[1]; 581 static const uint16_t table15_24_ops_[256]; 582 static const uint8_t table15_28_emit_[1]; 583 static const uint8_t table15_32_emit_[1]; 584 static const uint8_t table15_36_emit_[1]; 585 static const uint8_t table15_40_emit_[1]; 586 static const uint8_t table15_44_emit_[1]; 587 static const uint8_t table15_48_emit_[1]; 588 static const uint8_t table15_52_emit_[1]; 589 static const uint8_t table15_56_emit_[1]; 590 static const uint16_t table15_56_ops_[256]; 591 static const uint8_t table15_58_emit_[1]; 592 static const uint8_t table15_60_emit_[1]; 593 static const uint8_t table15_62_emit_[1]; 594 static const uint8_t table15_64_emit_[1]; 595 static const uint8_t table15_66_emit_[1]; 596 static const uint8_t table15_68_emit_[1]; 597 static const uint8_t table15_70_emit_[1]; 598 static const uint8_t table15_72_emit_[1]; 599 static const uint8_t table15_74_emit_[1]; 600 static const uint8_t table15_76_emit_[1]; 601 static const uint8_t table15_78_emit_[1]; 602 static const uint8_t table15_80_emit_[1]; 603 static const uint8_t table15_82_emit_[1]; 604 static const uint16_t table15_82_ops_[256]; 605 static const uint8_t table15_83_emit_[1]; 606 static const uint8_t table15_84_emit_[1]; 607 static const uint8_t table15_85_emit_[1]; 608 static const uint8_t table15_86_emit_[1]; 609 static const uint8_t table15_87_emit_[1]; 610 static const uint8_t table15_88_emit_[1]; 611 static const uint8_t table15_89_emit_[1]; 612 static const uint8_t table15_90_emit_[1]; 613 static const uint8_t table15_91_emit_[1]; 614 static const uint8_t table15_92_emit_[1]; 615 static const uint8_t table15_93_emit_[1]; 616 static const uint8_t table15_94_emit_[1]; 617 static const uint8_t table15_95_emit_[1]; 618 static const uint8_t table15_96_emit_[1]; 619 static const uint8_t table15_97_emit_[1]; 620 static const uint8_t table15_98_emit_[1]; 621 static const uint8_t table15_99_emit_[1]; 622 static const uint8_t table15_100_emit_[1]; 623 static const uint8_t table15_101_emit_[1]; 624 static const uint8_t table15_102_emit_[1]; 625 static const uint8_t table15_103_emit_[1]; 626 static const uint8_t table15_104_emit_[1]; 627 static const uint8_t table15_105_emit_[1]; 628 static const uint8_t table15_106_emit_[1]; 629 static const uint8_t table15_107_emit_[1]; 630 static const uint8_t table15_108_emit_[2]; 631 static const uint16_t table15_108_ops_[256]; 632 static const uint8_t table15_109_emit_[2]; 633 static const uint8_t table15_110_emit_[2]; 634 static const uint8_t table15_111_emit_[2]; 635 static const uint8_t table15_112_emit_[2]; 636 static const uint8_t table15_113_emit_[2]; 637 static const uint8_t table15_114_emit_[2]; 638 static const uint8_t table15_115_emit_[2]; 639 static const uint8_t table15_116_emit_[2]; 640 static const uint8_t table15_117_emit_[2]; 641 static const uint8_t table15_118_emit_[2]; 642 static const uint8_t table15_119_emit_[2]; 643 static const uint8_t table15_120_emit_[2]; 644 static const uint8_t table15_121_emit_[2]; 645 static const uint8_t table15_122_emit_[3]; 646 static const uint16_t table15_122_ops_[256]; 647 static const uint8_t table15_123_emit_[4]; 648 static const uint16_t table15_123_ops_[256]; 649 static const uint8_t table15_124_emit_[4]; 650 static const uint8_t table15_125_emit_[6]; 651 static const uint16_t table15_125_ops_[256]; 652 static const uint16_t table15_126_ops_[256]; 653 static const uint8_t table15_127_emit_[49]; 654 static const uint16_t table15_127_ops_[256]; 655 static const uint8_t* const table15_emit_[128]; 656 static const uint16_t* const table15_ops_[128]; 657 }; 658 template <typename F> 659 class HuffDecoder : public HuffDecoderCommon { 660 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)661 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 662 : sink_(sink), begin_(begin), end_(end) {} Run()663 bool Run() { 664 while (!done_) { 665 if (!RefillTo9()) { 666 Done0(); 667 break; 668 } 669 const auto index = (buffer_ >> (buffer_len_ - 9)) & 0x1ff; 670 const auto op = GetOp1(index); 671 const int consumed = op & 15; 672 buffer_len_ -= consumed; 673 const auto emit_ofs = op >> 7; 674 switch ((op >> 4) & 7) { 675 case 0: { 676 sink_(GetEmit1(index, emit_ofs + 0)); 677 break; 678 } 679 case 1: { 680 DecodeStep0(); 681 break; 682 } 683 case 2: { 684 DecodeStep1(); 685 break; 686 } 687 case 3: { 688 DecodeStep2(); 689 break; 690 } 691 case 4: { 692 DecodeStep3(); 693 break; 694 } 695 } 696 } 697 return ok_; 698 } 699 700 private: RefillTo9()701 bool RefillTo9() { 702 switch (buffer_len_) { 703 case 0: { 704 return Read2to8Bytes(); 705 } 706 case 1: 707 case 2: 708 case 3: 709 case 4: 710 case 5: 711 case 6: 712 case 7: 713 case 8: { 714 return Read1to7Bytes(); 715 } 716 } 717 return true; 718 } Read2to8Bytes()719 bool Read2to8Bytes() { 720 switch (end_ - begin_) { 721 case 0: 722 case 1: { 723 return false; 724 } 725 case 2: { 726 Fill2(); 727 return true; 728 } 729 case 3: { 730 Fill3(); 731 return true; 732 } 733 case 4: { 734 Fill4(); 735 return true; 736 } 737 case 5: { 738 Fill5(); 739 return true; 740 } 741 case 6: { 742 Fill6(); 743 return true; 744 } 745 case 7: { 746 Fill7(); 747 return true; 748 } 749 default: { 750 Fill8(); 751 return true; 752 } 753 } 754 } Fill2()755 void Fill2() { 756 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 757 (static_cast<uint64_t>(begin_[1]) << 0); 758 begin_ += 2; 759 buffer_len_ += 16; 760 } Fill3()761 void Fill3() { 762 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 763 (static_cast<uint64_t>(begin_[1]) << 8) | 764 (static_cast<uint64_t>(begin_[2]) << 0); 765 begin_ += 3; 766 buffer_len_ += 24; 767 } Fill4()768 void Fill4() { 769 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 770 (static_cast<uint64_t>(begin_[1]) << 16) | 771 (static_cast<uint64_t>(begin_[2]) << 8) | 772 (static_cast<uint64_t>(begin_[3]) << 0); 773 begin_ += 4; 774 buffer_len_ += 32; 775 } Fill5()776 void Fill5() { 777 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 778 (static_cast<uint64_t>(begin_[1]) << 24) | 779 (static_cast<uint64_t>(begin_[2]) << 16) | 780 (static_cast<uint64_t>(begin_[3]) << 8) | 781 (static_cast<uint64_t>(begin_[4]) << 0); 782 begin_ += 5; 783 buffer_len_ += 40; 784 } Fill6()785 void Fill6() { 786 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 787 (static_cast<uint64_t>(begin_[1]) << 32) | 788 (static_cast<uint64_t>(begin_[2]) << 24) | 789 (static_cast<uint64_t>(begin_[3]) << 16) | 790 (static_cast<uint64_t>(begin_[4]) << 8) | 791 (static_cast<uint64_t>(begin_[5]) << 0); 792 begin_ += 6; 793 buffer_len_ += 48; 794 } Fill7()795 void Fill7() { 796 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 797 (static_cast<uint64_t>(begin_[1]) << 40) | 798 (static_cast<uint64_t>(begin_[2]) << 32) | 799 (static_cast<uint64_t>(begin_[3]) << 24) | 800 (static_cast<uint64_t>(begin_[4]) << 16) | 801 (static_cast<uint64_t>(begin_[5]) << 8) | 802 (static_cast<uint64_t>(begin_[6]) << 0); 803 begin_ += 7; 804 buffer_len_ += 56; 805 } Fill8()806 void Fill8() { 807 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 808 (static_cast<uint64_t>(begin_[1]) << 48) | 809 (static_cast<uint64_t>(begin_[2]) << 40) | 810 (static_cast<uint64_t>(begin_[3]) << 32) | 811 (static_cast<uint64_t>(begin_[4]) << 24) | 812 (static_cast<uint64_t>(begin_[5]) << 16) | 813 (static_cast<uint64_t>(begin_[6]) << 8) | 814 (static_cast<uint64_t>(begin_[7]) << 0); 815 begin_ += 8; 816 buffer_len_ += 64; 817 } Read1to7Bytes()818 bool Read1to7Bytes() { 819 switch (end_ - begin_) { 820 case 0: { 821 return false; 822 } 823 case 1: { 824 Fill1(); 825 return true; 826 } 827 case 2: { 828 Fill2(); 829 return true; 830 } 831 case 3: { 832 Fill3(); 833 return true; 834 } 835 case 4: { 836 Fill4(); 837 return true; 838 } 839 case 5: { 840 Fill5(); 841 return true; 842 } 843 case 6: { 844 Fill6(); 845 return true; 846 } 847 default: { 848 Fill7(); 849 return true; 850 } 851 } 852 } Fill1()853 void Fill1() { 854 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 855 begin_ += 1; 856 buffer_len_ += 8; 857 } Done0()858 void Done0() { 859 done_ = true; 860 switch (end_ - begin_) { 861 case 1: { 862 Fill1(); 863 break; 864 } 865 } 866 switch (buffer_len_) { 867 case 1: 868 case 2: 869 case 3: 870 case 4: { 871 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 872 return; 873 } 874 case 5: { 875 const auto index = buffer_ & 31; 876 const auto op = GetOp2(index); 877 switch (op & 3) { 878 case 0: { 879 sink_(GetEmit2(index, (op >> 2) + 0)); 880 break; 881 } 882 case 1: { 883 ok_ = false; 884 break; 885 } 886 } 887 return; 888 } 889 case 6: { 890 const auto index = buffer_ & 63; 891 const auto op = GetOp3(index); 892 switch (op & 3) { 893 case 0: { 894 ok_ = false; 895 break; 896 } 897 case 1: { 898 sink_(GetEmit3(index, (op >> 2) + 0)); 899 break; 900 } 901 } 902 return; 903 } 904 case 7: { 905 const auto index = buffer_ & 127; 906 const auto op = GetOp4(index); 907 switch (op & 3) { 908 case 0: { 909 ok_ = false; 910 break; 911 } 912 case 1: { 913 sink_(GetEmit4(index, (op >> 2) + 0)); 914 break; 915 } 916 } 917 return; 918 } 919 case 8: { 920 const auto index = buffer_ & 255; 921 const auto op = GetOp5(index); 922 switch (op & 3) { 923 case 0: { 924 ok_ = false; 925 break; 926 } 927 case 1: { 928 sink_(GetEmit5(index, (op >> 2) + 0)); 929 break; 930 } 931 } 932 return; 933 } 934 case 0: { 935 return; 936 } 937 } 938 } DecodeStep0()939 void DecodeStep0() { 940 if (!RefillTo1()) { 941 Done1(); 942 return; 943 } 944 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 945 const auto op = GetOp6(index); 946 const int consumed = op & 1; 947 buffer_len_ -= consumed; 948 const auto emit_ofs = op >> 1; 949 sink_(GetEmit6(index, emit_ofs + 0)); 950 } RefillTo1()951 bool RefillTo1() { 952 switch (buffer_len_) { 953 case 0: { 954 return Read1to8Bytes(); 955 } 956 } 957 return true; 958 } Read1to8Bytes()959 bool Read1to8Bytes() { 960 switch (end_ - begin_) { 961 case 0: { 962 return false; 963 } 964 case 1: { 965 Fill1(); 966 return true; 967 } 968 case 2: { 969 Fill2(); 970 return true; 971 } 972 case 3: { 973 Fill3(); 974 return true; 975 } 976 case 4: { 977 Fill4(); 978 return true; 979 } 980 case 5: { 981 Fill5(); 982 return true; 983 } 984 case 6: { 985 Fill6(); 986 return true; 987 } 988 case 7: { 989 Fill7(); 990 return true; 991 } 992 default: { 993 Fill8(); 994 return true; 995 } 996 } 997 } Done1()998 void Done1() { 999 done_ = true; 1000 ok_ = false; 1001 } DecodeStep1()1002 void DecodeStep1() { 1003 if (!RefillTo1()) { 1004 Done2(); 1005 return; 1006 } 1007 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1008 const auto op = GetOp7(index); 1009 const int consumed = op & 1; 1010 buffer_len_ -= consumed; 1011 const auto emit_ofs = op >> 1; 1012 sink_(GetEmit7(index, emit_ofs + 0)); 1013 } Done2()1014 void Done2() { 1015 done_ = true; 1016 ok_ = false; 1017 } DecodeStep2()1018 void DecodeStep2() { 1019 if (!RefillTo2()) { 1020 Done3(); 1021 return; 1022 } 1023 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1024 const auto op = GetOp8(index); 1025 const int consumed = op & 3; 1026 buffer_len_ -= consumed; 1027 const auto emit_ofs = op >> 2; 1028 sink_(GetEmit8(index, emit_ofs + 0)); 1029 } RefillTo2()1030 bool RefillTo2() { 1031 switch (buffer_len_) { 1032 case 0: { 1033 return Read1to8Bytes(); 1034 } 1035 case 1: { 1036 return Read1to7Bytes(); 1037 } 1038 } 1039 return true; 1040 } Done3()1041 void Done3() { 1042 done_ = true; 1043 switch (buffer_len_) { 1044 case 1: { 1045 const auto index = buffer_ & 1; 1046 const auto op = GetOp9(index); 1047 switch (op & 1) { 1048 case 0: { 1049 sink_(GetEmit9(index, (op >> 1) + 0)); 1050 break; 1051 } 1052 case 1: { 1053 ok_ = false; 1054 break; 1055 } 1056 } 1057 return; 1058 } 1059 case 0: { 1060 ok_ = false; 1061 return; 1062 } 1063 } 1064 } DecodeStep3()1065 void DecodeStep3() { 1066 if (!RefillTo6()) { 1067 Done4(); 1068 return; 1069 } 1070 const auto index = (buffer_ >> (buffer_len_ - 6)) & 0x3f; 1071 const auto op = GetOp10(index); 1072 const int consumed = op & 7; 1073 buffer_len_ -= consumed; 1074 const auto emit_ofs = op >> 4; 1075 switch ((op >> 3) & 1) { 1076 case 0: { 1077 sink_(GetEmit10(index, emit_ofs + 0)); 1078 break; 1079 } 1080 case 1: { 1081 DecodeStep4(); 1082 break; 1083 } 1084 } 1085 } RefillTo6()1086 bool RefillTo6() { 1087 switch (buffer_len_) { 1088 case 0: { 1089 return Read1to8Bytes(); 1090 } 1091 case 1: 1092 case 2: 1093 case 3: 1094 case 4: 1095 case 5: { 1096 return Read1to7Bytes(); 1097 } 1098 } 1099 return true; 1100 } Done4()1101 void Done4() { 1102 done_ = true; 1103 switch (buffer_len_) { 1104 case 1: { 1105 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1106 return; 1107 } 1108 case 2: { 1109 const auto index = buffer_ & 3; 1110 const auto op = GetOp11(index); 1111 switch (op & 3) { 1112 case 0: { 1113 sink_(GetEmit11(index, (op >> 2) + 0)); 1114 break; 1115 } 1116 case 1: { 1117 ok_ = false; 1118 break; 1119 } 1120 } 1121 return; 1122 } 1123 case 3: { 1124 const auto index = buffer_ & 7; 1125 const auto op = GetOp12(index); 1126 switch (op & 3) { 1127 case 0: { 1128 ok_ = false; 1129 break; 1130 } 1131 case 1: { 1132 sink_(GetEmit12(index, (op >> 2) + 0)); 1133 break; 1134 } 1135 } 1136 return; 1137 } 1138 case 4: { 1139 const auto index = buffer_ & 15; 1140 const auto op = GetOp13(index); 1141 switch (op & 3) { 1142 case 0: { 1143 ok_ = false; 1144 break; 1145 } 1146 case 1: { 1147 sink_(GetEmit13(index, (op >> 2) + 0)); 1148 break; 1149 } 1150 } 1151 return; 1152 } 1153 case 5: { 1154 const auto index = buffer_ & 31; 1155 const auto op = GetOp14(index); 1156 switch (op & 3) { 1157 case 0: { 1158 ok_ = false; 1159 break; 1160 } 1161 case 1: { 1162 sink_(GetEmit14(index, (op >> 2) + 0)); 1163 break; 1164 } 1165 } 1166 return; 1167 } 1168 case 0: { 1169 return; 1170 } 1171 } 1172 } DecodeStep4()1173 void DecodeStep4() { 1174 if (!RefillTo15()) { 1175 Done5(); 1176 return; 1177 } 1178 const auto index = (buffer_ >> (buffer_len_ - 15)) & 0x7fff; 1179 const auto op = GetOp15(index); 1180 const int consumed = op & 15; 1181 buffer_len_ -= consumed; 1182 const auto emit_ofs = op >> 5; 1183 switch ((op >> 4) & 1) { 1184 case 0: { 1185 sink_(GetEmit15(index, emit_ofs + 0)); 1186 break; 1187 } 1188 case 1: { 1189 begin_ = end_; 1190 buffer_len_ = 0; 1191 break; 1192 } 1193 } 1194 } RefillTo15()1195 bool RefillTo15() { 1196 switch (buffer_len_) { 1197 case 0: { 1198 return Read2to8Bytes(); 1199 } 1200 case 1: 1201 case 2: 1202 case 3: 1203 case 4: 1204 case 5: 1205 case 6: { 1206 return Read2to7Bytes(); 1207 } 1208 case 7: 1209 case 8: { 1210 return Read1to7Bytes(); 1211 } 1212 case 9: 1213 case 10: 1214 case 11: 1215 case 12: 1216 case 13: 1217 case 14: { 1218 return Read1to6Bytes(); 1219 } 1220 } 1221 return true; 1222 } Read2to7Bytes()1223 bool Read2to7Bytes() { 1224 switch (end_ - begin_) { 1225 case 0: 1226 case 1: { 1227 return false; 1228 } 1229 case 2: { 1230 Fill2(); 1231 return true; 1232 } 1233 case 3: { 1234 Fill3(); 1235 return true; 1236 } 1237 case 4: { 1238 Fill4(); 1239 return true; 1240 } 1241 case 5: { 1242 Fill5(); 1243 return true; 1244 } 1245 case 6: { 1246 Fill6(); 1247 return true; 1248 } 1249 default: { 1250 Fill7(); 1251 return true; 1252 } 1253 } 1254 } Read1to6Bytes()1255 bool Read1to6Bytes() { 1256 switch (end_ - begin_) { 1257 case 0: { 1258 return false; 1259 } 1260 case 1: { 1261 Fill1(); 1262 return true; 1263 } 1264 case 2: { 1265 Fill2(); 1266 return true; 1267 } 1268 case 3: { 1269 Fill3(); 1270 return true; 1271 } 1272 case 4: { 1273 Fill4(); 1274 return true; 1275 } 1276 case 5: { 1277 Fill5(); 1278 return true; 1279 } 1280 default: { 1281 Fill6(); 1282 return true; 1283 } 1284 } 1285 } Done5()1286 void Done5() { 1287 done_ = true; 1288 switch (end_ - begin_) { 1289 case 1: { 1290 Fill1(); 1291 break; 1292 } 1293 } 1294 switch (buffer_len_) { 1295 case 1: 1296 case 2: 1297 case 3: { 1298 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1299 return; 1300 } 1301 case 4: { 1302 const auto index = buffer_ & 15; 1303 const auto op = GetOp16(index); 1304 switch (op & 3) { 1305 case 0: { 1306 sink_(GetEmit16(index, (op >> 2) + 0)); 1307 break; 1308 } 1309 case 1: { 1310 ok_ = false; 1311 break; 1312 } 1313 } 1314 return; 1315 } 1316 case 5: { 1317 const auto index = buffer_ & 31; 1318 const auto op = GetOp17(index); 1319 switch (op & 3) { 1320 case 0: { 1321 ok_ = false; 1322 break; 1323 } 1324 case 1: { 1325 sink_(GetEmit17(index, (op >> 2) + 0)); 1326 break; 1327 } 1328 } 1329 return; 1330 } 1331 case 6: { 1332 const auto index = buffer_ & 63; 1333 const auto op = GetOp18(index); 1334 switch (op & 3) { 1335 case 0: { 1336 ok_ = false; 1337 break; 1338 } 1339 case 1: { 1340 sink_(GetEmit18(index, (op >> 2) + 0)); 1341 break; 1342 } 1343 } 1344 return; 1345 } 1346 case 7: { 1347 const auto index = buffer_ & 127; 1348 const auto op = GetOp19(index); 1349 switch (op & 3) { 1350 case 0: { 1351 ok_ = false; 1352 break; 1353 } 1354 case 1: { 1355 sink_(GetEmit19(index, (op >> 2) + 0)); 1356 break; 1357 } 1358 } 1359 return; 1360 } 1361 case 8: { 1362 const auto index = buffer_ & 255; 1363 const auto op = GetOp20(index); 1364 switch (op & 3) { 1365 case 0: { 1366 ok_ = false; 1367 break; 1368 } 1369 case 1: { 1370 sink_(GetEmit20(index, (op >> 2) + 0)); 1371 break; 1372 } 1373 } 1374 return; 1375 } 1376 case 9: { 1377 const auto index = buffer_ & 511; 1378 const auto op = GetOp21(index); 1379 switch (op & 3) { 1380 case 0: { 1381 sink_(GetEmit21(index, (op >> 2) + 0)); 1382 sink_(GetEmit21(index, (op >> 2) + 1)); 1383 break; 1384 } 1385 case 1: { 1386 ok_ = false; 1387 break; 1388 } 1389 case 2: { 1390 sink_(GetEmit21(index, (op >> 2) + 0)); 1391 break; 1392 } 1393 } 1394 return; 1395 } 1396 case 10: { 1397 const auto index = buffer_ & 1023; 1398 const auto op = GetOp22(index); 1399 switch (op & 3) { 1400 case 0: { 1401 ok_ = false; 1402 break; 1403 } 1404 case 1: { 1405 sink_(GetEmit22(index, (op >> 2) + 0)); 1406 sink_(GetEmit22(index, (op >> 2) + 1)); 1407 break; 1408 } 1409 case 2: { 1410 sink_(GetEmit22(index, (op >> 2) + 0)); 1411 break; 1412 } 1413 } 1414 return; 1415 } 1416 case 11: { 1417 const auto index = buffer_ & 2047; 1418 const auto op = GetOp23(index); 1419 switch (op & 3) { 1420 case 0: { 1421 ok_ = false; 1422 break; 1423 } 1424 case 1: { 1425 sink_(GetEmit23(index, (op >> 2) + 0)); 1426 sink_(GetEmit23(index, (op >> 2) + 1)); 1427 break; 1428 } 1429 case 2: { 1430 sink_(GetEmit23(index, (op >> 2) + 0)); 1431 break; 1432 } 1433 } 1434 return; 1435 } 1436 case 12: { 1437 const auto index = buffer_ & 4095; 1438 const auto op = GetOp24(index); 1439 switch (op & 3) { 1440 case 0: { 1441 ok_ = false; 1442 break; 1443 } 1444 case 1: { 1445 sink_(GetEmit24(index, (op >> 2) + 0)); 1446 sink_(GetEmit24(index, (op >> 2) + 1)); 1447 break; 1448 } 1449 case 2: { 1450 sink_(GetEmit24(index, (op >> 2) + 0)); 1451 break; 1452 } 1453 } 1454 return; 1455 } 1456 case 13: { 1457 const auto index = buffer_ & 8191; 1458 const auto op = GetOp25(index); 1459 switch (op & 3) { 1460 case 0: { 1461 ok_ = false; 1462 break; 1463 } 1464 case 1: { 1465 sink_(GetEmit25(index, (op >> 2) + 0)); 1466 sink_(GetEmit25(index, (op >> 2) + 1)); 1467 break; 1468 } 1469 case 2: { 1470 sink_(GetEmit25(index, (op >> 2) + 0)); 1471 break; 1472 } 1473 } 1474 return; 1475 } 1476 case 14: { 1477 const auto index = buffer_ & 16383; 1478 const auto op = GetOp26(index); 1479 switch (op & 7) { 1480 case 0: { 1481 sink_(GetEmit26(index, (op >> 3) + 0)); 1482 sink_(GetEmit26(index, (op >> 3) + 1)); 1483 sink_(GetEmit26(index, (op >> 3) + 2)); 1484 break; 1485 } 1486 case 1: { 1487 ok_ = false; 1488 break; 1489 } 1490 case 2: { 1491 sink_(GetEmit26(index, (op >> 3) + 0)); 1492 sink_(GetEmit26(index, (op >> 3) + 1)); 1493 break; 1494 } 1495 case 3: { 1496 sink_(GetEmit26(index, (op >> 3) + 0)); 1497 break; 1498 } 1499 } 1500 return; 1501 } 1502 case 0: { 1503 return; 1504 } 1505 } 1506 } 1507 F sink_; 1508 const uint8_t* begin_; 1509 const uint8_t* const end_; 1510 uint64_t buffer_ = 0; 1511 int buffer_len_ = 0; 1512 bool ok_ = true; 1513 bool done_ = false; 1514 }; 1515 } // namespace geometry_9_6_15 1516 } // namespace grpc_core 1517 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_6_15_H 1518