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_10_15_5_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_10_15_5_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_10_15_5 { 26 class HuffDecoderCommon { 27 protected: GetOp2(size_t i)28 static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; } GetEmit2(size_t,size_t emit)29 static inline uint64_t GetEmit2(size_t, size_t emit) { 30 return table2_0_emit_[emit]; 31 } GetOp3(size_t i)32 static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; } GetEmit3(size_t,size_t emit)33 static inline uint64_t GetEmit3(size_t, size_t emit) { 34 return table3_0_emit_[emit]; 35 } GetOp4(size_t i)36 static inline uint64_t GetOp4(size_t i) { 37 return table4_ops_[i >> 6][i & 0x3f]; 38 } GetEmit4(size_t i,size_t emit)39 static inline uint64_t GetEmit4(size_t i, size_t emit) { 40 return table4_emit_[i >> 6][emit]; 41 } GetOp5(size_t i)42 static inline uint64_t GetOp5(size_t i) { 43 return table5_ops_[i >> 7][i & 0x7f]; 44 } GetEmit5(size_t i,size_t emit)45 static inline uint64_t GetEmit5(size_t i, size_t emit) { 46 return table5_emit_[i >> 7][emit]; 47 } GetOp6(size_t i)48 static inline uint64_t GetOp6(size_t i) { 49 return table6_ops_[i >> 5][i & 0x1f]; 50 } GetEmit6(size_t i,size_t emit)51 static inline uint64_t GetEmit6(size_t i, size_t emit) { 52 return table6_emit_[i >> 5][emit]; 53 } GetOp1(size_t i)54 static inline uint64_t GetOp1(size_t i) { 55 return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]]; 56 } GetEmit1(size_t i,size_t emit)57 static inline uint64_t GetEmit1(size_t i, size_t emit) { 58 return table1_emit_[i >> 6][emit]; 59 } GetOp7(size_t i)60 static inline uint64_t GetOp7(size_t i) { return i ? 3 : 1; } GetEmit7(size_t,size_t emit)61 static inline uint64_t GetEmit7(size_t, size_t emit) { 62 return emit ? 43 : 39; 63 } GetOp9(size_t i)64 static inline uint64_t GetOp9(size_t i) { return table9_0_inner_[i]; } GetEmit9(size_t,size_t emit)65 static inline uint64_t GetEmit9(size_t, size_t emit) { 66 return table9_0_emit_[emit]; 67 } GetOp10(size_t i)68 static inline uint64_t GetOp10(size_t i) { 69 return table10_0_inner_[table10_0_outer_[i]]; 70 } GetEmit10(size_t,size_t emit)71 static inline uint64_t GetEmit10(size_t, size_t emit) { 72 return table10_0_emit_[emit]; 73 } GetOp11(size_t i)74 static inline uint64_t GetOp11(size_t i) { return table11_0_ops_[i]; } GetEmit11(size_t,size_t emit)75 static inline uint64_t GetEmit11(size_t, size_t emit) { 76 return table11_0_emit_[emit]; 77 } GetOp12(size_t i)78 static inline uint64_t GetOp12(size_t i) { return table12_0_ops_[i]; } GetEmit12(size_t,size_t emit)79 static inline uint64_t GetEmit12(size_t, size_t emit) { 80 return table11_0_emit_[emit]; 81 } GetOp13(size_t i)82 static inline uint64_t GetOp13(size_t i) { return table13_0_ops_[i]; } GetEmit13(size_t,size_t emit)83 static inline uint64_t GetEmit13(size_t, size_t emit) { 84 return table11_0_emit_[emit]; 85 } GetOp14(size_t i)86 static inline uint64_t GetOp14(size_t i) { 87 return table14_ops_[i >> 6][i & 0x3f]; 88 } GetEmit14(size_t i,size_t emit)89 static inline uint64_t GetEmit14(size_t i, size_t emit) { 90 return table14_emit_[i >> 6][emit]; 91 } GetOp15(size_t i)92 static inline uint64_t GetOp15(size_t i) { 93 return table15_ops_[i >> 6][i & 0x3f]; 94 } GetEmit15(size_t i,size_t emit)95 static inline uint64_t GetEmit15(size_t i, size_t emit) { 96 return table15_emit_[i >> 6][emit]; 97 } GetOp16(size_t i)98 static inline uint64_t GetOp16(size_t i) { 99 return table16_ops_[i >> 6][i & 0x3f]; 100 } GetEmit16(size_t i,size_t emit)101 static inline uint64_t GetEmit16(size_t i, size_t emit) { 102 return table16_emit_[i >> 6][emit]; 103 } GetOp17(size_t i)104 static inline uint64_t GetOp17(size_t i) { 105 return table17_ops_[i >> 6][i & 0x3f]; 106 } GetEmit17(size_t i,size_t emit)107 static inline uint64_t GetEmit17(size_t i, size_t emit) { 108 return table17_emit_[i >> 6][emit]; 109 } GetOp18(size_t i)110 static inline uint64_t GetOp18(size_t i) { 111 return table18_ops_[i >> 7][i & 0x7f]; 112 } GetEmit18(size_t i,size_t emit)113 static inline uint64_t GetEmit18(size_t i, size_t emit) { 114 return table18_emit_[i >> 7][emit]; 115 } GetOp19(size_t i)116 static inline uint64_t GetOp19(size_t i) { 117 return table19_ops_[i >> 7][i & 0x7f]; 118 } GetEmit19(size_t i,size_t emit)119 static inline uint64_t GetEmit19(size_t i, size_t emit) { 120 return table19_emit_[i >> 7][emit]; 121 } GetOp20(size_t i)122 static inline uint64_t GetOp20(size_t i) { 123 return table20_ops_[i >> 7][i & 0x7f]; 124 } GetEmit20(size_t i,size_t emit)125 static inline uint64_t GetEmit20(size_t i, size_t emit) { 126 return table20_emit_[i >> 7][emit]; 127 } GetOp8(size_t i)128 static inline uint64_t GetOp8(size_t i) { 129 return table8_ops_[i >> 9][i & 0x1ff]; 130 } GetEmit8(size_t i,size_t emit)131 static inline uint64_t GetEmit8(size_t i, size_t emit) { 132 return table8_emit_[i >> 9][emit]; 133 } GetOp21(size_t i)134 static inline uint64_t GetOp21(size_t i) { return i ? 3 : 1; } GetEmit21(size_t,size_t emit)135 static inline uint64_t GetEmit21(size_t, size_t emit) { return emit + 192; } GetOp22(size_t i)136 static inline uint64_t GetOp22(size_t i) { return i ? 3 : 1; } GetEmit22(size_t,size_t emit)137 static inline uint64_t GetEmit22(size_t, size_t emit) { return emit + 200; } GetOp23(size_t i)138 static inline uint64_t GetOp23(size_t i) { return i ? 3 : 1; } GetEmit23(size_t,size_t emit)139 static inline uint64_t GetEmit23(size_t, size_t emit) { 140 return emit ? 205 : 202; 141 } GetOp24(size_t i)142 static inline uint64_t GetOp24(size_t i) { return i ? 3 : 1; } GetEmit24(size_t,size_t emit)143 static inline uint64_t GetEmit24(size_t, size_t emit) { 144 return emit ? 213 : 210; 145 } GetOp25(size_t i)146 static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; } GetEmit25(size_t,size_t emit)147 static inline uint64_t GetEmit25(size_t, size_t emit) { return emit + 218; } GetOp26(size_t i)148 static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; } GetEmit26(size_t,size_t emit)149 static inline uint64_t GetEmit26(size_t, size_t emit) { 150 return emit ? 240 : 238; 151 } GetOp27(size_t i)152 static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; } GetEmit27(size_t,size_t emit)153 static inline uint64_t GetEmit27(size_t, size_t emit) { return emit + 242; } GetOp28(size_t i)154 static inline uint64_t GetOp28(size_t i) { 155 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 156 } GetEmit28(size_t,size_t emit)157 static inline uint64_t GetEmit28(size_t, size_t emit) { 158 return (emit < 2 ? (emit + 211) : ((emit - 2) ? 221 : 214)); 159 } GetOp29(size_t i)160 static inline uint64_t GetOp29(size_t i) { 161 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 162 } GetEmit29(size_t,size_t emit)163 static inline uint64_t GetEmit29(size_t, size_t emit) { 164 return (emit < 2 ? (emit + 222) : ((emit - 2) ? 244 : 241)); 165 } GetOp30(size_t i)166 static inline uint64_t GetOp30(size_t i) { 167 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 168 } GetEmit30(size_t,size_t emit)169 static inline uint64_t GetEmit30(size_t, size_t emit) { return emit + 245; } GetOp31(size_t i)170 static inline uint64_t GetOp31(size_t i) { 171 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 172 } GetEmit31(size_t,size_t emit)173 static inline uint64_t GetEmit31(size_t, size_t emit) { return emit + 250; } GetOp32(size_t i)174 static inline uint64_t GetOp32(size_t i) { return table32_0_inner_[i]; } GetEmit32(size_t,size_t emit)175 static inline uint64_t GetEmit32(size_t, size_t emit) { 176 return table32_0_emit_[emit]; 177 } GetOp33(size_t i)178 static inline uint64_t GetOp33(size_t i) { return table32_0_inner_[i]; } GetEmit33(size_t,size_t emit)179 static inline uint64_t GetEmit33(size_t, size_t emit) { 180 return (emit < 3 ? (emit + 19) : ((emit - 3) + 23)); 181 } GetOp35(size_t i)182 static inline uint64_t GetOp35(size_t i) { return i; } GetEmit35(size_t,size_t emit)183 static inline uint64_t GetEmit35(size_t, size_t emit) { 184 return ((void)emit, 255); 185 } GetOp34(size_t i)186 static inline uint64_t GetOp34(size_t i) { 187 return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1 188 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1)) 189 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6)); 190 } GetEmit34(size_t,size_t emit)191 static inline uint64_t GetEmit34(size_t, size_t emit) { 192 return (emit < 1 ? (((void)emit, 255)) : ((emit - 1) + 203)); 193 } GetOp37(size_t i)194 static inline uint64_t GetOp37(size_t i) { 195 return (i < 1 ? (((void)i, 0)) : (((void)(i - 1), 1))); 196 } GetEmit37(size_t,size_t emit)197 static inline uint64_t GetEmit37(size_t, size_t emit) { 198 return ((void)emit, 254); 199 } GetOp36(size_t i)200 static inline uint64_t GetOp36(size_t i) { 201 return table36_0_inner_[(i < 1 ? (((void)i, 0)) : ((i - 1)))]; 202 } GetEmit36(size_t,size_t emit)203 static inline uint64_t GetEmit36(size_t, size_t emit) { 204 return (emit < 1 ? (((void)emit, 254)) : ((emit - 1) + 2)); 205 } GetOp39(size_t i)206 static inline uint64_t GetOp39(size_t i) { return table39_0_inner_[i]; } GetEmit39(size_t,size_t emit)207 static inline uint64_t GetEmit39(size_t, size_t emit) { 208 return table39_0_emit_[emit]; 209 } GetOp40(size_t i)210 static inline uint64_t GetOp40(size_t i) { 211 return table40_0_inner_[table40_0_outer_[i]]; 212 } GetEmit40(size_t,size_t emit)213 static inline uint64_t GetEmit40(size_t, size_t emit) { 214 return table39_0_emit_[emit]; 215 } GetOp38(size_t i)216 static inline uint64_t GetOp38(size_t i) { return table38_0_ops_[i]; } GetEmit38(size_t,size_t emit)217 static inline uint64_t GetEmit38(size_t, size_t emit) { 218 return table38_0_emit_[emit]; 219 } GetOp42(size_t i)220 static inline uint64_t GetOp42(size_t i) { return i; } GetEmit42(size_t,size_t emit)221 static inline uint64_t GetEmit42(size_t, size_t emit) { 222 return ((void)emit, 124); 223 } GetOp41(size_t i)224 static inline uint64_t GetOp41(size_t i) { 225 return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1 226 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1)) 227 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6)); 228 } GetEmit41(size_t,size_t emit)229 static inline uint64_t GetEmit41(size_t, size_t emit) { 230 return (emit < 1 ? (((void)emit, 124)) : ((emit - 1) ? 62 : 35)); 231 } 232 233 private: 234 static const uint8_t table2_0_emit_[10]; 235 static const uint8_t table2_0_ops_[32]; 236 static const uint8_t table3_0_emit_[36]; 237 static const uint8_t table3_0_ops_[64]; 238 static const uint8_t table4_0_emit_[22]; 239 static const uint8_t table4_0_ops_[64]; 240 static const uint8_t table4_1_emit_[46]; 241 static const uint8_t table4_1_ops_[64]; 242 static const uint8_t* const table4_emit_[2]; 243 static const uint8_t* const table4_ops_[2]; 244 static const uint8_t table5_0_ops_[128]; 245 static const uint8_t table5_1_emit_[52]; 246 static const uint8_t table5_1_ops_[128]; 247 static const uint8_t* const table5_emit_[2]; 248 static const uint8_t* const table5_ops_[2]; 249 static const uint8_t table6_0_emit_[2]; 250 static const uint8_t table6_0_ops_[32]; 251 static const uint8_t table6_1_emit_[2]; 252 static const uint8_t table6_2_emit_[2]; 253 static const uint8_t table6_3_emit_[2]; 254 static const uint8_t table6_4_emit_[2]; 255 static const uint8_t table6_5_emit_[4]; 256 static const uint8_t table6_5_ops_[32]; 257 static const uint8_t table6_6_emit_[4]; 258 static const uint8_t table6_7_emit_[4]; 259 static const uint8_t table6_8_emit_[4]; 260 static const uint8_t table6_9_emit_[4]; 261 static const uint8_t table6_10_emit_[4]; 262 static const uint8_t table6_11_emit_[6]; 263 static const uint8_t table6_11_ops_[32]; 264 static const uint8_t table6_12_emit_[8]; 265 static const uint8_t table6_12_ops_[32]; 266 static const uint8_t table6_13_emit_[8]; 267 static const uint8_t table6_14_emit_[8]; 268 static const uint8_t table6_15_emit_[10]; 269 static const uint8_t table6_15_ops_[32]; 270 static const uint8_t* const table6_emit_[16]; 271 static const uint8_t* const table6_ops_[16]; 272 static const uint8_t table1_0_emit_[36]; 273 static const uint16_t table1_0_inner_[22]; 274 static const uint8_t table1_0_outer_[64]; 275 static const uint8_t table1_1_emit_[36]; 276 static const uint16_t table1_1_inner_[22]; 277 static const uint8_t table1_2_emit_[36]; 278 static const uint16_t table1_2_inner_[22]; 279 static const uint8_t table1_3_emit_[36]; 280 static const uint16_t table1_3_inner_[22]; 281 static const uint8_t table1_4_emit_[38]; 282 static const uint16_t table1_4_inner_[22]; 283 static const uint16_t table1_5_inner_[4]; 284 static const uint8_t table1_5_outer_[64]; 285 static const uint16_t table1_11_inner_[6]; 286 static const uint8_t table1_11_outer_[64]; 287 static const uint16_t table1_12_inner_[8]; 288 static const uint8_t table1_12_outer_[64]; 289 static const uint8_t table1_15_emit_[15]; 290 static const uint16_t table1_15_inner_[18]; 291 static const uint8_t table1_15_outer_[64]; 292 static const uint8_t* const table1_emit_[16]; 293 static const uint16_t* const table1_inner_[16]; 294 static const uint8_t* const table1_outer_[16]; 295 static const uint8_t table9_0_emit_[6]; 296 static const uint8_t table9_0_inner_[8]; 297 static const uint8_t table10_0_emit_[8]; 298 static const uint8_t table10_0_inner_[10]; 299 static const uint8_t table10_0_outer_[16]; 300 static const uint8_t table11_0_emit_[11]; 301 static const uint8_t table11_0_ops_[32]; 302 static const uint8_t table12_0_ops_[64]; 303 static const uint8_t table13_0_ops_[128]; 304 static const uint8_t table14_0_emit_[40]; 305 static const uint8_t table14_0_ops_[64]; 306 static const uint8_t table14_1_emit_[40]; 307 static const uint8_t table14_2_emit_[40]; 308 static const uint8_t table14_3_emit_[5]; 309 static const uint8_t table14_3_ops_[64]; 310 static const uint8_t* const table14_emit_[4]; 311 static const uint8_t* const table14_ops_[4]; 312 static const uint8_t table15_0_emit_[72]; 313 static const uint16_t table15_0_ops_[64]; 314 static const uint8_t table15_1_emit_[72]; 315 static const uint8_t table15_2_emit_[72]; 316 static const uint8_t table15_3_emit_[72]; 317 static const uint8_t table15_4_emit_[72]; 318 static const uint8_t table15_5_emit_[72]; 319 static const uint8_t table15_6_emit_[40]; 320 static const uint16_t table15_6_ops_[64]; 321 static const uint8_t table15_7_emit_[6]; 322 static const uint16_t table15_7_ops_[64]; 323 static const uint8_t* const table15_emit_[8]; 324 static const uint16_t* const table15_ops_[8]; 325 static const uint8_t table16_0_emit_[44]; 326 static const uint16_t table16_0_ops_[64]; 327 static const uint8_t table16_1_emit_[92]; 328 static const uint16_t table16_1_ops_[64]; 329 static const uint8_t table16_2_emit_[44]; 330 static const uint8_t table16_3_emit_[92]; 331 static const uint8_t table16_4_emit_[44]; 332 static const uint8_t table16_5_emit_[92]; 333 static const uint8_t table16_6_emit_[44]; 334 static const uint8_t table16_7_emit_[92]; 335 static const uint8_t table16_8_emit_[44]; 336 static const uint8_t table16_9_emit_[92]; 337 static const uint8_t table16_10_emit_[44]; 338 static const uint8_t table16_11_emit_[92]; 339 static const uint8_t table16_12_emit_[72]; 340 static const uint8_t table16_13_emit_[72]; 341 static const uint8_t table16_14_emit_[40]; 342 static const uint8_t table16_15_emit_[31]; 343 static const uint16_t table16_15_ops_[64]; 344 static const uint8_t* const table16_emit_[16]; 345 static const uint16_t* const table16_ops_[16]; 346 static const uint8_t table17_0_emit_[16]; 347 static const uint16_t table17_0_ops_[64]; 348 static const uint8_t table17_1_emit_[28]; 349 static const uint16_t table17_1_ops_[64]; 350 static const uint8_t table17_2_emit_[36]; 351 static const uint16_t table17_2_ops_[64]; 352 static const uint8_t table17_3_emit_[68]; 353 static const uint16_t table17_3_ops_[64]; 354 static const uint8_t table17_4_emit_[16]; 355 static const uint8_t table17_5_emit_[28]; 356 static const uint8_t table17_6_emit_[36]; 357 static const uint8_t table17_7_emit_[68]; 358 static const uint8_t table17_8_emit_[16]; 359 static const uint8_t table17_9_emit_[28]; 360 static const uint8_t table17_10_emit_[36]; 361 static const uint8_t table17_11_emit_[68]; 362 static const uint8_t table17_12_emit_[16]; 363 static const uint8_t table17_13_emit_[28]; 364 static const uint8_t table17_14_emit_[36]; 365 static const uint8_t table17_15_emit_[68]; 366 static const uint8_t table17_16_emit_[16]; 367 static const uint8_t table17_17_emit_[28]; 368 static const uint8_t table17_18_emit_[36]; 369 static const uint8_t table17_19_emit_[68]; 370 static const uint8_t table17_20_emit_[16]; 371 static const uint8_t table17_21_emit_[28]; 372 static const uint8_t table17_22_emit_[36]; 373 static const uint8_t table17_23_emit_[68]; 374 static const uint8_t table17_24_emit_[44]; 375 static const uint8_t table17_25_emit_[92]; 376 static const uint8_t table17_26_emit_[44]; 377 static const uint8_t table17_27_emit_[92]; 378 static const uint8_t table17_28_emit_[72]; 379 static const uint8_t table17_29_emit_[72]; 380 static const uint8_t table17_30_emit_[72]; 381 static const uint8_t table17_31_emit_[24]; 382 static const uint16_t table17_31_ops_[64]; 383 static const uint8_t* const table17_emit_[32]; 384 static const uint16_t* const table17_ops_[32]; 385 static const uint16_t table18_0_ops_[128]; 386 static const uint16_t table18_1_ops_[128]; 387 static const uint16_t table18_2_ops_[128]; 388 static const uint16_t table18_3_ops_[128]; 389 static const uint16_t table18_24_ops_[128]; 390 static const uint8_t table18_25_emit_[104]; 391 static const uint16_t table18_25_ops_[128]; 392 static const uint8_t table18_27_emit_[104]; 393 static const uint8_t table18_28_emit_[136]; 394 static const uint16_t table18_28_ops_[128]; 395 static const uint8_t table18_29_emit_[136]; 396 static const uint8_t table18_30_emit_[136]; 397 static const uint8_t table18_31_emit_[50]; 398 static const uint16_t table18_31_ops_[128]; 399 static const uint8_t* const table18_emit_[32]; 400 static const uint16_t* const table18_ops_[32]; 401 static const uint8_t table19_0_emit_[120]; 402 static const uint16_t table19_0_ops_[128]; 403 static const uint8_t table19_1_emit_[120]; 404 static const uint8_t table19_2_emit_[68]; 405 static const uint16_t table19_2_ops_[128]; 406 static const uint8_t table19_3_emit_[16]; 407 static const uint16_t table19_3_ops_[128]; 408 static const uint8_t table19_4_emit_[16]; 409 static const uint8_t table19_5_emit_[20]; 410 static const uint16_t table19_5_ops_[128]; 411 static const uint8_t table19_6_emit_[32]; 412 static const uint16_t table19_6_ops_[128]; 413 static const uint8_t table19_7_emit_[46]; 414 static const uint16_t table19_7_ops_[128]; 415 static const uint8_t table19_8_emit_[120]; 416 static const uint8_t table19_9_emit_[120]; 417 static const uint8_t table19_10_emit_[68]; 418 static const uint8_t table19_11_emit_[16]; 419 static const uint8_t table19_12_emit_[16]; 420 static const uint8_t table19_13_emit_[20]; 421 static const uint8_t table19_14_emit_[32]; 422 static const uint8_t table19_15_emit_[46]; 423 static const uint8_t table19_16_emit_[120]; 424 static const uint8_t table19_17_emit_[120]; 425 static const uint8_t table19_18_emit_[68]; 426 static const uint8_t table19_19_emit_[16]; 427 static const uint8_t table19_20_emit_[16]; 428 static const uint8_t table19_21_emit_[20]; 429 static const uint8_t table19_22_emit_[32]; 430 static const uint8_t table19_23_emit_[46]; 431 static const uint8_t table19_24_emit_[120]; 432 static const uint8_t table19_25_emit_[120]; 433 static const uint8_t table19_26_emit_[68]; 434 static const uint8_t table19_27_emit_[16]; 435 static const uint8_t table19_28_emit_[16]; 436 static const uint8_t table19_29_emit_[20]; 437 static const uint8_t table19_30_emit_[32]; 438 static const uint8_t table19_31_emit_[46]; 439 static const uint8_t table19_32_emit_[120]; 440 static const uint8_t table19_33_emit_[120]; 441 static const uint8_t table19_34_emit_[68]; 442 static const uint8_t table19_35_emit_[16]; 443 static const uint8_t table19_36_emit_[16]; 444 static const uint8_t table19_37_emit_[20]; 445 static const uint8_t table19_38_emit_[32]; 446 static const uint8_t table19_39_emit_[46]; 447 static const uint8_t table19_40_emit_[120]; 448 static const uint8_t table19_41_emit_[120]; 449 static const uint8_t table19_42_emit_[68]; 450 static const uint8_t table19_43_emit_[16]; 451 static const uint8_t table19_44_emit_[16]; 452 static const uint8_t table19_45_emit_[20]; 453 static const uint8_t table19_46_emit_[32]; 454 static const uint8_t table19_47_emit_[46]; 455 static const uint8_t table19_48_emit_[16]; 456 static const uint8_t table19_49_emit_[28]; 457 static const uint16_t table19_49_ops_[128]; 458 static const uint8_t table19_50_emit_[36]; 459 static const uint16_t table19_50_ops_[128]; 460 static const uint8_t table19_51_emit_[68]; 461 static const uint16_t table19_51_ops_[128]; 462 static const uint8_t table19_52_emit_[16]; 463 static const uint8_t table19_53_emit_[28]; 464 static const uint8_t table19_54_emit_[36]; 465 static const uint8_t table19_55_emit_[68]; 466 static const uint8_t table19_56_emit_[44]; 467 static const uint16_t table19_56_ops_[128]; 468 static const uint8_t table19_57_emit_[104]; 469 static const uint16_t table19_57_ops_[128]; 470 static const uint8_t table19_58_emit_[44]; 471 static const uint8_t table19_59_emit_[104]; 472 static const uint8_t table19_60_emit_[44]; 473 static const uint8_t table19_61_emit_[104]; 474 static const uint8_t table19_62_emit_[15]; 475 static const uint16_t table19_62_ops_[128]; 476 static const uint8_t table19_63_emit_[64]; 477 static const uint16_t table19_63_ops_[128]; 478 static const uint8_t* const table19_emit_[64]; 479 static const uint16_t* const table19_ops_[64]; 480 static const uint8_t table20_0_emit_[216]; 481 static const uint16_t table20_0_ops_[128]; 482 static const uint8_t table20_1_emit_[216]; 483 static const uint8_t table20_2_emit_[216]; 484 static const uint8_t table20_3_emit_[216]; 485 static const uint8_t table20_4_emit_[216]; 486 static const uint8_t table20_5_emit_[120]; 487 static const uint16_t table20_5_ops_[128]; 488 static const uint8_t table20_6_emit_[120]; 489 static const uint8_t table20_7_emit_[120]; 490 static const uint8_t table20_8_emit_[120]; 491 static const uint8_t table20_9_emit_[120]; 492 static const uint8_t table20_10_emit_[120]; 493 static const uint8_t table20_11_emit_[68]; 494 static const uint16_t table20_11_ops_[128]; 495 static const uint8_t table20_12_emit_[16]; 496 static const uint16_t table20_12_ops_[128]; 497 static const uint8_t table20_13_emit_[16]; 498 static const uint8_t table20_14_emit_[16]; 499 static const uint8_t table20_15_emit_[36]; 500 static const uint16_t table20_15_ops_[128]; 501 static const uint8_t table20_16_emit_[216]; 502 static const uint8_t table20_17_emit_[216]; 503 static const uint8_t table20_18_emit_[216]; 504 static const uint8_t table20_19_emit_[216]; 505 static const uint8_t table20_20_emit_[216]; 506 static const uint8_t table20_21_emit_[120]; 507 static const uint8_t table20_22_emit_[120]; 508 static const uint8_t table20_23_emit_[120]; 509 static const uint8_t table20_24_emit_[120]; 510 static const uint8_t table20_25_emit_[120]; 511 static const uint8_t table20_26_emit_[120]; 512 static const uint8_t table20_27_emit_[68]; 513 static const uint8_t table20_28_emit_[16]; 514 static const uint8_t table20_29_emit_[16]; 515 static const uint8_t table20_30_emit_[16]; 516 static const uint8_t table20_31_emit_[36]; 517 static const uint8_t table20_32_emit_[216]; 518 static const uint8_t table20_33_emit_[216]; 519 static const uint8_t table20_34_emit_[216]; 520 static const uint8_t table20_35_emit_[216]; 521 static const uint8_t table20_36_emit_[216]; 522 static const uint8_t table20_37_emit_[120]; 523 static const uint8_t table20_38_emit_[120]; 524 static const uint8_t table20_39_emit_[120]; 525 static const uint8_t table20_40_emit_[120]; 526 static const uint8_t table20_41_emit_[120]; 527 static const uint8_t table20_42_emit_[120]; 528 static const uint8_t table20_43_emit_[68]; 529 static const uint8_t table20_44_emit_[16]; 530 static const uint8_t table20_45_emit_[16]; 531 static const uint8_t table20_46_emit_[16]; 532 static const uint8_t table20_47_emit_[36]; 533 static const uint8_t table20_48_emit_[216]; 534 static const uint8_t table20_49_emit_[216]; 535 static const uint8_t table20_50_emit_[216]; 536 static const uint8_t table20_51_emit_[216]; 537 static const uint8_t table20_52_emit_[216]; 538 static const uint8_t table20_53_emit_[120]; 539 static const uint8_t table20_54_emit_[120]; 540 static const uint8_t table20_55_emit_[120]; 541 static const uint8_t table20_56_emit_[120]; 542 static const uint8_t table20_57_emit_[120]; 543 static const uint8_t table20_58_emit_[120]; 544 static const uint8_t table20_59_emit_[68]; 545 static const uint8_t table20_60_emit_[16]; 546 static const uint8_t table20_61_emit_[16]; 547 static const uint8_t table20_62_emit_[16]; 548 static const uint8_t table20_63_emit_[36]; 549 static const uint8_t table20_64_emit_[216]; 550 static const uint8_t table20_65_emit_[216]; 551 static const uint8_t table20_66_emit_[216]; 552 static const uint8_t table20_67_emit_[216]; 553 static const uint8_t table20_68_emit_[216]; 554 static const uint8_t table20_69_emit_[120]; 555 static const uint8_t table20_70_emit_[120]; 556 static const uint8_t table20_71_emit_[120]; 557 static const uint8_t table20_72_emit_[120]; 558 static const uint8_t table20_73_emit_[120]; 559 static const uint8_t table20_74_emit_[120]; 560 static const uint8_t table20_75_emit_[68]; 561 static const uint8_t table20_76_emit_[16]; 562 static const uint8_t table20_77_emit_[16]; 563 static const uint8_t table20_78_emit_[16]; 564 static const uint8_t table20_79_emit_[36]; 565 static const uint8_t table20_80_emit_[216]; 566 static const uint8_t table20_81_emit_[216]; 567 static const uint8_t table20_82_emit_[216]; 568 static const uint8_t table20_83_emit_[216]; 569 static const uint8_t table20_84_emit_[216]; 570 static const uint8_t table20_85_emit_[120]; 571 static const uint8_t table20_86_emit_[120]; 572 static const uint8_t table20_87_emit_[120]; 573 static const uint8_t table20_88_emit_[120]; 574 static const uint8_t table20_89_emit_[120]; 575 static const uint8_t table20_90_emit_[120]; 576 static const uint8_t table20_91_emit_[68]; 577 static const uint8_t table20_92_emit_[16]; 578 static const uint8_t table20_93_emit_[16]; 579 static const uint8_t table20_94_emit_[16]; 580 static const uint8_t table20_95_emit_[36]; 581 static const uint8_t table20_96_emit_[120]; 582 static const uint8_t table20_97_emit_[120]; 583 static const uint8_t table20_98_emit_[68]; 584 static const uint8_t table20_99_emit_[16]; 585 static const uint8_t table20_100_emit_[16]; 586 static const uint8_t table20_101_emit_[20]; 587 static const uint16_t table20_101_ops_[128]; 588 static const uint8_t table20_102_emit_[32]; 589 static const uint16_t table20_102_ops_[128]; 590 static const uint8_t table20_103_emit_[46]; 591 static const uint16_t table20_103_ops_[128]; 592 static const uint8_t table20_104_emit_[120]; 593 static const uint8_t table20_105_emit_[120]; 594 static const uint8_t table20_106_emit_[68]; 595 static const uint8_t table20_107_emit_[16]; 596 static const uint8_t table20_108_emit_[16]; 597 static const uint8_t table20_109_emit_[20]; 598 static const uint8_t table20_110_emit_[32]; 599 static const uint8_t table20_111_emit_[46]; 600 static const uint8_t table20_112_emit_[16]; 601 static const uint8_t table20_113_emit_[28]; 602 static const uint16_t table20_113_ops_[128]; 603 static const uint8_t table20_114_emit_[36]; 604 static const uint16_t table20_114_ops_[128]; 605 static const uint8_t table20_115_emit_[68]; 606 static const uint16_t table20_115_ops_[128]; 607 static const uint8_t table20_116_emit_[16]; 608 static const uint8_t table20_117_emit_[28]; 609 static const uint8_t table20_118_emit_[36]; 610 static const uint8_t table20_119_emit_[68]; 611 static const uint8_t table20_120_emit_[16]; 612 static const uint8_t table20_121_emit_[28]; 613 static const uint8_t table20_122_emit_[36]; 614 static const uint8_t table20_123_emit_[68]; 615 static const uint8_t table20_124_emit_[62]; 616 static const uint16_t table20_124_ops_[128]; 617 static const uint8_t table20_125_emit_[10]; 618 static const uint16_t table20_125_ops_[128]; 619 static const uint8_t table20_126_emit_[23]; 620 static const uint16_t table20_126_ops_[128]; 621 static const uint8_t table20_127_emit_[53]; 622 static const uint16_t table20_127_ops_[128]; 623 static const uint8_t* const table20_emit_[128]; 624 static const uint16_t* const table20_ops_[128]; 625 static const uint8_t table8_0_emit_[1]; 626 static const uint16_t table8_0_ops_[512]; 627 static const uint8_t table8_8_emit_[1]; 628 static const uint8_t table8_16_emit_[1]; 629 static const uint8_t table8_24_emit_[1]; 630 static const uint8_t table8_32_emit_[1]; 631 static const uint8_t table8_40_emit_[1]; 632 static const uint8_t table8_48_emit_[1]; 633 static const uint16_t table8_48_ops_[512]; 634 static const uint8_t table8_52_emit_[1]; 635 static const uint8_t table8_56_emit_[1]; 636 static const uint16_t table8_56_ops_[512]; 637 static const uint8_t table8_58_emit_[1]; 638 static const uint8_t table8_60_emit_[1]; 639 static const uint16_t table8_62_ops_[512]; 640 static const uint8_t table8_63_emit_[80]; 641 static const uint16_t table8_63_ops_[512]; 642 static const uint8_t* const table8_emit_[64]; 643 static const uint16_t* const table8_ops_[64]; 644 static const uint8_t table32_0_emit_[8]; 645 static const uint8_t table32_0_inner_[8]; 646 static const uint8_t table36_0_inner_[7]; 647 static const uint8_t table39_0_emit_[7]; 648 static const uint8_t table39_0_inner_[8]; 649 static const uint8_t table40_0_inner_[9]; 650 static const uint8_t table40_0_outer_[16]; 651 static const uint8_t table38_0_emit_[10]; 652 static const uint8_t table38_0_ops_[32]; 653 }; 654 template <typename F> 655 class HuffDecoder : public HuffDecoderCommon { 656 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)657 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 658 : sink_(sink), begin_(begin), end_(end) {} Run()659 bool Run() { 660 while (!done_) { 661 if (!RefillTo10()) { 662 Done0(); 663 break; 664 } 665 const auto index = (buffer_ >> (buffer_len_ - 10)) & 0x3ff; 666 const auto op = GetOp1(index); 667 const int consumed = op & 15; 668 buffer_len_ -= consumed; 669 const auto emit_ofs = op >> 7; 670 switch ((op >> 4) & 7) { 671 case 0: { 672 sink_(GetEmit1(index, emit_ofs + 0)); 673 sink_(GetEmit1(index, emit_ofs + 1)); 674 break; 675 } 676 case 1: { 677 sink_(GetEmit1(index, emit_ofs + 0)); 678 break; 679 } 680 case 2: { 681 DecodeStep0(); 682 break; 683 } 684 case 3: { 685 DecodeStep18(); 686 break; 687 } 688 case 4: { 689 DecodeStep1(); 690 break; 691 } 692 } 693 } 694 return ok_; 695 } 696 697 private: RefillTo10()698 bool RefillTo10() { 699 switch (buffer_len_) { 700 case 0: { 701 return Read2to8Bytes(); 702 } 703 case 1: { 704 return Read2to7Bytes(); 705 } 706 case 2: 707 case 3: 708 case 4: 709 case 5: 710 case 6: 711 case 7: 712 case 8: { 713 return Read1to7Bytes(); 714 } 715 case 9: { 716 return Read1to6Bytes(); 717 } 718 } 719 return true; 720 } Read2to8Bytes()721 bool Read2to8Bytes() { 722 switch (end_ - begin_) { 723 case 0: 724 case 1: { 725 return false; 726 } 727 case 2: { 728 Fill2(); 729 return true; 730 } 731 case 3: { 732 Fill3(); 733 return true; 734 } 735 case 4: { 736 Fill4(); 737 return true; 738 } 739 case 5: { 740 Fill5(); 741 return true; 742 } 743 case 6: { 744 Fill6(); 745 return true; 746 } 747 case 7: { 748 Fill7(); 749 return true; 750 } 751 default: { 752 Fill8(); 753 return true; 754 } 755 } 756 } Fill2()757 void Fill2() { 758 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 759 (static_cast<uint64_t>(begin_[1]) << 0); 760 begin_ += 2; 761 buffer_len_ += 16; 762 } Fill3()763 void Fill3() { 764 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 765 (static_cast<uint64_t>(begin_[1]) << 8) | 766 (static_cast<uint64_t>(begin_[2]) << 0); 767 begin_ += 3; 768 buffer_len_ += 24; 769 } Fill4()770 void Fill4() { 771 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 772 (static_cast<uint64_t>(begin_[1]) << 16) | 773 (static_cast<uint64_t>(begin_[2]) << 8) | 774 (static_cast<uint64_t>(begin_[3]) << 0); 775 begin_ += 4; 776 buffer_len_ += 32; 777 } Fill5()778 void Fill5() { 779 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 780 (static_cast<uint64_t>(begin_[1]) << 24) | 781 (static_cast<uint64_t>(begin_[2]) << 16) | 782 (static_cast<uint64_t>(begin_[3]) << 8) | 783 (static_cast<uint64_t>(begin_[4]) << 0); 784 begin_ += 5; 785 buffer_len_ += 40; 786 } Fill6()787 void Fill6() { 788 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 789 (static_cast<uint64_t>(begin_[1]) << 32) | 790 (static_cast<uint64_t>(begin_[2]) << 24) | 791 (static_cast<uint64_t>(begin_[3]) << 16) | 792 (static_cast<uint64_t>(begin_[4]) << 8) | 793 (static_cast<uint64_t>(begin_[5]) << 0); 794 begin_ += 6; 795 buffer_len_ += 48; 796 } Fill7()797 void Fill7() { 798 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 799 (static_cast<uint64_t>(begin_[1]) << 40) | 800 (static_cast<uint64_t>(begin_[2]) << 32) | 801 (static_cast<uint64_t>(begin_[3]) << 24) | 802 (static_cast<uint64_t>(begin_[4]) << 16) | 803 (static_cast<uint64_t>(begin_[5]) << 8) | 804 (static_cast<uint64_t>(begin_[6]) << 0); 805 begin_ += 7; 806 buffer_len_ += 56; 807 } Fill8()808 void Fill8() { 809 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 810 (static_cast<uint64_t>(begin_[1]) << 48) | 811 (static_cast<uint64_t>(begin_[2]) << 40) | 812 (static_cast<uint64_t>(begin_[3]) << 32) | 813 (static_cast<uint64_t>(begin_[4]) << 24) | 814 (static_cast<uint64_t>(begin_[5]) << 16) | 815 (static_cast<uint64_t>(begin_[6]) << 8) | 816 (static_cast<uint64_t>(begin_[7]) << 0); 817 begin_ += 8; 818 buffer_len_ += 64; 819 } Read2to7Bytes()820 bool Read2to7Bytes() { 821 switch (end_ - begin_) { 822 case 0: 823 case 1: { 824 return false; 825 } 826 case 2: { 827 Fill2(); 828 return true; 829 } 830 case 3: { 831 Fill3(); 832 return true; 833 } 834 case 4: { 835 Fill4(); 836 return true; 837 } 838 case 5: { 839 Fill5(); 840 return true; 841 } 842 case 6: { 843 Fill6(); 844 return true; 845 } 846 default: { 847 Fill7(); 848 return true; 849 } 850 } 851 } Read1to7Bytes()852 bool Read1to7Bytes() { 853 switch (end_ - begin_) { 854 case 0: { 855 return false; 856 } 857 case 1: { 858 Fill1(); 859 return true; 860 } 861 case 2: { 862 Fill2(); 863 return true; 864 } 865 case 3: { 866 Fill3(); 867 return true; 868 } 869 case 4: { 870 Fill4(); 871 return true; 872 } 873 case 5: { 874 Fill5(); 875 return true; 876 } 877 case 6: { 878 Fill6(); 879 return true; 880 } 881 default: { 882 Fill7(); 883 return true; 884 } 885 } 886 } Fill1()887 void Fill1() { 888 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 889 begin_ += 1; 890 buffer_len_ += 8; 891 } Read1to6Bytes()892 bool Read1to6Bytes() { 893 switch (end_ - begin_) { 894 case 0: { 895 return false; 896 } 897 case 1: { 898 Fill1(); 899 return true; 900 } 901 case 2: { 902 Fill2(); 903 return true; 904 } 905 case 3: { 906 Fill3(); 907 return true; 908 } 909 case 4: { 910 Fill4(); 911 return true; 912 } 913 case 5: { 914 Fill5(); 915 return true; 916 } 917 default: { 918 Fill6(); 919 return true; 920 } 921 } 922 } Done0()923 void Done0() { 924 done_ = true; 925 switch (end_ - begin_) { 926 case 1: { 927 Fill1(); 928 break; 929 } 930 } 931 switch (buffer_len_) { 932 case 1: 933 case 2: 934 case 3: 935 case 4: { 936 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 937 return; 938 } 939 case 5: { 940 const auto index = buffer_ & 31; 941 const auto op = GetOp2(index); 942 switch (op & 3) { 943 case 0: { 944 sink_(GetEmit2(index, (op >> 2) + 0)); 945 break; 946 } 947 case 1: { 948 ok_ = false; 949 break; 950 } 951 } 952 return; 953 } 954 case 6: { 955 const auto index = buffer_ & 63; 956 const auto op = GetOp3(index); 957 switch (op & 3) { 958 case 0: { 959 ok_ = false; 960 break; 961 } 962 case 1: { 963 sink_(GetEmit3(index, (op >> 2) + 0)); 964 break; 965 } 966 } 967 return; 968 } 969 case 7: { 970 const auto index = buffer_ & 127; 971 const auto op = GetOp4(index); 972 switch (op & 3) { 973 case 0: { 974 ok_ = false; 975 break; 976 } 977 case 1: { 978 sink_(GetEmit4(index, (op >> 2) + 0)); 979 break; 980 } 981 } 982 return; 983 } 984 case 8: { 985 const auto index = buffer_ & 255; 986 const auto op = GetOp5(index); 987 switch (op & 3) { 988 case 0: { 989 ok_ = false; 990 break; 991 } 992 case 1: { 993 sink_(GetEmit5(index, (op >> 2) + 0)); 994 break; 995 } 996 } 997 return; 998 } 999 case 9: { 1000 const auto index = buffer_ & 511; 1001 const auto op = GetOp6(index); 1002 switch (op & 3) { 1003 case 0: { 1004 ok_ = false; 1005 break; 1006 } 1007 case 1: { 1008 sink_(GetEmit6(index, (op >> 2) + 0)); 1009 break; 1010 } 1011 } 1012 return; 1013 } 1014 case 0: { 1015 return; 1016 } 1017 } 1018 } DecodeStep0()1019 void DecodeStep0() { 1020 if (!RefillTo1()) { 1021 Done1(); 1022 return; 1023 } 1024 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1025 const auto op = GetOp7(index); 1026 const int consumed = op & 1; 1027 buffer_len_ -= consumed; 1028 const auto emit_ofs = op >> 1; 1029 sink_(GetEmit7(index, emit_ofs + 0)); 1030 } RefillTo1()1031 bool RefillTo1() { 1032 switch (buffer_len_) { 1033 case 0: { 1034 return Read1to8Bytes(); 1035 } 1036 } 1037 return true; 1038 } Read1to8Bytes()1039 bool Read1to8Bytes() { 1040 switch (end_ - begin_) { 1041 case 0: { 1042 return false; 1043 } 1044 case 1: { 1045 Fill1(); 1046 return true; 1047 } 1048 case 2: { 1049 Fill2(); 1050 return true; 1051 } 1052 case 3: { 1053 Fill3(); 1054 return true; 1055 } 1056 case 4: { 1057 Fill4(); 1058 return true; 1059 } 1060 case 5: { 1061 Fill5(); 1062 return true; 1063 } 1064 case 6: { 1065 Fill6(); 1066 return true; 1067 } 1068 case 7: { 1069 Fill7(); 1070 return true; 1071 } 1072 default: { 1073 Fill8(); 1074 return true; 1075 } 1076 } 1077 } Done1()1078 void Done1() { 1079 done_ = true; 1080 ok_ = false; 1081 } DecodeStep1()1082 void DecodeStep1() { 1083 if (!RefillTo15()) { 1084 Done2(); 1085 return; 1086 } 1087 const auto index = (buffer_ >> (buffer_len_ - 15)) & 0x7fff; 1088 const auto op = GetOp8(index); 1089 const int consumed = op & 15; 1090 buffer_len_ -= consumed; 1091 const auto emit_ofs = op >> 9; 1092 switch ((op >> 4) & 31) { 1093 case 0: { 1094 sink_(GetEmit8(index, emit_ofs + 0)); 1095 break; 1096 } 1097 case 1: { 1098 DecodeStep2(); 1099 break; 1100 } 1101 case 2: { 1102 DecodeStep3(); 1103 break; 1104 } 1105 case 3: { 1106 DecodeStep4(); 1107 break; 1108 } 1109 case 4: { 1110 DecodeStep5(); 1111 break; 1112 } 1113 case 5: { 1114 DecodeStep6(); 1115 break; 1116 } 1117 case 6: { 1118 DecodeStep7(); 1119 break; 1120 } 1121 case 7: { 1122 DecodeStep8(); 1123 break; 1124 } 1125 case 8: { 1126 DecodeStep15(); 1127 break; 1128 } 1129 case 9: { 1130 DecodeStep9(); 1131 break; 1132 } 1133 case 10: { 1134 DecodeStep10(); 1135 break; 1136 } 1137 case 11: { 1138 DecodeStep11(); 1139 break; 1140 } 1141 case 12: { 1142 DecodeStep12(); 1143 break; 1144 } 1145 case 13: { 1146 DecodeStep16(); 1147 break; 1148 } 1149 case 14: { 1150 DecodeStep13(); 1151 break; 1152 } 1153 case 15: { 1154 DecodeStep14(); 1155 break; 1156 } 1157 case 16: { 1158 DecodeStep17(); 1159 break; 1160 } 1161 } 1162 } RefillTo15()1163 bool RefillTo15() { 1164 switch (buffer_len_) { 1165 case 0: { 1166 return Read2to8Bytes(); 1167 } 1168 case 1: 1169 case 2: 1170 case 3: 1171 case 4: 1172 case 5: 1173 case 6: { 1174 return Read2to7Bytes(); 1175 } 1176 case 7: 1177 case 8: { 1178 return Read1to7Bytes(); 1179 } 1180 case 9: 1181 case 10: 1182 case 11: 1183 case 12: 1184 case 13: 1185 case 14: { 1186 return Read1to6Bytes(); 1187 } 1188 } 1189 return true; 1190 } Done2()1191 void Done2() { 1192 done_ = true; 1193 switch (end_ - begin_) { 1194 case 1: { 1195 Fill1(); 1196 break; 1197 } 1198 } 1199 switch (buffer_len_) { 1200 case 1: 1201 case 2: { 1202 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1203 return; 1204 } 1205 case 3: { 1206 const auto index = buffer_ & 7; 1207 const auto op = GetOp9(index); 1208 switch (op & 3) { 1209 case 0: { 1210 sink_(GetEmit9(index, (op >> 2) + 0)); 1211 break; 1212 } 1213 case 1: { 1214 ok_ = false; 1215 break; 1216 } 1217 } 1218 return; 1219 } 1220 case 4: { 1221 const auto index = buffer_ & 15; 1222 const auto op = GetOp10(index); 1223 switch (op & 3) { 1224 case 0: { 1225 ok_ = false; 1226 break; 1227 } 1228 case 1: { 1229 sink_(GetEmit10(index, (op >> 2) + 0)); 1230 break; 1231 } 1232 } 1233 return; 1234 } 1235 case 5: { 1236 const auto index = buffer_ & 31; 1237 const auto op = GetOp11(index); 1238 switch (op & 3) { 1239 case 0: { 1240 ok_ = false; 1241 break; 1242 } 1243 case 1: { 1244 sink_(GetEmit11(index, (op >> 2) + 0)); 1245 break; 1246 } 1247 } 1248 return; 1249 } 1250 case 6: { 1251 const auto index = buffer_ & 63; 1252 const auto op = GetOp12(index); 1253 switch (op & 3) { 1254 case 0: { 1255 ok_ = false; 1256 break; 1257 } 1258 case 1: { 1259 sink_(GetEmit12(index, (op >> 2) + 0)); 1260 break; 1261 } 1262 } 1263 return; 1264 } 1265 case 7: { 1266 const auto index = buffer_ & 127; 1267 const auto op = GetOp13(index); 1268 switch (op & 3) { 1269 case 0: { 1270 ok_ = false; 1271 break; 1272 } 1273 case 1: { 1274 sink_(GetEmit13(index, (op >> 2) + 0)); 1275 break; 1276 } 1277 } 1278 return; 1279 } 1280 case 8: { 1281 const auto index = buffer_ & 255; 1282 const auto op = GetOp14(index); 1283 switch (op & 3) { 1284 case 0: { 1285 sink_(GetEmit14(index, (op >> 2) + 0)); 1286 sink_(GetEmit14(index, (op >> 2) + 1)); 1287 break; 1288 } 1289 case 1: { 1290 ok_ = false; 1291 break; 1292 } 1293 case 2: { 1294 sink_(GetEmit14(index, (op >> 2) + 0)); 1295 break; 1296 } 1297 } 1298 return; 1299 } 1300 case 9: { 1301 const auto index = buffer_ & 511; 1302 const auto op = GetOp15(index); 1303 switch (op & 3) { 1304 case 0: { 1305 ok_ = false; 1306 break; 1307 } 1308 case 1: { 1309 sink_(GetEmit15(index, (op >> 2) + 0)); 1310 sink_(GetEmit15(index, (op >> 2) + 1)); 1311 break; 1312 } 1313 case 2: { 1314 sink_(GetEmit15(index, (op >> 2) + 0)); 1315 break; 1316 } 1317 } 1318 return; 1319 } 1320 case 10: { 1321 const auto index = buffer_ & 1023; 1322 const auto op = GetOp16(index); 1323 switch (op & 3) { 1324 case 0: { 1325 ok_ = false; 1326 break; 1327 } 1328 case 1: { 1329 sink_(GetEmit16(index, (op >> 2) + 0)); 1330 sink_(GetEmit16(index, (op >> 2) + 1)); 1331 break; 1332 } 1333 case 2: { 1334 sink_(GetEmit16(index, (op >> 2) + 0)); 1335 break; 1336 } 1337 } 1338 return; 1339 } 1340 case 11: { 1341 const auto index = buffer_ & 2047; 1342 const auto op = GetOp17(index); 1343 switch (op & 3) { 1344 case 0: { 1345 ok_ = false; 1346 break; 1347 } 1348 case 1: { 1349 sink_(GetEmit17(index, (op >> 2) + 0)); 1350 sink_(GetEmit17(index, (op >> 2) + 1)); 1351 break; 1352 } 1353 case 2: { 1354 sink_(GetEmit17(index, (op >> 2) + 0)); 1355 break; 1356 } 1357 } 1358 return; 1359 } 1360 case 12: { 1361 const auto index = buffer_ & 4095; 1362 const auto op = GetOp18(index); 1363 switch (op & 3) { 1364 case 0: { 1365 ok_ = false; 1366 break; 1367 } 1368 case 1: { 1369 sink_(GetEmit18(index, (op >> 2) + 0)); 1370 sink_(GetEmit18(index, (op >> 2) + 1)); 1371 break; 1372 } 1373 case 2: { 1374 sink_(GetEmit18(index, (op >> 2) + 0)); 1375 break; 1376 } 1377 } 1378 return; 1379 } 1380 case 13: { 1381 const auto index = buffer_ & 8191; 1382 const auto op = GetOp19(index); 1383 switch (op & 7) { 1384 case 0: { 1385 sink_(GetEmit19(index, (op >> 3) + 0)); 1386 sink_(GetEmit19(index, (op >> 3) + 1)); 1387 sink_(GetEmit19(index, (op >> 3) + 2)); 1388 break; 1389 } 1390 case 1: { 1391 ok_ = false; 1392 break; 1393 } 1394 case 2: { 1395 sink_(GetEmit19(index, (op >> 3) + 0)); 1396 sink_(GetEmit19(index, (op >> 3) + 1)); 1397 break; 1398 } 1399 case 3: { 1400 sink_(GetEmit19(index, (op >> 3) + 0)); 1401 break; 1402 } 1403 } 1404 return; 1405 } 1406 case 14: { 1407 const auto index = buffer_ & 16383; 1408 const auto op = GetOp20(index); 1409 switch (op & 7) { 1410 case 0: { 1411 ok_ = false; 1412 break; 1413 } 1414 case 1: { 1415 sink_(GetEmit20(index, (op >> 3) + 0)); 1416 sink_(GetEmit20(index, (op >> 3) + 1)); 1417 sink_(GetEmit20(index, (op >> 3) + 2)); 1418 break; 1419 } 1420 case 2: { 1421 sink_(GetEmit20(index, (op >> 3) + 0)); 1422 sink_(GetEmit20(index, (op >> 3) + 1)); 1423 break; 1424 } 1425 case 3: { 1426 sink_(GetEmit20(index, (op >> 3) + 0)); 1427 break; 1428 } 1429 } 1430 return; 1431 } 1432 case 0: { 1433 return; 1434 } 1435 } 1436 } DecodeStep2()1437 void DecodeStep2() { 1438 if (!RefillTo1()) { 1439 Done3(); 1440 return; 1441 } 1442 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1443 const auto op = GetOp21(index); 1444 const int consumed = op & 1; 1445 buffer_len_ -= consumed; 1446 const auto emit_ofs = op >> 1; 1447 sink_(GetEmit21(index, emit_ofs + 0)); 1448 } Done3()1449 void Done3() { 1450 done_ = true; 1451 ok_ = false; 1452 } DecodeStep3()1453 void DecodeStep3() { 1454 if (!RefillTo1()) { 1455 Done4(); 1456 return; 1457 } 1458 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1459 const auto op = GetOp22(index); 1460 const int consumed = op & 1; 1461 buffer_len_ -= consumed; 1462 const auto emit_ofs = op >> 1; 1463 sink_(GetEmit22(index, emit_ofs + 0)); 1464 } Done4()1465 void Done4() { 1466 done_ = true; 1467 ok_ = false; 1468 } DecodeStep4()1469 void DecodeStep4() { 1470 if (!RefillTo1()) { 1471 Done5(); 1472 return; 1473 } 1474 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1475 const auto op = GetOp23(index); 1476 const int consumed = op & 1; 1477 buffer_len_ -= consumed; 1478 const auto emit_ofs = op >> 1; 1479 sink_(GetEmit23(index, emit_ofs + 0)); 1480 } Done5()1481 void Done5() { 1482 done_ = true; 1483 ok_ = false; 1484 } DecodeStep5()1485 void DecodeStep5() { 1486 if (!RefillTo1()) { 1487 Done6(); 1488 return; 1489 } 1490 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1491 const auto op = GetOp24(index); 1492 const int consumed = op & 1; 1493 buffer_len_ -= consumed; 1494 const auto emit_ofs = op >> 1; 1495 sink_(GetEmit24(index, emit_ofs + 0)); 1496 } Done6()1497 void Done6() { 1498 done_ = true; 1499 ok_ = false; 1500 } DecodeStep6()1501 void DecodeStep6() { 1502 if (!RefillTo1()) { 1503 Done7(); 1504 return; 1505 } 1506 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1507 const auto op = GetOp25(index); 1508 const int consumed = op & 1; 1509 buffer_len_ -= consumed; 1510 const auto emit_ofs = op >> 1; 1511 sink_(GetEmit25(index, emit_ofs + 0)); 1512 } Done7()1513 void Done7() { 1514 done_ = true; 1515 ok_ = false; 1516 } DecodeStep7()1517 void DecodeStep7() { 1518 if (!RefillTo1()) { 1519 Done8(); 1520 return; 1521 } 1522 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1523 const auto op = GetOp26(index); 1524 const int consumed = op & 1; 1525 buffer_len_ -= consumed; 1526 const auto emit_ofs = op >> 1; 1527 sink_(GetEmit26(index, emit_ofs + 0)); 1528 } Done8()1529 void Done8() { 1530 done_ = true; 1531 ok_ = false; 1532 } DecodeStep8()1533 void DecodeStep8() { 1534 if (!RefillTo1()) { 1535 Done9(); 1536 return; 1537 } 1538 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1539 const auto op = GetOp27(index); 1540 const int consumed = op & 1; 1541 buffer_len_ -= consumed; 1542 const auto emit_ofs = op >> 1; 1543 sink_(GetEmit27(index, emit_ofs + 0)); 1544 } Done9()1545 void Done9() { 1546 done_ = true; 1547 ok_ = false; 1548 } DecodeStep9()1549 void DecodeStep9() { 1550 if (!RefillTo2()) { 1551 Done10(); 1552 return; 1553 } 1554 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1555 const auto op = GetOp28(index); 1556 const int consumed = op & 3; 1557 buffer_len_ -= consumed; 1558 const auto emit_ofs = op >> 2; 1559 sink_(GetEmit28(index, emit_ofs + 0)); 1560 } RefillTo2()1561 bool RefillTo2() { 1562 switch (buffer_len_) { 1563 case 0: { 1564 return Read1to8Bytes(); 1565 } 1566 case 1: { 1567 return Read1to7Bytes(); 1568 } 1569 } 1570 return true; 1571 } Done10()1572 void Done10() { 1573 done_ = true; 1574 switch (buffer_len_) { 1575 case 1: 1576 case 0: { 1577 ok_ = false; 1578 return; 1579 } 1580 } 1581 } DecodeStep10()1582 void DecodeStep10() { 1583 if (!RefillTo2()) { 1584 Done11(); 1585 return; 1586 } 1587 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1588 const auto op = GetOp29(index); 1589 const int consumed = op & 3; 1590 buffer_len_ -= consumed; 1591 const auto emit_ofs = op >> 2; 1592 sink_(GetEmit29(index, emit_ofs + 0)); 1593 } Done11()1594 void Done11() { 1595 done_ = true; 1596 switch (buffer_len_) { 1597 case 1: 1598 case 0: { 1599 ok_ = false; 1600 return; 1601 } 1602 } 1603 } DecodeStep11()1604 void DecodeStep11() { 1605 if (!RefillTo2()) { 1606 Done12(); 1607 return; 1608 } 1609 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1610 const auto op = GetOp30(index); 1611 const int consumed = op & 3; 1612 buffer_len_ -= consumed; 1613 const auto emit_ofs = op >> 2; 1614 sink_(GetEmit30(index, emit_ofs + 0)); 1615 } Done12()1616 void Done12() { 1617 done_ = true; 1618 switch (buffer_len_) { 1619 case 1: 1620 case 0: { 1621 ok_ = false; 1622 return; 1623 } 1624 } 1625 } DecodeStep12()1626 void DecodeStep12() { 1627 if (!RefillTo2()) { 1628 Done13(); 1629 return; 1630 } 1631 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1632 const auto op = GetOp31(index); 1633 const int consumed = op & 3; 1634 buffer_len_ -= consumed; 1635 const auto emit_ofs = op >> 2; 1636 sink_(GetEmit31(index, emit_ofs + 0)); 1637 } Done13()1638 void Done13() { 1639 done_ = true; 1640 switch (buffer_len_) { 1641 case 1: 1642 case 0: { 1643 ok_ = false; 1644 return; 1645 } 1646 } 1647 } DecodeStep13()1648 void DecodeStep13() { 1649 if (!RefillTo3()) { 1650 Done14(); 1651 return; 1652 } 1653 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1654 const auto op = GetOp32(index); 1655 const int consumed = op & 3; 1656 buffer_len_ -= consumed; 1657 const auto emit_ofs = op >> 2; 1658 sink_(GetEmit32(index, emit_ofs + 0)); 1659 } RefillTo3()1660 bool RefillTo3() { 1661 switch (buffer_len_) { 1662 case 0: { 1663 return Read1to8Bytes(); 1664 } 1665 case 1: 1666 case 2: { 1667 return Read1to7Bytes(); 1668 } 1669 } 1670 return true; 1671 } Done14()1672 void Done14() { 1673 done_ = true; 1674 switch (buffer_len_) { 1675 case 1: 1676 case 2: 1677 case 0: { 1678 ok_ = false; 1679 return; 1680 } 1681 } 1682 } DecodeStep14()1683 void DecodeStep14() { 1684 if (!RefillTo3()) { 1685 Done15(); 1686 return; 1687 } 1688 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1689 const auto op = GetOp33(index); 1690 const int consumed = op & 3; 1691 buffer_len_ -= consumed; 1692 const auto emit_ofs = op >> 2; 1693 sink_(GetEmit33(index, emit_ofs + 0)); 1694 } Done15()1695 void Done15() { 1696 done_ = true; 1697 switch (buffer_len_) { 1698 case 1: 1699 case 2: 1700 case 0: { 1701 ok_ = false; 1702 return; 1703 } 1704 } 1705 } DecodeStep15()1706 void DecodeStep15() { 1707 if (!RefillTo2()) { 1708 Done16(); 1709 return; 1710 } 1711 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1712 const auto op = GetOp34(index); 1713 const int consumed = op & 3; 1714 buffer_len_ -= consumed; 1715 const auto emit_ofs = op >> 2; 1716 sink_(GetEmit34(index, emit_ofs + 0)); 1717 } Done16()1718 void Done16() { 1719 done_ = true; 1720 switch (buffer_len_) { 1721 case 1: { 1722 const auto index = buffer_ & 1; 1723 const auto op = GetOp35(index); 1724 switch (op & 1) { 1725 case 0: { 1726 sink_(GetEmit35(index, (op >> 1) + 0)); 1727 break; 1728 } 1729 case 1: { 1730 ok_ = false; 1731 break; 1732 } 1733 } 1734 return; 1735 } 1736 case 0: { 1737 ok_ = false; 1738 return; 1739 } 1740 } 1741 } DecodeStep16()1742 void DecodeStep16() { 1743 if (!RefillTo3()) { 1744 Done17(); 1745 return; 1746 } 1747 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1748 const auto op = GetOp36(index); 1749 const int consumed = op & 3; 1750 buffer_len_ -= consumed; 1751 const auto emit_ofs = op >> 2; 1752 sink_(GetEmit36(index, emit_ofs + 0)); 1753 } Done17()1754 void Done17() { 1755 done_ = true; 1756 switch (buffer_len_) { 1757 case 1: 1758 case 0: { 1759 ok_ = false; 1760 return; 1761 } 1762 case 2: { 1763 const auto index = buffer_ & 3; 1764 const auto op = GetOp37(index); 1765 switch (op & 1) { 1766 case 0: { 1767 sink_(GetEmit37(index, (op >> 1) + 0)); 1768 break; 1769 } 1770 case 1: { 1771 ok_ = false; 1772 break; 1773 } 1774 } 1775 return; 1776 } 1777 } 1778 } DecodeStep17()1779 void DecodeStep17() { 1780 if (!RefillTo5()) { 1781 Done18(); 1782 return; 1783 } 1784 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 1785 const auto op = GetOp38(index); 1786 const int consumed = op & 7; 1787 buffer_len_ -= consumed; 1788 const auto emit_ofs = op >> 4; 1789 switch ((op >> 3) & 1) { 1790 case 0: { 1791 sink_(GetEmit38(index, emit_ofs + 0)); 1792 break; 1793 } 1794 case 1: { 1795 begin_ = end_; 1796 buffer_len_ = 0; 1797 break; 1798 } 1799 } 1800 } RefillTo5()1801 bool RefillTo5() { 1802 switch (buffer_len_) { 1803 case 0: { 1804 return Read1to8Bytes(); 1805 } 1806 case 1: 1807 case 2: 1808 case 3: 1809 case 4: { 1810 return Read1to7Bytes(); 1811 } 1812 } 1813 return true; 1814 } Done18()1815 void Done18() { 1816 done_ = true; 1817 switch (buffer_len_) { 1818 case 1: 1819 case 2: { 1820 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1821 return; 1822 } 1823 case 3: { 1824 const auto index = buffer_ & 7; 1825 const auto op = GetOp39(index); 1826 switch (op & 1) { 1827 case 0: { 1828 sink_(GetEmit39(index, (op >> 1) + 0)); 1829 break; 1830 } 1831 } 1832 return; 1833 } 1834 case 4: { 1835 const auto index = buffer_ & 15; 1836 const auto op = GetOp40(index); 1837 switch (op & 3) { 1838 case 0: { 1839 ok_ = false; 1840 break; 1841 } 1842 case 1: { 1843 sink_(GetEmit40(index, (op >> 2) + 0)); 1844 break; 1845 } 1846 } 1847 return; 1848 } 1849 case 0: { 1850 return; 1851 } 1852 } 1853 } DecodeStep18()1854 void DecodeStep18() { 1855 if (!RefillTo2()) { 1856 Done19(); 1857 return; 1858 } 1859 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1860 const auto op = GetOp41(index); 1861 const int consumed = op & 3; 1862 buffer_len_ -= consumed; 1863 const auto emit_ofs = op >> 2; 1864 sink_(GetEmit41(index, emit_ofs + 0)); 1865 } Done19()1866 void Done19() { 1867 done_ = true; 1868 switch (buffer_len_) { 1869 case 1: { 1870 const auto index = buffer_ & 1; 1871 const auto op = GetOp42(index); 1872 switch (op & 1) { 1873 case 0: { 1874 sink_(GetEmit42(index, (op >> 1) + 0)); 1875 break; 1876 } 1877 case 1: { 1878 ok_ = false; 1879 break; 1880 } 1881 } 1882 return; 1883 } 1884 case 0: { 1885 ok_ = false; 1886 return; 1887 } 1888 } 1889 } 1890 F sink_; 1891 const uint8_t* begin_; 1892 const uint8_t* const end_; 1893 uint64_t buffer_ = 0; 1894 int buffer_len_ = 0; 1895 bool ok_ = true; 1896 bool done_ = false; 1897 }; 1898 } // namespace geometry_10_15_5 1899 } // namespace grpc_core 1900 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_10_15_5_H 1901