1 // Copyright 2023 gRPC authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // This file is autogenerated: see 16 // tools/codegen/core/gen_huffman_decompressor.cc 17 18 #ifndef GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_7_16_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_7_16_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_7_7_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 } GetOp1(size_t i)36 static inline uint64_t GetOp1(size_t i) { 37 return table1_0_inner_[table1_0_outer_[i]]; 38 } GetEmit1(size_t,size_t emit)39 static inline uint64_t GetEmit1(size_t, size_t emit) { 40 return table1_0_emit_[emit]; 41 } GetOp4(size_t i)42 static inline uint64_t GetOp4(size_t i) { return i ? 3 : 1; } GetEmit4(size_t,size_t emit)43 static inline uint64_t GetEmit4(size_t, size_t emit) { 44 return emit ? 42 : 38; 45 } GetOp5(size_t i)46 static inline uint64_t GetOp5(size_t i) { return i ? 3 : 1; } GetEmit5(size_t,size_t emit)47 static inline uint64_t GetEmit5(size_t, size_t emit) { 48 return emit ? 59 : 44; 49 } GetOp6(size_t i)50 static inline uint64_t GetOp6(size_t i) { return i ? 3 : 1; } GetEmit6(size_t,size_t emit)51 static inline uint64_t GetEmit6(size_t, size_t emit) { 52 return emit ? 90 : 88; 53 } GetOp8(size_t i)54 static inline uint64_t GetOp8(size_t i) { 55 return table8_0_inner_[(i < 6 ? (i) : ((i - 6) + 5))]; 56 } GetEmit8(size_t,size_t emit)57 static inline uint64_t GetEmit8(size_t, size_t emit) { 58 return table8_0_emit_[emit]; 59 } GetOp9(size_t i)60 static inline uint64_t GetOp9(size_t i) { 61 return table9_0_inner_[table9_0_outer_[i]]; 62 } GetEmit9(size_t,size_t emit)63 static inline uint64_t GetEmit9(size_t, size_t emit) { 64 return table9_0_emit_[emit]; 65 } GetOp10(size_t i)66 static inline uint64_t GetOp10(size_t i) { return table10_0_ops_[i]; } GetEmit10(size_t,size_t emit)67 static inline uint64_t GetEmit10(size_t, size_t emit) { 68 return table10_0_emit_[emit]; 69 } GetOp11(size_t i)70 static inline uint64_t GetOp11(size_t i) { return table11_0_ops_[i]; } GetEmit11(size_t,size_t emit)71 static inline uint64_t GetEmit11(size_t, size_t emit) { 72 return table11_0_emit_[emit]; 73 } GetOp7(size_t i)74 static inline uint64_t GetOp7(size_t i) { 75 return table7_ops_[i >> 5][i & 0x1f]; 76 } GetEmit7(size_t i,size_t emit)77 static inline uint64_t GetEmit7(size_t i, size_t emit) { 78 return table7_emit_[i >> 5][emit]; 79 } GetOp12(size_t i)80 static inline uint64_t GetOp12(size_t i) { return i ? 3 : 1; } GetEmit12(size_t,size_t emit)81 static inline uint64_t GetEmit12(size_t, size_t emit) { 82 return emit ? 96 : 60; 83 } GetOp14(size_t i)84 static inline uint64_t GetOp14(size_t i) { return i; } GetEmit14(size_t,size_t emit)85 static inline uint64_t GetEmit14(size_t, size_t emit) { 86 return ((void)emit, 123); 87 } GetOp15(size_t i)88 static inline uint64_t GetOp15(size_t i) { 89 return (i < 2 ? (i) : ((i - 2) ? 2 : 0)); 90 } GetEmit15(size_t,size_t emit)91 static inline uint64_t GetEmit15(size_t, size_t emit) { 92 return ((void)emit, 123); 93 } GetOp16(size_t i)94 static inline uint64_t GetOp16(size_t i) { return table16_0_outer_[i]; } GetEmit16(size_t,size_t emit)95 static inline uint64_t GetEmit16(size_t, size_t emit) { 96 return ((void)emit, 123); 97 } GetOp17(size_t i)98 static inline uint64_t GetOp17(size_t i) { return table17_0_outer_[i]; } GetEmit17(size_t,size_t emit)99 static inline uint64_t GetEmit17(size_t, size_t emit) { 100 return ((void)emit, 123); 101 } GetOp18(size_t i)102 static inline uint64_t GetOp18(size_t i) { return table18_0_ops_[i]; } GetEmit18(size_t,size_t emit)103 static inline uint64_t GetEmit18(size_t, size_t emit) { 104 return (emit < 2 ? (emit ? 92 : 123) : ((emit - 2) ? 208 : 195)); 105 } GetOp19(size_t i)106 static inline uint64_t GetOp19(size_t i) { return table19_0_ops_[i]; } GetEmit19(size_t,size_t emit)107 static inline uint64_t GetEmit19(size_t, size_t emit) { 108 return table19_0_emit_[emit]; 109 } GetOp20(size_t i)110 static inline uint64_t GetOp20(size_t i) { 111 return table20_ops_[i >> 5][i & 0x1f]; 112 } GetEmit20(size_t i,size_t emit)113 static inline uint64_t GetEmit20(size_t i, size_t emit) { 114 return table20_emit_[i >> 5][emit]; 115 } GetOp21(size_t i)116 static inline uint64_t GetOp21(size_t i) { 117 return table21_ops_[i >> 6][i & 0x3f]; 118 } GetEmit21(size_t i,size_t emit)119 static inline uint64_t GetEmit21(size_t i, size_t emit) { 120 return table21_emit_[i >> 6][emit]; 121 } GetOp22(size_t i)122 static inline uint64_t GetOp22(size_t i) { 123 return table22_ops_[i >> 7][i & 0x7f]; 124 } GetEmit22(size_t i,size_t emit)125 static inline uint64_t GetEmit22(size_t i, size_t emit) { 126 return table22_emit_[i >> 7][emit]; 127 } GetOp23(size_t i)128 static inline uint64_t GetOp23(size_t i) { 129 return table23_ops_[i >> 5][i & 0x1f]; 130 } GetEmit23(size_t i,size_t emit)131 static inline uint64_t GetEmit23(size_t i, size_t emit) { 132 return table23_emit_[i >> 5][emit]; 133 } GetOp24(size_t i)134 static inline uint64_t GetOp24(size_t i) { 135 return table24_ops_[i >> 6][i & 0x3f]; 136 } GetEmit24(size_t i,size_t emit)137 static inline uint64_t GetEmit24(size_t i, size_t emit) { 138 return table24_emit_[i >> 6][emit]; 139 } GetOp25(size_t i)140 static inline uint64_t GetOp25(size_t i) { 141 return table25_ops_[i >> 6][i & 0x3f]; 142 } GetEmit25(size_t i,size_t emit)143 static inline uint64_t GetEmit25(size_t i, size_t emit) { 144 return table25_emit_[i >> 6][emit]; 145 } GetOp26(size_t i)146 static inline uint64_t GetOp26(size_t i) { 147 return table26_ops_[i >> 7][i & 0x7f]; 148 } GetEmit26(size_t i,size_t emit)149 static inline uint64_t GetEmit26(size_t i, size_t emit) { 150 return table26_emit_[i >> 7][emit]; 151 } GetOp27(size_t i)152 static inline uint64_t GetOp27(size_t i) { 153 return table27_inner_[i >> 7][table27_outer_[i >> 7][i & 0x7f]]; 154 } GetEmit27(size_t i,size_t emit)155 static inline uint64_t GetEmit27(size_t i, size_t emit) { 156 return table27_emit_[i >> 7][emit]; 157 } GetOp28(size_t i)158 static inline uint64_t GetOp28(size_t i) { 159 return table28_inner_[i >> 8][table28_outer_[i >> 8][i & 0xff]]; 160 } GetEmit28(size_t i,size_t emit)161 static inline uint64_t GetEmit28(size_t i, size_t emit) { 162 return table28_emit_[i >> 8][emit]; 163 } GetOp13(size_t i)164 static inline uint64_t GetOp13(size_t i) { 165 return table13_ops_[i >> 9][i & 0x1ff]; 166 } GetEmit13(size_t i,size_t emit)167 static inline uint64_t GetEmit13(size_t i, size_t emit) { 168 return table13_emit_[i >> 9][emit]; 169 } 170 171 private: 172 static const uint8_t table2_0_emit_[10]; 173 static const uint8_t table2_0_ops_[32]; 174 static const uint8_t table3_0_emit_[36]; 175 static const uint8_t table3_0_ops_[64]; 176 static const uint8_t table1_0_emit_[68]; 177 static const uint16_t table1_0_inner_[72]; 178 static const uint8_t table1_0_outer_[128]; 179 static const uint8_t table8_0_emit_[5]; 180 static const uint8_t table8_0_inner_[7]; 181 static const uint8_t table9_0_emit_[8]; 182 static const uint8_t table9_0_inner_[10]; 183 static const uint8_t table9_0_outer_[16]; 184 static const uint8_t table10_0_emit_[10]; 185 static const uint8_t table10_0_ops_[32]; 186 static const uint8_t table11_0_emit_[16]; 187 static const uint8_t table11_0_ops_[64]; 188 static const uint8_t table7_0_emit_[2]; 189 static const uint16_t table7_0_ops_[32]; 190 static const uint8_t table7_1_emit_[2]; 191 static const uint8_t table7_2_emit_[3]; 192 static const uint16_t table7_2_ops_[32]; 193 static const uint8_t table7_3_emit_[11]; 194 static const uint16_t table7_3_ops_[32]; 195 static const uint8_t* const table7_emit_[4]; 196 static const uint16_t* const table7_ops_[4]; 197 static const uint8_t table16_0_outer_[8]; 198 static const uint8_t table17_0_outer_[16]; 199 static const uint8_t table18_0_ops_[32]; 200 static const uint8_t table19_0_emit_[31]; 201 static const uint8_t table19_0_ops_[64]; 202 static const uint8_t table20_0_emit_[44]; 203 static const uint8_t table20_0_ops_[32]; 204 static const uint8_t table20_1_emit_[28]; 205 static const uint8_t table20_1_ops_[32]; 206 static const uint8_t table20_2_emit_[15]; 207 static const uint8_t table20_2_ops_[32]; 208 static const uint8_t table20_3_emit_[9]; 209 static const uint8_t table20_3_ops_[32]; 210 static const uint8_t* const table20_emit_[4]; 211 static const uint8_t* const table20_ops_[4]; 212 static const uint16_t table21_0_ops_[64]; 213 static const uint8_t table21_1_emit_[92]; 214 static const uint16_t table21_1_ops_[64]; 215 static const uint16_t table21_2_ops_[64]; 216 static const uint8_t table21_3_emit_[35]; 217 static const uint16_t table21_3_ops_[64]; 218 static const uint8_t* const table21_emit_[4]; 219 static const uint16_t* const table21_ops_[4]; 220 static const uint16_t table22_0_ops_[128]; 221 static const uint8_t table22_1_emit_[104]; 222 static const uint16_t table22_1_ops_[128]; 223 static const uint16_t table22_2_ops_[128]; 224 static const uint8_t table22_3_emit_[64]; 225 static const uint16_t table22_3_ops_[128]; 226 static const uint8_t* const table22_emit_[4]; 227 static const uint16_t* const table22_ops_[4]; 228 static const uint8_t table23_0_emit_[4]; 229 static const uint8_t table23_0_ops_[32]; 230 static const uint8_t table23_1_emit_[4]; 231 static const uint8_t table23_2_emit_[4]; 232 static const uint8_t table23_3_emit_[4]; 233 static const uint8_t table23_4_emit_[4]; 234 static const uint8_t table23_5_emit_[8]; 235 static const uint8_t table23_5_ops_[32]; 236 static const uint8_t table23_6_emit_[8]; 237 static const uint8_t table23_7_emit_[8]; 238 static const uint8_t table23_8_emit_[8]; 239 static const uint8_t table23_9_emit_[8]; 240 static const uint8_t table23_10_emit_[8]; 241 static const uint8_t table23_11_emit_[12]; 242 static const uint8_t table23_11_ops_[32]; 243 static const uint8_t table23_12_emit_[16]; 244 static const uint8_t table23_12_ops_[32]; 245 static const uint8_t table23_13_emit_[16]; 246 static const uint8_t table23_14_emit_[16]; 247 static const uint8_t table23_15_emit_[20]; 248 static const uint8_t table23_15_ops_[32]; 249 static const uint8_t table23_16_emit_[20]; 250 static const uint8_t table23_16_ops_[32]; 251 static const uint8_t table23_17_emit_[20]; 252 static const uint8_t table23_18_emit_[20]; 253 static const uint8_t table23_19_emit_[2]; 254 static const uint8_t table23_19_ops_[32]; 255 static const uint8_t table23_20_emit_[2]; 256 static const uint8_t table23_21_emit_[2]; 257 static const uint8_t table23_22_emit_[2]; 258 static const uint8_t table23_23_emit_[4]; 259 static const uint8_t table23_23_ops_[32]; 260 static const uint8_t table23_24_emit_[4]; 261 static const uint8_t table23_25_emit_[4]; 262 static const uint8_t table23_26_emit_[7]; 263 static const uint8_t table23_26_ops_[32]; 264 static const uint8_t table23_27_emit_[8]; 265 static const uint8_t table23_27_ops_[32]; 266 static const uint8_t table23_28_emit_[8]; 267 static const uint8_t table23_29_emit_[12]; 268 static const uint8_t table23_29_ops_[32]; 269 static const uint8_t table23_30_emit_[16]; 270 static const uint8_t table23_30_ops_[32]; 271 static const uint8_t table23_31_emit_[17]; 272 static const uint8_t table23_31_ops_[32]; 273 static const uint8_t* const table23_emit_[32]; 274 static const uint8_t* const table23_ops_[32]; 275 static const uint8_t table24_0_emit_[60]; 276 static const uint16_t table24_0_ops_[64]; 277 static const uint8_t table24_1_emit_[60]; 278 static const uint8_t table24_2_emit_[60]; 279 static const uint8_t table24_3_emit_[60]; 280 static const uint8_t table24_4_emit_[60]; 281 static const uint16_t table24_5_ops_[64]; 282 static const uint16_t table24_11_ops_[64]; 283 static const uint16_t table24_12_ops_[64]; 284 static const uint8_t table24_15_emit_[30]; 285 static const uint16_t table24_15_ops_[64]; 286 static const uint8_t table24_16_emit_[72]; 287 static const uint16_t table24_16_ops_[64]; 288 static const uint8_t table24_17_emit_[72]; 289 static const uint8_t table24_18_emit_[72]; 290 static const uint8_t table24_19_emit_[40]; 291 static const uint16_t table24_19_ops_[64]; 292 static const uint8_t table24_20_emit_[40]; 293 static const uint8_t table24_21_emit_[40]; 294 static const uint8_t table24_22_emit_[40]; 295 static const uint16_t table24_23_ops_[64]; 296 static const uint16_t table24_26_ops_[64]; 297 static const uint16_t table24_27_ops_[64]; 298 static const uint16_t table24_29_ops_[64]; 299 static const uint16_t table24_30_ops_[64]; 300 static const uint8_t table24_31_emit_[21]; 301 static const uint16_t table24_31_ops_[64]; 302 static const uint8_t* const table24_emit_[32]; 303 static const uint16_t* const table24_ops_[32]; 304 static const uint8_t table25_0_emit_[108]; 305 static const uint16_t table25_0_ops_[64]; 306 static const uint8_t table25_1_emit_[108]; 307 static const uint8_t table25_2_emit_[108]; 308 static const uint8_t table25_3_emit_[108]; 309 static const uint8_t table25_4_emit_[108]; 310 static const uint8_t table25_5_emit_[108]; 311 static const uint8_t table25_6_emit_[108]; 312 static const uint8_t table25_7_emit_[108]; 313 static const uint8_t table25_8_emit_[108]; 314 static const uint8_t table25_9_emit_[108]; 315 static const uint8_t table25_10_emit_[60]; 316 static const uint16_t table25_10_ops_[64]; 317 static const uint8_t table25_11_emit_[60]; 318 static const uint8_t table25_12_emit_[60]; 319 static const uint8_t table25_13_emit_[60]; 320 static const uint8_t table25_14_emit_[60]; 321 static const uint8_t table25_15_emit_[60]; 322 static const uint8_t table25_16_emit_[60]; 323 static const uint8_t table25_17_emit_[60]; 324 static const uint8_t table25_18_emit_[60]; 325 static const uint8_t table25_19_emit_[60]; 326 static const uint8_t table25_20_emit_[60]; 327 static const uint8_t table25_21_emit_[60]; 328 static const uint8_t table25_22_emit_[60]; 329 static const uint8_t table25_23_emit_[8]; 330 static const uint16_t table25_23_ops_[64]; 331 static const uint8_t table25_24_emit_[8]; 332 static const uint8_t table25_25_emit_[8]; 333 static const uint8_t table25_26_emit_[8]; 334 static const uint8_t table25_27_emit_[8]; 335 static const uint8_t table25_28_emit_[8]; 336 static const uint8_t table25_29_emit_[8]; 337 static const uint8_t table25_30_emit_[8]; 338 static const uint8_t table25_31_emit_[28]; 339 static const uint16_t table25_31_ops_[64]; 340 static const uint8_t table25_32_emit_[44]; 341 static const uint16_t table25_32_ops_[64]; 342 static const uint8_t table25_33_emit_[92]; 343 static const uint16_t table25_33_ops_[64]; 344 static const uint8_t table25_34_emit_[44]; 345 static const uint8_t table25_35_emit_[92]; 346 static const uint8_t table25_36_emit_[44]; 347 static const uint8_t table25_37_emit_[92]; 348 static const uint8_t table25_38_emit_[72]; 349 static const uint16_t table25_38_ops_[64]; 350 static const uint8_t table25_39_emit_[72]; 351 static const uint8_t table25_40_emit_[72]; 352 static const uint8_t table25_41_emit_[72]; 353 static const uint8_t table25_42_emit_[72]; 354 static const uint8_t table25_43_emit_[72]; 355 static const uint8_t table25_44_emit_[72]; 356 static const uint8_t table25_45_emit_[72]; 357 static const uint8_t table25_46_emit_[40]; 358 static const uint16_t table25_46_ops_[64]; 359 static const uint8_t table25_47_emit_[40]; 360 static const uint8_t table25_48_emit_[40]; 361 static const uint8_t table25_49_emit_[40]; 362 static const uint8_t table25_50_emit_[40]; 363 static const uint8_t table25_51_emit_[40]; 364 static const uint8_t table25_52_emit_[22]; 365 static const uint16_t table25_52_ops_[64]; 366 static const uint8_t table25_53_emit_[4]; 367 static const uint16_t table25_53_ops_[64]; 368 static const uint8_t table25_54_emit_[4]; 369 static const uint8_t table25_55_emit_[4]; 370 static const uint8_t table25_56_emit_[4]; 371 static const uint8_t table25_57_emit_[4]; 372 static const uint8_t table25_58_emit_[4]; 373 static const uint8_t table25_59_emit_[8]; 374 static const uint16_t table25_59_ops_[64]; 375 static const uint8_t table25_60_emit_[8]; 376 static const uint8_t table25_61_emit_[8]; 377 static const uint8_t table25_62_emit_[11]; 378 static const uint16_t table25_62_ops_[64]; 379 static const uint8_t table25_63_emit_[25]; 380 static const uint16_t table25_63_ops_[64]; 381 static const uint8_t* const table25_emit_[64]; 382 static const uint16_t* const table25_ops_[64]; 383 static const uint8_t table26_0_emit_[204]; 384 static const uint16_t table26_0_ops_[128]; 385 static const uint8_t table26_1_emit_[204]; 386 static const uint8_t table26_2_emit_[204]; 387 static const uint8_t table26_3_emit_[204]; 388 static const uint8_t table26_4_emit_[204]; 389 static const uint8_t table26_5_emit_[204]; 390 static const uint8_t table26_6_emit_[204]; 391 static const uint8_t table26_7_emit_[204]; 392 static const uint8_t table26_8_emit_[204]; 393 static const uint8_t table26_9_emit_[204]; 394 static const uint8_t table26_10_emit_[216]; 395 static const uint16_t table26_10_ops_[128]; 396 static const uint8_t table26_11_emit_[216]; 397 static const uint8_t table26_12_emit_[216]; 398 static const uint8_t table26_13_emit_[216]; 399 static const uint8_t table26_14_emit_[216]; 400 static const uint8_t table26_15_emit_[216]; 401 static const uint8_t table26_16_emit_[216]; 402 static const uint8_t table26_17_emit_[216]; 403 static const uint8_t table26_18_emit_[216]; 404 static const uint8_t table26_19_emit_[216]; 405 static const uint8_t table26_20_emit_[216]; 406 static const uint8_t table26_21_emit_[216]; 407 static const uint8_t table26_22_emit_[216]; 408 static const uint8_t table26_23_emit_[120]; 409 static const uint16_t table26_23_ops_[128]; 410 static const uint8_t table26_24_emit_[120]; 411 static const uint8_t table26_25_emit_[120]; 412 static const uint8_t table26_26_emit_[120]; 413 static const uint8_t table26_27_emit_[120]; 414 static const uint8_t table26_28_emit_[120]; 415 static const uint8_t table26_29_emit_[120]; 416 static const uint8_t table26_30_emit_[120]; 417 static const uint8_t table26_31_emit_[32]; 418 static const uint16_t table26_31_ops_[128]; 419 static const uint16_t table26_32_ops_[128]; 420 static const uint8_t table26_33_emit_[104]; 421 static const uint16_t table26_33_ops_[128]; 422 static const uint8_t table26_35_emit_[104]; 423 static const uint8_t table26_37_emit_[104]; 424 static const uint8_t table26_38_emit_[136]; 425 static const uint16_t table26_38_ops_[128]; 426 static const uint8_t table26_39_emit_[136]; 427 static const uint8_t table26_40_emit_[136]; 428 static const uint8_t table26_41_emit_[136]; 429 static const uint8_t table26_42_emit_[136]; 430 static const uint8_t table26_43_emit_[136]; 431 static const uint8_t table26_44_emit_[136]; 432 static const uint8_t table26_45_emit_[136]; 433 static const uint8_t table26_46_emit_[144]; 434 static const uint16_t table26_46_ops_[128]; 435 static const uint8_t table26_47_emit_[144]; 436 static const uint8_t table26_48_emit_[144]; 437 static const uint8_t table26_49_emit_[144]; 438 static const uint8_t table26_50_emit_[144]; 439 static const uint8_t table26_51_emit_[144]; 440 static const uint8_t table26_52_emit_[112]; 441 static const uint16_t table26_52_ops_[128]; 442 static const uint8_t table26_53_emit_[80]; 443 static const uint16_t table26_53_ops_[128]; 444 static const uint8_t table26_54_emit_[80]; 445 static const uint8_t table26_55_emit_[80]; 446 static const uint8_t table26_56_emit_[80]; 447 static const uint8_t table26_57_emit_[80]; 448 static const uint8_t table26_58_emit_[80]; 449 static const uint16_t table26_59_ops_[128]; 450 static const uint16_t table26_62_ops_[128]; 451 static const uint8_t table26_63_emit_[44]; 452 static const uint16_t table26_63_ops_[128]; 453 static const uint8_t* const table26_emit_[64]; 454 static const uint16_t* const table26_ops_[64]; 455 static const uint8_t table27_0_emit_[66]; 456 static const uint16_t table27_0_inner_[23]; 457 static const uint8_t table27_0_outer_[128]; 458 static const uint8_t table27_1_emit_[156]; 459 static const uint16_t table27_1_inner_[54]; 460 static const uint8_t table27_1_outer_[128]; 461 static const uint8_t table27_2_emit_[66]; 462 static const uint8_t table27_3_emit_[156]; 463 static const uint8_t table27_4_emit_[66]; 464 static const uint8_t table27_5_emit_[156]; 465 static const uint8_t table27_6_emit_[66]; 466 static const uint8_t table27_7_emit_[156]; 467 static const uint8_t table27_8_emit_[66]; 468 static const uint8_t table27_9_emit_[156]; 469 static const uint8_t table27_10_emit_[66]; 470 static const uint8_t table27_11_emit_[156]; 471 static const uint8_t table27_12_emit_[66]; 472 static const uint8_t table27_13_emit_[156]; 473 static const uint8_t table27_14_emit_[66]; 474 static const uint8_t table27_15_emit_[156]; 475 static const uint8_t table27_16_emit_[66]; 476 static const uint8_t table27_17_emit_[156]; 477 static const uint8_t table27_18_emit_[66]; 478 static const uint8_t table27_19_emit_[156]; 479 static const uint8_t table27_20_emit_[204]; 480 static const uint16_t table27_20_inner_[70]; 481 static const uint8_t table27_20_outer_[128]; 482 static const uint8_t table27_21_emit_[204]; 483 static const uint8_t table27_22_emit_[204]; 484 static const uint8_t table27_23_emit_[204]; 485 static const uint8_t table27_24_emit_[204]; 486 static const uint8_t table27_25_emit_[204]; 487 static const uint8_t table27_26_emit_[204]; 488 static const uint8_t table27_27_emit_[204]; 489 static const uint8_t table27_28_emit_[204]; 490 static const uint8_t table27_29_emit_[204]; 491 static const uint8_t table27_30_emit_[204]; 492 static const uint8_t table27_31_emit_[204]; 493 static const uint8_t table27_32_emit_[204]; 494 static const uint8_t table27_33_emit_[204]; 495 static const uint8_t table27_34_emit_[204]; 496 static const uint8_t table27_35_emit_[204]; 497 static const uint8_t table27_36_emit_[204]; 498 static const uint8_t table27_37_emit_[204]; 499 static const uint8_t table27_38_emit_[204]; 500 static const uint8_t table27_39_emit_[204]; 501 static const uint8_t table27_40_emit_[204]; 502 static const uint8_t table27_41_emit_[204]; 503 static const uint8_t table27_42_emit_[204]; 504 static const uint8_t table27_43_emit_[204]; 505 static const uint8_t table27_44_emit_[204]; 506 static const uint8_t table27_45_emit_[204]; 507 static const uint8_t table27_46_emit_[216]; 508 static const uint16_t table27_46_inner_[75]; 509 static const uint8_t table27_46_outer_[128]; 510 static const uint8_t table27_47_emit_[216]; 511 static const uint8_t table27_48_emit_[216]; 512 static const uint8_t table27_49_emit_[216]; 513 static const uint8_t table27_50_emit_[216]; 514 static const uint8_t table27_51_emit_[216]; 515 static const uint8_t table27_52_emit_[216]; 516 static const uint8_t table27_53_emit_[216]; 517 static const uint8_t table27_54_emit_[216]; 518 static const uint8_t table27_55_emit_[216]; 519 static const uint8_t table27_56_emit_[216]; 520 static const uint8_t table27_57_emit_[216]; 521 static const uint8_t table27_58_emit_[216]; 522 static const uint8_t table27_59_emit_[216]; 523 static const uint8_t table27_60_emit_[216]; 524 static const uint8_t table27_61_emit_[216]; 525 static const uint8_t table27_62_emit_[120]; 526 static const uint16_t table27_62_inner_[45]; 527 static const uint8_t table27_62_outer_[128]; 528 static const uint8_t table27_63_emit_[92]; 529 static const uint16_t table27_63_inner_[40]; 530 static const uint8_t table27_63_outer_[128]; 531 static const uint8_t table27_64_emit_[16]; 532 static const uint16_t table27_64_inner_[9]; 533 static const uint8_t table27_64_outer_[128]; 534 static const uint8_t table27_65_emit_[28]; 535 static const uint16_t table27_65_inner_[15]; 536 static const uint8_t table27_65_outer_[128]; 537 static const uint8_t table27_66_emit_[36]; 538 static const uint16_t table27_66_inner_[19]; 539 static const uint8_t table27_66_outer_[128]; 540 static const uint8_t table27_67_emit_[68]; 541 static const uint16_t table27_67_inner_[36]; 542 static const uint8_t table27_67_outer_[128]; 543 static const uint8_t table27_68_emit_[16]; 544 static const uint8_t table27_69_emit_[28]; 545 static const uint8_t table27_70_emit_[36]; 546 static const uint8_t table27_71_emit_[68]; 547 static const uint8_t table27_72_emit_[16]; 548 static const uint8_t table27_73_emit_[28]; 549 static const uint8_t table27_74_emit_[36]; 550 static const uint8_t table27_75_emit_[68]; 551 static const uint8_t table27_76_emit_[44]; 552 static const uint16_t table27_76_inner_[23]; 553 static const uint8_t table27_77_emit_[104]; 554 static const uint16_t table27_77_inner_[54]; 555 static const uint8_t table27_78_emit_[44]; 556 static const uint8_t table27_79_emit_[104]; 557 static const uint8_t table27_80_emit_[44]; 558 static const uint8_t table27_81_emit_[104]; 559 static const uint8_t table27_82_emit_[44]; 560 static const uint8_t table27_83_emit_[104]; 561 static const uint8_t table27_84_emit_[44]; 562 static const uint8_t table27_85_emit_[104]; 563 static const uint8_t table27_86_emit_[44]; 564 static const uint8_t table27_87_emit_[104]; 565 static const uint8_t table27_88_emit_[44]; 566 static const uint8_t table27_89_emit_[104]; 567 static const uint8_t table27_90_emit_[44]; 568 static const uint8_t table27_91_emit_[104]; 569 static const uint8_t table27_92_emit_[136]; 570 static const uint16_t table27_92_inner_[70]; 571 static const uint8_t table27_93_emit_[136]; 572 static const uint8_t table27_94_emit_[136]; 573 static const uint8_t table27_95_emit_[136]; 574 static const uint8_t table27_96_emit_[136]; 575 static const uint8_t table27_97_emit_[136]; 576 static const uint8_t table27_98_emit_[136]; 577 static const uint8_t table27_99_emit_[136]; 578 static const uint8_t table27_100_emit_[136]; 579 static const uint8_t table27_101_emit_[136]; 580 static const uint8_t table27_102_emit_[136]; 581 static const uint8_t table27_103_emit_[136]; 582 static const uint8_t table27_104_emit_[136]; 583 static const uint8_t table27_105_emit_[144]; 584 static const uint16_t table27_105_inner_[75]; 585 static const uint8_t table27_106_emit_[144]; 586 static const uint8_t table27_107_emit_[144]; 587 static const uint8_t table27_108_emit_[144]; 588 static const uint8_t table27_109_emit_[144]; 589 static const uint8_t table27_110_emit_[144]; 590 static const uint8_t table27_111_emit_[144]; 591 static const uint8_t table27_112_emit_[144]; 592 static const uint8_t table27_113_emit_[144]; 593 static const uint8_t table27_114_emit_[144]; 594 static const uint8_t table27_115_emit_[144]; 595 static const uint8_t table27_116_emit_[144]; 596 static const uint8_t table27_117_emit_[144]; 597 static const uint8_t table27_118_emit_[80]; 598 static const uint16_t table27_118_inner_[45]; 599 static const uint8_t table27_119_emit_[80]; 600 static const uint8_t table27_120_emit_[80]; 601 static const uint8_t table27_121_emit_[80]; 602 static const uint8_t table27_122_emit_[80]; 603 static const uint8_t table27_123_emit_[80]; 604 static const uint8_t table27_124_emit_[80]; 605 static const uint8_t table27_125_emit_[26]; 606 static const uint16_t table27_125_inner_[18]; 607 static const uint8_t table27_125_outer_[128]; 608 static const uint8_t table27_126_emit_[10]; 609 static const uint16_t table27_126_inner_[11]; 610 static const uint8_t table27_126_outer_[128]; 611 static const uint8_t table27_127_emit_[63]; 612 static const uint16_t table27_127_inner_[65]; 613 static const uint8_t table27_127_outer_[128]; 614 static const uint8_t* const table27_emit_[128]; 615 static const uint16_t* const table27_inner_[128]; 616 static const uint8_t* const table27_outer_[128]; 617 static const uint8_t table28_0_outer_[256]; 618 static const uint8_t table28_1_outer_[256]; 619 static const uint8_t table28_20_emit_[222]; 620 static const uint16_t table28_20_inner_[76]; 621 static const uint8_t table28_20_outer_[256]; 622 static const uint8_t table28_21_emit_[222]; 623 static const uint8_t table28_22_emit_[222]; 624 static const uint8_t table28_23_emit_[222]; 625 static const uint8_t table28_24_emit_[222]; 626 static const uint8_t table28_25_emit_[222]; 627 static const uint8_t table28_26_emit_[222]; 628 static const uint8_t table28_27_emit_[222]; 629 static const uint8_t table28_28_emit_[222]; 630 static const uint8_t table28_29_emit_[222]; 631 static const uint8_t table28_30_emit_[222]; 632 static const uint8_t table28_31_emit_[222]; 633 static const uint8_t table28_32_emit_[222]; 634 static const uint8_t table28_33_emit_[222]; 635 static const uint8_t table28_34_emit_[222]; 636 static const uint8_t table28_35_emit_[222]; 637 static const uint8_t table28_36_emit_[222]; 638 static const uint8_t table28_37_emit_[222]; 639 static const uint8_t table28_38_emit_[222]; 640 static const uint8_t table28_39_emit_[222]; 641 static const uint8_t table28_40_emit_[222]; 642 static const uint8_t table28_41_emit_[222]; 643 static const uint8_t table28_42_emit_[222]; 644 static const uint8_t table28_43_emit_[222]; 645 static const uint8_t table28_44_emit_[222]; 646 static const uint8_t table28_45_emit_[222]; 647 static const uint8_t table28_46_emit_[408]; 648 static const uint16_t table28_46_inner_[139]; 649 static const uint8_t table28_46_outer_[256]; 650 static const uint8_t table28_47_emit_[408]; 651 static const uint8_t table28_48_emit_[408]; 652 static const uint8_t table28_49_emit_[408]; 653 static const uint8_t table28_50_emit_[408]; 654 static const uint8_t table28_51_emit_[408]; 655 static const uint8_t table28_52_emit_[408]; 656 static const uint8_t table28_53_emit_[408]; 657 static const uint8_t table28_54_emit_[408]; 658 static const uint8_t table28_55_emit_[408]; 659 static const uint8_t table28_56_emit_[408]; 660 static const uint8_t table28_57_emit_[408]; 661 static const uint8_t table28_58_emit_[408]; 662 static const uint8_t table28_59_emit_[408]; 663 static const uint8_t table28_60_emit_[408]; 664 static const uint8_t table28_61_emit_[408]; 665 static const uint8_t table28_62_emit_[432]; 666 static const uint16_t table28_62_inner_[149]; 667 static const uint8_t table28_62_outer_[256]; 668 static const uint8_t table28_63_emit_[252]; 669 static const uint16_t table28_63_inner_[94]; 670 static const uint8_t table28_63_outer_[256]; 671 static const uint8_t table28_64_emit_[240]; 672 static const uint16_t table28_64_inner_[89]; 673 static const uint8_t table28_64_outer_[256]; 674 static const uint8_t table28_65_emit_[84]; 675 static const uint16_t table28_65_inner_[35]; 676 static const uint8_t table28_65_outer_[256]; 677 static const uint8_t table28_66_outer_[256]; 678 static const uint8_t table28_67_emit_[78]; 679 static const uint16_t table28_67_inner_[41]; 680 static const uint8_t table28_67_outer_[256]; 681 static const uint8_t table28_68_emit_[240]; 682 static const uint8_t table28_69_emit_[84]; 683 static const uint8_t table28_71_emit_[78]; 684 static const uint8_t table28_72_emit_[240]; 685 static const uint8_t table28_73_emit_[84]; 686 static const uint8_t table28_75_emit_[78]; 687 static const uint8_t table28_92_emit_[148]; 688 static const uint16_t table28_92_inner_[76]; 689 static const uint8_t table28_93_emit_[148]; 690 static const uint8_t table28_94_emit_[148]; 691 static const uint8_t table28_95_emit_[148]; 692 static const uint8_t table28_96_emit_[148]; 693 static const uint8_t table28_97_emit_[148]; 694 static const uint8_t table28_98_emit_[148]; 695 static const uint8_t table28_99_emit_[148]; 696 static const uint8_t table28_100_emit_[148]; 697 static const uint8_t table28_101_emit_[148]; 698 static const uint8_t table28_102_emit_[148]; 699 static const uint8_t table28_103_emit_[148]; 700 static const uint8_t table28_104_emit_[148]; 701 static const uint8_t table28_105_emit_[272]; 702 static const uint16_t table28_105_inner_[139]; 703 static const uint8_t table28_106_emit_[272]; 704 static const uint8_t table28_107_emit_[272]; 705 static const uint8_t table28_108_emit_[272]; 706 static const uint8_t table28_109_emit_[272]; 707 static const uint8_t table28_110_emit_[272]; 708 static const uint8_t table28_111_emit_[272]; 709 static const uint8_t table28_112_emit_[272]; 710 static const uint8_t table28_113_emit_[272]; 711 static const uint8_t table28_114_emit_[272]; 712 static const uint8_t table28_115_emit_[272]; 713 static const uint8_t table28_116_emit_[272]; 714 static const uint8_t table28_117_emit_[272]; 715 static const uint8_t table28_118_emit_[288]; 716 static const uint16_t table28_118_inner_[149]; 717 static const uint8_t table28_119_emit_[288]; 718 static const uint8_t table28_120_emit_[288]; 719 static const uint8_t table28_121_emit_[288]; 720 static const uint8_t table28_122_emit_[288]; 721 static const uint8_t table28_123_emit_[288]; 722 static const uint8_t table28_124_emit_[288]; 723 static const uint8_t table28_125_emit_[192]; 724 static const uint16_t table28_125_inner_[104]; 725 static const uint8_t table28_125_outer_[256]; 726 static const uint8_t table28_126_emit_[124]; 727 static const uint16_t table28_126_inner_[71]; 728 static const uint8_t table28_126_outer_[256]; 729 static const uint8_t table28_127_outer_[256]; 730 static const uint8_t* const table28_emit_[128]; 731 static const uint16_t* const table28_inner_[128]; 732 static const uint8_t* const table28_outer_[128]; 733 static const uint8_t table13_0_emit_[1]; 734 static const uint16_t table13_0_ops_[512]; 735 static const uint8_t table13_64_emit_[1]; 736 static const uint16_t table13_64_ops_[512]; 737 static const uint8_t table13_68_emit_[1]; 738 static const uint8_t table13_72_emit_[1]; 739 static const uint8_t table13_76_emit_[1]; 740 static const uint16_t table13_76_ops_[512]; 741 static const uint8_t table13_78_emit_[1]; 742 static const uint8_t table13_80_emit_[1]; 743 static const uint8_t table13_82_emit_[1]; 744 static const uint8_t table13_84_emit_[1]; 745 static const uint8_t table13_86_emit_[1]; 746 static const uint8_t table13_88_emit_[1]; 747 static const uint8_t table13_90_emit_[1]; 748 static const uint8_t table13_92_emit_[1]; 749 static const uint16_t table13_92_ops_[512]; 750 static const uint8_t table13_93_emit_[1]; 751 static const uint8_t table13_94_emit_[1]; 752 static const uint8_t table13_95_emit_[1]; 753 static const uint8_t table13_96_emit_[1]; 754 static const uint8_t table13_97_emit_[1]; 755 static const uint8_t table13_98_emit_[1]; 756 static const uint8_t table13_99_emit_[1]; 757 static const uint8_t table13_100_emit_[1]; 758 static const uint8_t table13_101_emit_[1]; 759 static const uint8_t table13_102_emit_[1]; 760 static const uint8_t table13_103_emit_[1]; 761 static const uint8_t table13_104_emit_[1]; 762 static const uint8_t table13_105_emit_[2]; 763 static const uint16_t table13_105_ops_[512]; 764 static const uint8_t table13_106_emit_[2]; 765 static const uint8_t table13_107_emit_[2]; 766 static const uint8_t table13_108_emit_[2]; 767 static const uint8_t table13_109_emit_[2]; 768 static const uint8_t table13_110_emit_[2]; 769 static const uint8_t table13_111_emit_[2]; 770 static const uint8_t table13_112_emit_[2]; 771 static const uint8_t table13_113_emit_[2]; 772 static const uint8_t table13_114_emit_[2]; 773 static const uint8_t table13_115_emit_[2]; 774 static const uint8_t table13_116_emit_[2]; 775 static const uint8_t table13_117_emit_[2]; 776 static const uint8_t table13_118_emit_[4]; 777 static const uint16_t table13_118_ops_[512]; 778 static const uint8_t table13_119_emit_[4]; 779 static const uint8_t table13_120_emit_[4]; 780 static const uint8_t table13_121_emit_[4]; 781 static const uint8_t table13_122_emit_[4]; 782 static const uint8_t table13_123_emit_[4]; 783 static const uint8_t table13_124_emit_[4]; 784 static const uint8_t table13_125_emit_[7]; 785 static const uint16_t table13_125_ops_[512]; 786 static const uint16_t table13_126_ops_[512]; 787 static const uint8_t table13_127_emit_[66]; 788 static const uint16_t table13_127_ops_[512]; 789 static const uint8_t* const table13_emit_[128]; 790 static const uint16_t* const table13_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 (!RefillTo7()) { 800 Done0(); 801 break; 802 } 803 const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f; 804 const auto op = GetOp1(index); 805 const int consumed = op & 7; 806 buffer_len_ -= consumed; 807 const auto emit_ofs = op >> 6; 808 switch ((op >> 3) & 7) { 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 case 3: { 822 DecodeStep2(); 823 break; 824 } 825 case 4: { 826 DecodeStep3(); 827 break; 828 } 829 } 830 } 831 return ok_; 832 } 833 834 private: RefillTo7()835 bool RefillTo7() { 836 switch (buffer_len_) { 837 case 0: { 838 return Read1to8Bytes(); 839 } 840 case 1: 841 case 2: 842 case 3: 843 case 4: 844 case 5: 845 case 6: { 846 return Read1to7Bytes(); 847 } 848 } 849 return true; 850 } Read1to8Bytes()851 bool Read1to8Bytes() { 852 switch (end_ - begin_) { 853 case 0: { 854 return false; 855 } 856 case 1: { 857 Fill1(); 858 return true; 859 } 860 case 2: { 861 Fill2(); 862 return true; 863 } 864 case 3: { 865 Fill3(); 866 return true; 867 } 868 case 4: { 869 Fill4(); 870 return true; 871 } 872 case 5: { 873 Fill5(); 874 return true; 875 } 876 case 6: { 877 Fill6(); 878 return true; 879 } 880 case 7: { 881 Fill7(); 882 return true; 883 } 884 default: { 885 Fill8(); 886 return true; 887 } 888 } 889 } Fill1()890 void Fill1() { 891 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 892 begin_ += 1; 893 buffer_len_ += 8; 894 } Fill2()895 void Fill2() { 896 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 897 (static_cast<uint64_t>(begin_[1]) << 0); 898 begin_ += 2; 899 buffer_len_ += 16; 900 } Fill3()901 void Fill3() { 902 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 903 (static_cast<uint64_t>(begin_[1]) << 8) | 904 (static_cast<uint64_t>(begin_[2]) << 0); 905 begin_ += 3; 906 buffer_len_ += 24; 907 } Fill4()908 void Fill4() { 909 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 910 (static_cast<uint64_t>(begin_[1]) << 16) | 911 (static_cast<uint64_t>(begin_[2]) << 8) | 912 (static_cast<uint64_t>(begin_[3]) << 0); 913 begin_ += 4; 914 buffer_len_ += 32; 915 } Fill5()916 void Fill5() { 917 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 918 (static_cast<uint64_t>(begin_[1]) << 24) | 919 (static_cast<uint64_t>(begin_[2]) << 16) | 920 (static_cast<uint64_t>(begin_[3]) << 8) | 921 (static_cast<uint64_t>(begin_[4]) << 0); 922 begin_ += 5; 923 buffer_len_ += 40; 924 } Fill6()925 void Fill6() { 926 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 927 (static_cast<uint64_t>(begin_[1]) << 32) | 928 (static_cast<uint64_t>(begin_[2]) << 24) | 929 (static_cast<uint64_t>(begin_[3]) << 16) | 930 (static_cast<uint64_t>(begin_[4]) << 8) | 931 (static_cast<uint64_t>(begin_[5]) << 0); 932 begin_ += 6; 933 buffer_len_ += 48; 934 } Fill7()935 void Fill7() { 936 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 937 (static_cast<uint64_t>(begin_[1]) << 40) | 938 (static_cast<uint64_t>(begin_[2]) << 32) | 939 (static_cast<uint64_t>(begin_[3]) << 24) | 940 (static_cast<uint64_t>(begin_[4]) << 16) | 941 (static_cast<uint64_t>(begin_[5]) << 8) | 942 (static_cast<uint64_t>(begin_[6]) << 0); 943 begin_ += 7; 944 buffer_len_ += 56; 945 } Fill8()946 void Fill8() { 947 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 948 (static_cast<uint64_t>(begin_[1]) << 48) | 949 (static_cast<uint64_t>(begin_[2]) << 40) | 950 (static_cast<uint64_t>(begin_[3]) << 32) | 951 (static_cast<uint64_t>(begin_[4]) << 24) | 952 (static_cast<uint64_t>(begin_[5]) << 16) | 953 (static_cast<uint64_t>(begin_[6]) << 8) | 954 (static_cast<uint64_t>(begin_[7]) << 0); 955 begin_ += 8; 956 buffer_len_ += 64; 957 } Read1to7Bytes()958 bool Read1to7Bytes() { 959 switch (end_ - begin_) { 960 case 0: { 961 return false; 962 } 963 case 1: { 964 Fill1(); 965 return true; 966 } 967 case 2: { 968 Fill2(); 969 return true; 970 } 971 case 3: { 972 Fill3(); 973 return true; 974 } 975 case 4: { 976 Fill4(); 977 return true; 978 } 979 case 5: { 980 Fill5(); 981 return true; 982 } 983 case 6: { 984 Fill6(); 985 return true; 986 } 987 default: { 988 Fill7(); 989 return true; 990 } 991 } 992 } Done0()993 void Done0() { 994 done_ = true; 995 switch (buffer_len_) { 996 case 1: 997 case 2: 998 case 3: 999 case 4: { 1000 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1001 return; 1002 } 1003 case 5: { 1004 const auto index = buffer_ & 31; 1005 const auto op = GetOp2(index); 1006 switch (op & 3) { 1007 case 0: { 1008 sink_(GetEmit2(index, (op >> 2) + 0)); 1009 break; 1010 } 1011 case 1: { 1012 ok_ = false; 1013 break; 1014 } 1015 } 1016 return; 1017 } 1018 case 6: { 1019 const auto index = buffer_ & 63; 1020 const auto op = GetOp3(index); 1021 switch (op & 3) { 1022 case 0: { 1023 ok_ = false; 1024 break; 1025 } 1026 case 1: { 1027 sink_(GetEmit3(index, (op >> 2) + 0)); 1028 break; 1029 } 1030 } 1031 return; 1032 } 1033 case 0: { 1034 return; 1035 } 1036 } 1037 } DecodeStep0()1038 void DecodeStep0() { 1039 if (!RefillTo1()) { 1040 Done1(); 1041 return; 1042 } 1043 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1044 const auto op = GetOp4(index); 1045 const int consumed = op & 1; 1046 buffer_len_ -= consumed; 1047 const auto emit_ofs = op >> 1; 1048 sink_(GetEmit4(index, emit_ofs + 0)); 1049 } RefillTo1()1050 bool RefillTo1() { 1051 switch (buffer_len_) { 1052 case 0: { 1053 return Read1to8Bytes(); 1054 } 1055 } 1056 return true; 1057 } Done1()1058 void Done1() { 1059 done_ = true; 1060 ok_ = false; 1061 } DecodeStep1()1062 void DecodeStep1() { 1063 if (!RefillTo1()) { 1064 Done2(); 1065 return; 1066 } 1067 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1068 const auto op = GetOp5(index); 1069 const int consumed = op & 1; 1070 buffer_len_ -= consumed; 1071 const auto emit_ofs = op >> 1; 1072 sink_(GetEmit5(index, emit_ofs + 0)); 1073 } Done2()1074 void Done2() { 1075 done_ = true; 1076 ok_ = false; 1077 } DecodeStep2()1078 void DecodeStep2() { 1079 if (!RefillTo1()) { 1080 Done3(); 1081 return; 1082 } 1083 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1084 const auto op = GetOp6(index); 1085 const int consumed = op & 1; 1086 buffer_len_ -= consumed; 1087 const auto emit_ofs = op >> 1; 1088 sink_(GetEmit6(index, emit_ofs + 0)); 1089 } Done3()1090 void Done3() { 1091 done_ = true; 1092 ok_ = false; 1093 } DecodeStep3()1094 void DecodeStep3() { 1095 if (!RefillTo7()) { 1096 Done4(); 1097 return; 1098 } 1099 const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f; 1100 const auto op = GetOp7(index); 1101 const int consumed = op & 7; 1102 buffer_len_ -= consumed; 1103 const auto emit_ofs = op >> 5; 1104 switch ((op >> 3) & 3) { 1105 case 0: { 1106 sink_(GetEmit7(index, emit_ofs + 0)); 1107 break; 1108 } 1109 case 1: { 1110 DecodeStep4(); 1111 break; 1112 } 1113 case 2: { 1114 DecodeStep5(); 1115 break; 1116 } 1117 } 1118 } Done4()1119 void Done4() { 1120 done_ = true; 1121 switch (buffer_len_) { 1122 case 1: 1123 case 2: { 1124 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1125 return; 1126 } 1127 case 3: { 1128 const auto index = buffer_ & 7; 1129 const auto op = GetOp8(index); 1130 switch (op & 3) { 1131 case 0: { 1132 sink_(GetEmit8(index, (op >> 2) + 0)); 1133 break; 1134 } 1135 case 1: { 1136 ok_ = false; 1137 break; 1138 } 1139 } 1140 return; 1141 } 1142 case 4: { 1143 const auto index = buffer_ & 15; 1144 const auto op = GetOp9(index); 1145 switch (op & 3) { 1146 case 0: { 1147 ok_ = false; 1148 break; 1149 } 1150 case 1: { 1151 sink_(GetEmit9(index, (op >> 2) + 0)); 1152 break; 1153 } 1154 } 1155 return; 1156 } 1157 case 5: { 1158 const auto index = buffer_ & 31; 1159 const auto op = GetOp10(index); 1160 switch (op & 3) { 1161 case 0: { 1162 ok_ = false; 1163 break; 1164 } 1165 case 1: { 1166 sink_(GetEmit10(index, (op >> 2) + 0)); 1167 break; 1168 } 1169 } 1170 return; 1171 } 1172 case 6: { 1173 const auto index = buffer_ & 63; 1174 const auto op = GetOp11(index); 1175 switch (op & 3) { 1176 case 0: { 1177 ok_ = false; 1178 break; 1179 } 1180 case 1: { 1181 sink_(GetEmit11(index, (op >> 2) + 0)); 1182 break; 1183 } 1184 } 1185 return; 1186 } 1187 case 0: { 1188 return; 1189 } 1190 } 1191 } DecodeStep4()1192 void DecodeStep4() { 1193 if (!RefillTo1()) { 1194 Done5(); 1195 return; 1196 } 1197 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1198 const auto op = GetOp12(index); 1199 const int consumed = op & 1; 1200 buffer_len_ -= consumed; 1201 const auto emit_ofs = op >> 1; 1202 sink_(GetEmit12(index, emit_ofs + 0)); 1203 } Done5()1204 void Done5() { 1205 done_ = true; 1206 ok_ = false; 1207 } DecodeStep5()1208 void DecodeStep5() { 1209 if (!RefillTo16()) { 1210 Done6(); 1211 return; 1212 } 1213 const auto index = (buffer_ >> (buffer_len_ - 16)) & 0xffff; 1214 const auto op = GetOp13(index); 1215 const int consumed = op & 31; 1216 buffer_len_ -= consumed; 1217 const auto emit_ofs = op >> 6; 1218 switch ((op >> 5) & 1) { 1219 case 0: { 1220 sink_(GetEmit13(index, emit_ofs + 0)); 1221 break; 1222 } 1223 case 1: { 1224 begin_ = end_; 1225 buffer_len_ = 0; 1226 break; 1227 } 1228 } 1229 } RefillTo16()1230 bool RefillTo16() { 1231 switch (buffer_len_) { 1232 case 0: { 1233 return Read2to8Bytes(); 1234 } 1235 case 1: 1236 case 2: 1237 case 3: 1238 case 4: 1239 case 5: 1240 case 6: 1241 case 7: { 1242 return Read2to7Bytes(); 1243 } 1244 case 8: { 1245 return Read1to7Bytes(); 1246 } 1247 case 9: 1248 case 10: 1249 case 11: 1250 case 12: 1251 case 13: 1252 case 14: 1253 case 15: { 1254 return Read1to6Bytes(); 1255 } 1256 } 1257 return true; 1258 } Read2to8Bytes()1259 bool Read2to8Bytes() { 1260 switch (end_ - begin_) { 1261 case 0: 1262 case 1: { 1263 return false; 1264 } 1265 case 2: { 1266 Fill2(); 1267 return true; 1268 } 1269 case 3: { 1270 Fill3(); 1271 return true; 1272 } 1273 case 4: { 1274 Fill4(); 1275 return true; 1276 } 1277 case 5: { 1278 Fill5(); 1279 return true; 1280 } 1281 case 6: { 1282 Fill6(); 1283 return true; 1284 } 1285 case 7: { 1286 Fill7(); 1287 return true; 1288 } 1289 default: { 1290 Fill8(); 1291 return true; 1292 } 1293 } 1294 } Read2to7Bytes()1295 bool Read2to7Bytes() { 1296 switch (end_ - begin_) { 1297 case 0: 1298 case 1: { 1299 return false; 1300 } 1301 case 2: { 1302 Fill2(); 1303 return true; 1304 } 1305 case 3: { 1306 Fill3(); 1307 return true; 1308 } 1309 case 4: { 1310 Fill4(); 1311 return true; 1312 } 1313 case 5: { 1314 Fill5(); 1315 return true; 1316 } 1317 case 6: { 1318 Fill6(); 1319 return true; 1320 } 1321 default: { 1322 Fill7(); 1323 return true; 1324 } 1325 } 1326 } Read1to6Bytes()1327 bool Read1to6Bytes() { 1328 switch (end_ - begin_) { 1329 case 0: { 1330 return false; 1331 } 1332 case 1: { 1333 Fill1(); 1334 return true; 1335 } 1336 case 2: { 1337 Fill2(); 1338 return true; 1339 } 1340 case 3: { 1341 Fill3(); 1342 return true; 1343 } 1344 case 4: { 1345 Fill4(); 1346 return true; 1347 } 1348 case 5: { 1349 Fill5(); 1350 return true; 1351 } 1352 default: { 1353 Fill6(); 1354 return true; 1355 } 1356 } 1357 } Done6()1358 void Done6() { 1359 done_ = true; 1360 switch (end_ - begin_) { 1361 case 1: { 1362 Fill1(); 1363 break; 1364 } 1365 } 1366 switch (buffer_len_) { 1367 case 1: { 1368 const auto index = buffer_ & 1; 1369 const auto op = GetOp14(index); 1370 switch (op & 1) { 1371 case 0: { 1372 sink_(GetEmit14(index, (op >> 1) + 0)); 1373 break; 1374 } 1375 } 1376 return; 1377 } 1378 case 2: { 1379 const auto index = buffer_ & 3; 1380 const auto op = GetOp15(index); 1381 switch (op & 3) { 1382 case 0: { 1383 ok_ = false; 1384 break; 1385 } 1386 case 1: { 1387 sink_(GetEmit15(index, (op >> 2) + 0)); 1388 break; 1389 } 1390 } 1391 return; 1392 } 1393 case 3: { 1394 const auto index = buffer_ & 7; 1395 const auto op = GetOp16(index); 1396 switch (op & 3) { 1397 case 0: { 1398 ok_ = false; 1399 break; 1400 } 1401 case 1: { 1402 sink_(GetEmit16(index, (op >> 2) + 0)); 1403 break; 1404 } 1405 } 1406 return; 1407 } 1408 case 4: { 1409 const auto index = buffer_ & 15; 1410 const auto op = GetOp17(index); 1411 switch (op & 3) { 1412 case 0: { 1413 ok_ = false; 1414 break; 1415 } 1416 case 1: { 1417 sink_(GetEmit17(index, (op >> 2) + 0)); 1418 break; 1419 } 1420 } 1421 return; 1422 } 1423 case 5: { 1424 const auto index = buffer_ & 31; 1425 const auto op = GetOp18(index); 1426 switch (op & 3) { 1427 case 0: { 1428 ok_ = false; 1429 break; 1430 } 1431 case 1: { 1432 sink_(GetEmit18(index, (op >> 2) + 0)); 1433 break; 1434 } 1435 } 1436 return; 1437 } 1438 case 6: { 1439 const auto index = buffer_ & 63; 1440 const auto op = GetOp19(index); 1441 switch (op & 3) { 1442 case 0: { 1443 sink_(GetEmit19(index, (op >> 2) + 0)); 1444 sink_(GetEmit19(index, (op >> 2) + 1)); 1445 break; 1446 } 1447 case 1: { 1448 ok_ = false; 1449 break; 1450 } 1451 case 2: { 1452 sink_(GetEmit19(index, (op >> 2) + 0)); 1453 break; 1454 } 1455 } 1456 return; 1457 } 1458 case 7: { 1459 const auto index = buffer_ & 127; 1460 const auto op = GetOp20(index); 1461 switch (op & 3) { 1462 case 0: { 1463 ok_ = false; 1464 break; 1465 } 1466 case 1: { 1467 sink_(GetEmit20(index, (op >> 2) + 0)); 1468 sink_(GetEmit20(index, (op >> 2) + 1)); 1469 break; 1470 } 1471 case 2: { 1472 sink_(GetEmit20(index, (op >> 2) + 0)); 1473 break; 1474 } 1475 } 1476 return; 1477 } 1478 case 8: { 1479 const auto index = buffer_ & 255; 1480 const auto op = GetOp21(index); 1481 switch (op & 3) { 1482 case 0: { 1483 ok_ = false; 1484 break; 1485 } 1486 case 1: { 1487 sink_(GetEmit21(index, (op >> 2) + 0)); 1488 sink_(GetEmit21(index, (op >> 2) + 1)); 1489 break; 1490 } 1491 case 2: { 1492 sink_(GetEmit21(index, (op >> 2) + 0)); 1493 break; 1494 } 1495 } 1496 return; 1497 } 1498 case 9: { 1499 const auto index = buffer_ & 511; 1500 const auto op = GetOp22(index); 1501 switch (op & 3) { 1502 case 0: { 1503 ok_ = false; 1504 break; 1505 } 1506 case 1: { 1507 sink_(GetEmit22(index, (op >> 2) + 0)); 1508 sink_(GetEmit22(index, (op >> 2) + 1)); 1509 break; 1510 } 1511 case 2: { 1512 sink_(GetEmit22(index, (op >> 2) + 0)); 1513 break; 1514 } 1515 } 1516 return; 1517 } 1518 case 10: { 1519 const auto index = buffer_ & 1023; 1520 const auto op = GetOp23(index); 1521 switch (op & 3) { 1522 case 0: { 1523 ok_ = false; 1524 break; 1525 } 1526 case 1: { 1527 sink_(GetEmit23(index, (op >> 2) + 0)); 1528 sink_(GetEmit23(index, (op >> 2) + 1)); 1529 break; 1530 } 1531 case 2: { 1532 sink_(GetEmit23(index, (op >> 2) + 0)); 1533 break; 1534 } 1535 } 1536 return; 1537 } 1538 case 11: { 1539 const auto index = buffer_ & 2047; 1540 const auto op = GetOp24(index); 1541 switch (op & 7) { 1542 case 0: { 1543 sink_(GetEmit24(index, (op >> 3) + 0)); 1544 sink_(GetEmit24(index, (op >> 3) + 1)); 1545 sink_(GetEmit24(index, (op >> 3) + 2)); 1546 break; 1547 } 1548 case 1: { 1549 ok_ = false; 1550 break; 1551 } 1552 case 2: { 1553 sink_(GetEmit24(index, (op >> 3) + 0)); 1554 sink_(GetEmit24(index, (op >> 3) + 1)); 1555 break; 1556 } 1557 case 3: { 1558 sink_(GetEmit24(index, (op >> 3) + 0)); 1559 break; 1560 } 1561 } 1562 return; 1563 } 1564 case 12: { 1565 const auto index = buffer_ & 4095; 1566 const auto op = GetOp25(index); 1567 switch (op & 7) { 1568 case 0: { 1569 ok_ = false; 1570 break; 1571 } 1572 case 1: { 1573 sink_(GetEmit25(index, (op >> 3) + 0)); 1574 sink_(GetEmit25(index, (op >> 3) + 1)); 1575 sink_(GetEmit25(index, (op >> 3) + 2)); 1576 break; 1577 } 1578 case 2: { 1579 sink_(GetEmit25(index, (op >> 3) + 0)); 1580 sink_(GetEmit25(index, (op >> 3) + 1)); 1581 break; 1582 } 1583 case 3: { 1584 sink_(GetEmit25(index, (op >> 3) + 0)); 1585 break; 1586 } 1587 } 1588 return; 1589 } 1590 case 13: { 1591 const auto index = buffer_ & 8191; 1592 const auto op = GetOp26(index); 1593 switch (op & 7) { 1594 case 0: { 1595 ok_ = false; 1596 break; 1597 } 1598 case 1: { 1599 sink_(GetEmit26(index, (op >> 3) + 0)); 1600 sink_(GetEmit26(index, (op >> 3) + 1)); 1601 sink_(GetEmit26(index, (op >> 3) + 2)); 1602 break; 1603 } 1604 case 2: { 1605 sink_(GetEmit26(index, (op >> 3) + 0)); 1606 sink_(GetEmit26(index, (op >> 3) + 1)); 1607 break; 1608 } 1609 case 3: { 1610 sink_(GetEmit26(index, (op >> 3) + 0)); 1611 break; 1612 } 1613 } 1614 return; 1615 } 1616 case 14: { 1617 const auto index = buffer_ & 16383; 1618 const auto op = GetOp27(index); 1619 switch (op & 7) { 1620 case 0: { 1621 ok_ = false; 1622 break; 1623 } 1624 case 1: { 1625 sink_(GetEmit27(index, (op >> 3) + 0)); 1626 sink_(GetEmit27(index, (op >> 3) + 1)); 1627 sink_(GetEmit27(index, (op >> 3) + 2)); 1628 break; 1629 } 1630 case 2: { 1631 sink_(GetEmit27(index, (op >> 3) + 0)); 1632 sink_(GetEmit27(index, (op >> 3) + 1)); 1633 break; 1634 } 1635 case 3: { 1636 sink_(GetEmit27(index, (op >> 3) + 0)); 1637 break; 1638 } 1639 } 1640 return; 1641 } 1642 case 15: { 1643 const auto index = buffer_ & 32767; 1644 const auto op = GetOp28(index); 1645 switch (op & 7) { 1646 case 0: { 1647 ok_ = false; 1648 break; 1649 } 1650 case 1: { 1651 sink_(GetEmit28(index, (op >> 3) + 0)); 1652 sink_(GetEmit28(index, (op >> 3) + 1)); 1653 sink_(GetEmit28(index, (op >> 3) + 2)); 1654 break; 1655 } 1656 case 2: { 1657 sink_(GetEmit28(index, (op >> 3) + 0)); 1658 sink_(GetEmit28(index, (op >> 3) + 1)); 1659 break; 1660 } 1661 case 3: { 1662 sink_(GetEmit28(index, (op >> 3) + 0)); 1663 break; 1664 } 1665 } 1666 return; 1667 } 1668 case 0: { 1669 return; 1670 } 1671 } 1672 } 1673 F sink_; 1674 const uint8_t* begin_; 1675 const uint8_t* const end_; 1676 uint64_t buffer_ = 0; 1677 int buffer_len_ = 0; 1678 bool ok_ = true; 1679 bool done_ = false; 1680 }; 1681 } // namespace geometry_7_7_16 1682 } // namespace grpc_core 1683 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_7_16_H 1684