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_13_6_11_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_13_6_11_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_13_6_11 { 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 } GetOp7(size_t i)54 static inline uint64_t GetOp7(size_t i) { 55 return table7_ops_[i >> 6][i & 0x3f]; 56 } GetEmit7(size_t i,size_t emit)57 static inline uint64_t GetEmit7(size_t i, size_t emit) { 58 return table7_emit_[i >> 6][emit]; 59 } GetOp8(size_t i)60 static inline uint64_t GetOp8(size_t i) { 61 return table8_inner_[i >> 6][table8_outer_[i >> 6][i & 0x3f]]; 62 } GetEmit8(size_t i,size_t emit)63 static inline uint64_t GetEmit8(size_t i, size_t emit) { 64 return table8_emit_[i >> 6][emit]; 65 } GetOp9(size_t i)66 static inline uint64_t GetOp9(size_t i) { 67 return table9_ops_[i >> 5][i & 0x1f]; 68 } GetEmit9(size_t i,size_t emit)69 static inline uint64_t GetEmit9(size_t i, size_t emit) { 70 return table9_emit_[i >> 5][emit]; 71 } GetOp1(size_t i)72 static inline uint64_t GetOp1(size_t i) { 73 return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]]; 74 } GetEmit1(size_t i,size_t emit)75 static inline uint64_t GetEmit1(size_t i, size_t emit) { 76 return table1_emit_[i >> 6][emit]; 77 } GetOp10(size_t i)78 static inline uint64_t GetOp10(size_t i) { return i ? 3 : 1; } GetEmit10(size_t,size_t emit)79 static inline uint64_t GetEmit10(size_t, size_t emit) { 80 return emit ? 125 : 94; 81 } GetOp12(size_t i)82 static inline uint64_t GetOp12(size_t i) { 83 return (i < 2 ? (i ? 2 : 0) : ((i - 2) ? 1 : 4)); 84 } GetEmit12(size_t,size_t emit)85 static inline uint64_t GetEmit12(size_t, size_t emit) { 86 return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96)); 87 } GetOp13(size_t i)88 static inline uint64_t GetOp13(size_t i) { 89 return table13_0_inner_[table13_0_outer_[i]]; 90 } GetEmit13(size_t,size_t emit)91 static inline uint64_t GetEmit13(size_t, size_t emit) { 92 return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96)); 93 } GetOp14(size_t i)94 static inline uint64_t GetOp14(size_t i) { 95 return table13_0_inner_[table14_0_outer_[i]]; 96 } GetEmit14(size_t,size_t emit)97 static inline uint64_t GetEmit14(size_t, size_t emit) { 98 return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96)); 99 } GetOp15(size_t i)100 static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; } GetEmit15(size_t,size_t emit)101 static inline uint64_t GetEmit15(size_t, size_t emit) { 102 return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96)); 103 } GetOp11(size_t i)104 static inline uint64_t GetOp11(size_t i) { 105 return table11_0_inner_[(i < 47 ? (i / 16 + 0) : ((i - 47) + 2))]; 106 } GetEmit11(size_t,size_t emit)107 static inline uint64_t GetEmit11(size_t, size_t emit) { 108 return table11_0_emit_[emit]; 109 } GetOp16(size_t i)110 static inline uint64_t GetOp16(size_t i) { return i ? 3 : 1; } GetEmit16(size_t,size_t emit)111 static inline uint64_t GetEmit16(size_t, size_t emit) { 112 return emit ? 130 : 128; 113 } GetOp17(size_t i)114 static inline uint64_t GetOp17(size_t i) { return i ? 3 : 1; } GetEmit17(size_t,size_t emit)115 static inline uint64_t GetEmit17(size_t, size_t emit) { 116 return emit ? 162 : 131; 117 } GetOp18(size_t i)118 static inline uint64_t GetOp18(size_t i) { return i ? 3 : 1; } GetEmit18(size_t,size_t emit)119 static inline uint64_t GetEmit18(size_t, size_t emit) { 120 return emit ? 194 : 184; 121 } GetOp19(size_t i)122 static inline uint64_t GetOp19(size_t i) { return i ? 3 : 1; } GetEmit19(size_t,size_t emit)123 static inline uint64_t GetEmit19(size_t, size_t emit) { 124 return emit ? 226 : 224; 125 } GetOp20(size_t i)126 static inline uint64_t GetOp20(size_t i) { 127 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 128 } GetEmit20(size_t,size_t emit)129 static inline uint64_t GetEmit20(size_t, size_t emit) { 130 return (emit < 2 ? (emit ? 161 : 153) : ((emit - 2) ? 172 : 167)); 131 } GetOp21(size_t i)132 static inline uint64_t GetOp21(size_t i) { 133 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 134 } GetEmit21(size_t,size_t emit)135 static inline uint64_t GetEmit21(size_t, size_t emit) { 136 return (emit < 2 ? (emit + 176) : ((emit - 2) ? 209 : 179)); 137 } GetOp22(size_t i)138 static inline uint64_t GetOp22(size_t i) { 139 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 140 } GetEmit22(size_t,size_t emit)141 static inline uint64_t GetEmit22(size_t, size_t emit) { 142 return (emit < 2 ? (emit + 216) : ((emit - 2) ? 229 : 227)); 143 } GetOp23(size_t i)144 static inline uint64_t GetOp23(size_t i) { return table23_0_inner_[i]; } GetEmit23(size_t,size_t emit)145 static inline uint64_t GetEmit23(size_t, size_t emit) { 146 return table23_0_emit_[emit]; 147 } GetOp24(size_t i)148 static inline uint64_t GetOp24(size_t i) { return table23_0_inner_[i]; } GetEmit24(size_t,size_t emit)149 static inline uint64_t GetEmit24(size_t, size_t emit) { 150 return table24_0_emit_[emit]; 151 } GetOp25(size_t i)152 static inline uint64_t GetOp25(size_t i) { return table25_0_inner_[i]; } GetEmit25(size_t,size_t emit)153 static inline uint64_t GetEmit25(size_t, size_t emit) { 154 return table25_0_emit_[emit]; 155 } GetOp27(size_t i)156 static inline uint64_t GetOp27(size_t i) { 157 return (i < 1 ? (((void)i, 0)) : (((void)(i - 1), 1))); 158 } GetEmit27(size_t,size_t emit)159 static inline uint64_t GetEmit27(size_t, size_t emit) { 160 return ((void)emit, 230); 161 } GetOp26(size_t i)162 static inline uint64_t GetOp26(size_t i) { 163 return table26_0_inner_[(i < 1 ? (((void)i, 0)) : ((i - 1)))]; 164 } GetEmit26(size_t,size_t emit)165 static inline uint64_t GetEmit26(size_t, size_t emit) { 166 return table26_0_emit_[emit]; 167 } GetOp29(size_t i)168 static inline uint64_t GetOp29(size_t i) { 169 return table29_0_inner_[(i < 4 ? (i) : (((void)(i - 4), 4)))]; 170 } GetEmit29(size_t,size_t emit)171 static inline uint64_t GetEmit29(size_t, size_t emit) { 172 return (emit < 2 ? (emit ? 228 : 198) : ((emit - 2) + 232)); 173 } GetOp28(size_t i)174 static inline uint64_t GetOp28(size_t i) { 175 return table28_0_inner_[(i < 7 ? (i / 2 + 0) : ((i - 7) + 3))]; 176 } GetEmit28(size_t,size_t emit)177 static inline uint64_t GetEmit28(size_t, size_t emit) { 178 return table28_0_emit_[emit]; 179 } GetOp31(size_t i)180 static inline uint64_t GetOp31(size_t i) { 181 return table31_0_inner_[(i < 5 ? (i) : ((i - 5) / 10 + 5))]; 182 } GetEmit31(size_t,size_t emit)183 static inline uint64_t GetEmit31(size_t, size_t emit) { 184 return table31_0_emit_[emit]; 185 } GetOp32(size_t i)186 static inline uint64_t GetOp32(size_t i) { return table32_0_ops_[i]; } GetEmit32(size_t,size_t emit)187 static inline uint64_t GetEmit32(size_t, size_t emit) { 188 return table32_0_emit_[emit]; 189 } GetOp33(size_t i)190 static inline uint64_t GetOp33(size_t i) { return table33_0_ops_[i]; } GetEmit33(size_t,size_t emit)191 static inline uint64_t GetEmit33(size_t, size_t emit) { 192 return table33_0_emit_[emit]; 193 } GetOp34(size_t i)194 static inline uint64_t GetOp34(size_t i) { return table34_0_ops_[i]; } GetEmit34(size_t,size_t emit)195 static inline uint64_t GetEmit34(size_t, size_t emit) { 196 return table34_0_emit_[emit]; 197 } GetOp35(size_t i)198 static inline uint64_t GetOp35(size_t i) { return table35_0_ops_[i]; } GetEmit35(size_t,size_t emit)199 static inline uint64_t GetEmit35(size_t, size_t emit) { 200 return table35_0_emit_[emit]; 201 } GetOp36(size_t i)202 static inline uint64_t GetOp36(size_t i) { 203 return table36_ops_[i >> 6][i & 0x3f]; 204 } GetEmit36(size_t i,size_t emit)205 static inline uint64_t GetEmit36(size_t i, size_t emit) { 206 return table36_emit_[i >> 6][emit]; 207 } GetOp37(size_t i)208 static inline uint64_t GetOp37(size_t i) { 209 return table37_ops_[i >> 6][i & 0x3f]; 210 } GetEmit37(size_t i,size_t emit)211 static inline uint64_t GetEmit37(size_t i, size_t emit) { 212 return table37_emit_[i >> 6][emit]; 213 } GetOp30(size_t i)214 static inline uint64_t GetOp30(size_t i) { 215 return table30_ops_[i >> 6][i & 0x3f]; 216 } GetEmit30(size_t i,size_t emit)217 static inline uint64_t GetEmit30(size_t i, size_t emit) { 218 return table30_emit_[i >> 6][emit]; 219 } 220 221 private: 222 static const uint8_t table2_0_emit_[10]; 223 static const uint8_t table2_0_ops_[32]; 224 static const uint8_t table3_0_emit_[36]; 225 static const uint8_t table3_0_ops_[64]; 226 static const uint8_t table4_0_emit_[22]; 227 static const uint8_t table4_0_ops_[64]; 228 static const uint8_t table4_1_emit_[46]; 229 static const uint8_t table4_1_ops_[64]; 230 static const uint8_t* const table4_emit_[2]; 231 static const uint8_t* const table4_ops_[2]; 232 static const uint8_t table5_0_ops_[128]; 233 static const uint8_t table5_1_emit_[52]; 234 static const uint8_t table5_1_ops_[128]; 235 static const uint8_t* const table5_emit_[2]; 236 static const uint8_t* const table5_ops_[2]; 237 static const uint8_t table6_0_emit_[2]; 238 static const uint8_t table6_0_ops_[32]; 239 static const uint8_t table6_1_emit_[2]; 240 static const uint8_t table6_2_emit_[2]; 241 static const uint8_t table6_3_emit_[2]; 242 static const uint8_t table6_4_emit_[2]; 243 static const uint8_t table6_5_emit_[4]; 244 static const uint8_t table6_5_ops_[32]; 245 static const uint8_t table6_6_emit_[4]; 246 static const uint8_t table6_7_emit_[4]; 247 static const uint8_t table6_8_emit_[4]; 248 static const uint8_t table6_9_emit_[4]; 249 static const uint8_t table6_10_emit_[4]; 250 static const uint8_t table6_11_emit_[6]; 251 static const uint8_t table6_11_ops_[32]; 252 static const uint8_t table6_12_emit_[8]; 253 static const uint8_t table6_12_ops_[32]; 254 static const uint8_t table6_13_emit_[8]; 255 static const uint8_t table6_14_emit_[8]; 256 static const uint8_t table6_15_emit_[10]; 257 static const uint8_t table6_15_ops_[32]; 258 static const uint8_t* const table6_emit_[16]; 259 static const uint8_t* const table6_ops_[16]; 260 static const uint8_t table7_0_emit_[36]; 261 static const uint8_t table7_0_ops_[64]; 262 static const uint8_t table7_1_emit_[36]; 263 static const uint8_t table7_1_ops_[64]; 264 static const uint8_t table7_2_emit_[36]; 265 static const uint8_t table7_2_ops_[64]; 266 static const uint8_t table7_3_emit_[36]; 267 static const uint8_t table7_3_ops_[64]; 268 static const uint8_t table7_4_emit_[38]; 269 static const uint8_t table7_4_ops_[64]; 270 static const uint8_t table7_5_ops_[64]; 271 static const uint8_t table7_11_ops_[64]; 272 static const uint8_t table7_12_ops_[64]; 273 static const uint8_t table7_15_emit_[15]; 274 static const uint8_t table7_15_ops_[64]; 275 static const uint8_t* const table7_emit_[16]; 276 static const uint8_t* const table7_ops_[16]; 277 static const uint8_t table8_0_emit_[71]; 278 static const uint16_t table8_0_inner_[38]; 279 static const uint8_t table8_0_outer_[64]; 280 static const uint8_t table8_1_emit_[71]; 281 static const uint16_t table8_1_inner_[38]; 282 static const uint8_t table8_2_emit_[71]; 283 static const uint16_t table8_2_inner_[38]; 284 static const uint8_t table8_3_emit_[71]; 285 static const uint16_t table8_3_inner_[38]; 286 static const uint8_t table8_4_emit_[71]; 287 static const uint16_t table8_4_inner_[38]; 288 static const uint8_t table8_5_emit_[71]; 289 static const uint16_t table8_5_inner_[38]; 290 static const uint8_t table8_6_emit_[71]; 291 static const uint16_t table8_6_inner_[38]; 292 static const uint8_t table8_7_emit_[71]; 293 static const uint16_t table8_7_inner_[38]; 294 static const uint8_t table8_8_emit_[71]; 295 static const uint16_t table8_8_inner_[38]; 296 static const uint8_t table8_9_emit_[71]; 297 static const uint16_t table8_9_inner_[38]; 298 static const uint8_t table8_10_emit_[40]; 299 static const uint16_t table8_10_inner_[23]; 300 static const uint8_t table8_10_outer_[64]; 301 static const uint8_t table8_11_emit_[40]; 302 static const uint8_t table8_12_emit_[40]; 303 static const uint8_t table8_13_emit_[40]; 304 static const uint8_t table8_14_emit_[40]; 305 static const uint8_t table8_15_emit_[40]; 306 static const uint8_t table8_16_emit_[40]; 307 static const uint8_t table8_17_emit_[40]; 308 static const uint8_t table8_18_emit_[40]; 309 static const uint8_t table8_19_emit_[40]; 310 static const uint8_t table8_20_emit_[40]; 311 static const uint8_t table8_21_emit_[40]; 312 static const uint8_t table8_22_emit_[40]; 313 static const uint8_t table8_23_emit_[4]; 314 static const uint16_t table8_23_inner_[5]; 315 static const uint8_t table8_23_outer_[64]; 316 static const uint8_t table8_24_emit_[4]; 317 static const uint8_t table8_25_emit_[4]; 318 static const uint8_t table8_26_emit_[4]; 319 static const uint8_t table8_27_emit_[4]; 320 static const uint8_t table8_28_emit_[4]; 321 static const uint8_t table8_29_emit_[4]; 322 static const uint8_t table8_30_emit_[4]; 323 static const uint8_t table8_31_emit_[14]; 324 static const uint16_t table8_31_inner_[16]; 325 static const uint8_t table8_31_outer_[64]; 326 static const uint8_t* const table8_emit_[32]; 327 static const uint16_t* const table8_inner_[32]; 328 static const uint8_t* const table8_outer_[32]; 329 static const uint8_t table9_0_emit_[15]; 330 static const uint8_t table9_0_ops_[32]; 331 static const uint8_t table9_1_emit_[28]; 332 static const uint8_t table9_1_ops_[32]; 333 static const uint8_t table9_2_emit_[36]; 334 static const uint8_t table9_2_ops_[32]; 335 static const uint8_t table9_3_emit_[56]; 336 static const uint8_t table9_3_ops_[32]; 337 static const uint8_t table9_4_emit_[15]; 338 static const uint8_t table9_4_ops_[32]; 339 static const uint8_t table9_5_emit_[28]; 340 static const uint8_t table9_6_emit_[36]; 341 static const uint8_t table9_7_emit_[56]; 342 static const uint8_t table9_8_emit_[15]; 343 static const uint8_t table9_8_ops_[32]; 344 static const uint8_t table9_9_emit_[28]; 345 static const uint8_t table9_10_emit_[36]; 346 static const uint8_t table9_11_emit_[56]; 347 static const uint8_t table9_12_emit_[15]; 348 static const uint8_t table9_12_ops_[32]; 349 static const uint8_t table9_13_emit_[28]; 350 static const uint8_t table9_14_emit_[36]; 351 static const uint8_t table9_15_emit_[56]; 352 static const uint8_t table9_16_emit_[15]; 353 static const uint8_t table9_16_ops_[32]; 354 static const uint8_t table9_17_emit_[28]; 355 static const uint8_t table9_18_emit_[36]; 356 static const uint8_t table9_19_emit_[56]; 357 static const uint8_t table9_20_emit_[15]; 358 static const uint8_t table9_20_ops_[32]; 359 static const uint8_t table9_21_emit_[28]; 360 static const uint8_t table9_22_emit_[36]; 361 static const uint8_t table9_23_emit_[56]; 362 static const uint8_t table9_24_emit_[15]; 363 static const uint8_t table9_24_ops_[32]; 364 static const uint8_t table9_25_emit_[28]; 365 static const uint8_t table9_26_emit_[36]; 366 static const uint8_t table9_27_emit_[56]; 367 static const uint8_t table9_28_emit_[16]; 368 static const uint8_t table9_28_ops_[32]; 369 static const uint8_t table9_29_emit_[28]; 370 static const uint8_t table9_30_emit_[36]; 371 static const uint8_t table9_31_emit_[56]; 372 static const uint8_t table9_32_emit_[16]; 373 static const uint8_t table9_33_emit_[27]; 374 static const uint8_t table9_33_ops_[32]; 375 static const uint8_t table9_34_emit_[36]; 376 static const uint8_t table9_35_emit_[56]; 377 static const uint8_t table9_36_emit_[16]; 378 static const uint8_t table9_37_emit_[27]; 379 static const uint8_t table9_37_ops_[32]; 380 static const uint8_t table9_38_emit_[36]; 381 static const uint8_t table9_39_emit_[56]; 382 static const uint8_t table9_40_emit_[43]; 383 static const uint8_t table9_40_ops_[32]; 384 static const uint8_t table9_41_emit_[28]; 385 static const uint8_t table9_41_ops_[32]; 386 static const uint8_t table9_42_emit_[43]; 387 static const uint8_t table9_42_ops_[32]; 388 static const uint8_t table9_43_emit_[28]; 389 static const uint8_t table9_44_emit_[43]; 390 static const uint8_t table9_44_ops_[32]; 391 static const uint8_t table9_45_emit_[28]; 392 static const uint8_t table9_46_emit_[43]; 393 static const uint8_t table9_46_ops_[32]; 394 static const uint8_t table9_47_emit_[28]; 395 static const uint8_t table9_48_emit_[43]; 396 static const uint8_t table9_48_ops_[32]; 397 static const uint8_t table9_49_emit_[28]; 398 static const uint8_t table9_50_emit_[43]; 399 static const uint8_t table9_50_ops_[32]; 400 static const uint8_t table9_51_emit_[28]; 401 static const uint8_t table9_52_emit_[43]; 402 static const uint8_t table9_52_ops_[32]; 403 static const uint8_t table9_53_emit_[28]; 404 static const uint8_t table9_54_emit_[43]; 405 static const uint8_t table9_54_ops_[32]; 406 static const uint8_t table9_55_emit_[28]; 407 static const uint8_t table9_56_emit_[43]; 408 static const uint8_t table9_56_ops_[32]; 409 static const uint8_t table9_57_emit_[28]; 410 static const uint8_t table9_58_emit_[43]; 411 static const uint8_t table9_58_ops_[32]; 412 static const uint8_t table9_59_emit_[28]; 413 static const uint8_t table9_60_emit_[43]; 414 static const uint8_t table9_60_ops_[32]; 415 static const uint8_t table9_61_emit_[28]; 416 static const uint8_t table9_62_emit_[44]; 417 static const uint8_t table9_62_ops_[32]; 418 static const uint8_t table9_63_emit_[28]; 419 static const uint8_t table9_64_emit_[44]; 420 static const uint8_t table9_65_emit_[27]; 421 static const uint8_t table9_65_ops_[32]; 422 static const uint8_t table9_66_emit_[44]; 423 static const uint8_t table9_67_emit_[27]; 424 static const uint8_t table9_67_ops_[32]; 425 static const uint8_t table9_68_emit_[44]; 426 static const uint8_t table9_69_emit_[27]; 427 static const uint8_t table9_69_ops_[32]; 428 static const uint8_t table9_70_emit_[44]; 429 static const uint8_t table9_71_emit_[27]; 430 static const uint8_t table9_71_ops_[32]; 431 static const uint8_t table9_72_emit_[44]; 432 static const uint8_t table9_73_emit_[27]; 433 static const uint8_t table9_73_ops_[32]; 434 static const uint8_t table9_74_emit_[44]; 435 static const uint8_t table9_75_emit_[27]; 436 static const uint8_t table9_75_ops_[32]; 437 static const uint8_t table9_76_emit_[44]; 438 static const uint8_t table9_77_emit_[27]; 439 static const uint8_t table9_77_ops_[32]; 440 static const uint8_t table9_78_emit_[44]; 441 static const uint8_t table9_79_emit_[27]; 442 static const uint8_t table9_79_ops_[32]; 443 static const uint8_t table9_80_emit_[44]; 444 static const uint8_t table9_81_emit_[27]; 445 static const uint8_t table9_81_ops_[32]; 446 static const uint8_t table9_82_emit_[44]; 447 static const uint8_t table9_83_emit_[27]; 448 static const uint8_t table9_83_ops_[32]; 449 static const uint8_t table9_84_emit_[44]; 450 static const uint8_t table9_85_emit_[27]; 451 static const uint8_t table9_85_ops_[32]; 452 static const uint8_t table9_86_emit_[44]; 453 static const uint8_t table9_87_emit_[27]; 454 static const uint8_t table9_87_ops_[32]; 455 static const uint8_t table9_88_emit_[44]; 456 static const uint8_t table9_89_emit_[27]; 457 static const uint8_t table9_89_ops_[32]; 458 static const uint8_t table9_90_emit_[44]; 459 static const uint8_t table9_91_emit_[28]; 460 static const uint8_t table9_92_emit_[20]; 461 static const uint8_t table9_92_ops_[32]; 462 static const uint8_t table9_93_emit_[20]; 463 static const uint8_t table9_94_emit_[20]; 464 static const uint8_t table9_95_emit_[20]; 465 static const uint8_t table9_96_emit_[20]; 466 static const uint8_t table9_97_emit_[20]; 467 static const uint8_t table9_98_emit_[20]; 468 static const uint8_t table9_99_emit_[20]; 469 static const uint8_t table9_100_emit_[20]; 470 static const uint8_t table9_101_emit_[20]; 471 static const uint8_t table9_102_emit_[20]; 472 static const uint8_t table9_103_emit_[20]; 473 static const uint8_t table9_104_emit_[20]; 474 static const uint8_t table9_105_emit_[20]; 475 static const uint8_t table9_106_emit_[20]; 476 static const uint8_t table9_107_emit_[20]; 477 static const uint8_t table9_108_emit_[20]; 478 static const uint8_t table9_109_emit_[20]; 479 static const uint8_t table9_110_emit_[20]; 480 static const uint8_t table9_111_emit_[20]; 481 static const uint8_t table9_112_emit_[20]; 482 static const uint8_t table9_113_emit_[20]; 483 static const uint8_t table9_114_emit_[20]; 484 static const uint8_t table9_115_emit_[20]; 485 static const uint8_t table9_116_emit_[20]; 486 static const uint8_t table9_117_emit_[20]; 487 static const uint8_t table9_118_emit_[20]; 488 static const uint8_t table9_119_emit_[20]; 489 static const uint8_t table9_120_emit_[20]; 490 static const uint8_t table9_121_emit_[20]; 491 static const uint8_t table9_122_emit_[20]; 492 static const uint8_t table9_123_emit_[20]; 493 static const uint8_t table9_124_emit_[2]; 494 static const uint8_t table9_124_ops_[32]; 495 static const uint8_t table9_125_emit_[2]; 496 static const uint8_t table9_126_emit_[2]; 497 static const uint8_t table9_127_emit_[10]; 498 static const uint8_t table9_127_ops_[32]; 499 static const uint8_t* const table9_emit_[128]; 500 static const uint8_t* const table9_ops_[128]; 501 static const uint16_t table1_0_inner_[8]; 502 static const uint8_t table1_0_outer_[64]; 503 static const uint16_t table1_1_inner_[14]; 504 static const uint8_t table1_1_outer_[64]; 505 static const uint16_t table1_2_inner_[18]; 506 static const uint8_t table1_2_outer_[64]; 507 static const uint8_t table1_3_emit_[68]; 508 static const uint16_t table1_3_inner_[35]; 509 static const uint8_t table1_3_outer_[64]; 510 static const uint16_t table1_4_inner_[8]; 511 static const uint8_t table1_7_emit_[68]; 512 static const uint16_t table1_8_inner_[8]; 513 static const uint8_t table1_11_emit_[68]; 514 static const uint16_t table1_12_inner_[8]; 515 static const uint8_t table1_15_emit_[68]; 516 static const uint16_t table1_16_inner_[8]; 517 static const uint8_t table1_19_emit_[68]; 518 static const uint16_t table1_20_inner_[8]; 519 static const uint8_t table1_23_emit_[68]; 520 static const uint16_t table1_24_inner_[8]; 521 static const uint8_t table1_27_emit_[68]; 522 static const uint16_t table1_28_inner_[8]; 523 static const uint8_t table1_31_emit_[68]; 524 static const uint16_t table1_33_inner_[14]; 525 static const uint8_t table1_35_emit_[68]; 526 static const uint16_t table1_37_inner_[14]; 527 static const uint8_t table1_39_emit_[68]; 528 static const uint16_t table1_40_inner_[22]; 529 static const uint8_t table1_40_outer_[64]; 530 static const uint8_t table1_41_emit_[92]; 531 static const uint16_t table1_41_inner_[47]; 532 static const uint8_t table1_41_outer_[64]; 533 static const uint16_t table1_42_inner_[22]; 534 static const uint8_t table1_43_emit_[92]; 535 static const uint16_t table1_44_inner_[22]; 536 static const uint8_t table1_45_emit_[92]; 537 static const uint16_t table1_46_inner_[22]; 538 static const uint8_t table1_47_emit_[92]; 539 static const uint16_t table1_48_inner_[22]; 540 static const uint8_t table1_49_emit_[92]; 541 static const uint16_t table1_50_inner_[22]; 542 static const uint8_t table1_51_emit_[92]; 543 static const uint16_t table1_52_inner_[22]; 544 static const uint8_t table1_53_emit_[92]; 545 static const uint16_t table1_54_inner_[22]; 546 static const uint8_t table1_55_emit_[92]; 547 static const uint16_t table1_56_inner_[22]; 548 static const uint8_t table1_57_emit_[92]; 549 static const uint16_t table1_58_inner_[22]; 550 static const uint8_t table1_59_emit_[92]; 551 static const uint16_t table1_60_inner_[22]; 552 static const uint8_t table1_61_emit_[92]; 553 static const uint16_t table1_62_inner_[22]; 554 static const uint8_t table1_63_emit_[92]; 555 static const uint8_t table1_65_emit_[91]; 556 static const uint16_t table1_65_inner_[47]; 557 static const uint8_t table1_67_emit_[91]; 558 static const uint16_t table1_67_inner_[47]; 559 static const uint8_t table1_69_emit_[91]; 560 static const uint16_t table1_69_inner_[47]; 561 static const uint8_t table1_71_emit_[91]; 562 static const uint16_t table1_71_inner_[47]; 563 static const uint8_t table1_73_emit_[91]; 564 static const uint16_t table1_73_inner_[47]; 565 static const uint8_t table1_75_emit_[91]; 566 static const uint16_t table1_75_inner_[47]; 567 static const uint8_t table1_77_emit_[91]; 568 static const uint16_t table1_77_inner_[47]; 569 static const uint8_t table1_79_emit_[91]; 570 static const uint16_t table1_79_inner_[47]; 571 static const uint8_t table1_81_emit_[91]; 572 static const uint16_t table1_81_inner_[47]; 573 static const uint8_t table1_83_emit_[91]; 574 static const uint16_t table1_83_inner_[47]; 575 static const uint8_t table1_85_emit_[91]; 576 static const uint16_t table1_85_inner_[47]; 577 static const uint8_t table1_87_emit_[91]; 578 static const uint16_t table1_87_inner_[47]; 579 static const uint8_t table1_89_emit_[91]; 580 static const uint16_t table1_89_inner_[47]; 581 static const uint8_t table1_91_emit_[91]; 582 static const uint16_t table1_91_inner_[47]; 583 static const uint8_t table1_92_emit_[72]; 584 static const uint16_t table1_92_inner_[37]; 585 static const uint8_t table1_92_outer_[64]; 586 static const uint8_t table1_93_emit_[72]; 587 static const uint8_t table1_94_emit_[72]; 588 static const uint8_t table1_95_emit_[72]; 589 static const uint8_t table1_96_emit_[72]; 590 static const uint8_t table1_97_emit_[72]; 591 static const uint8_t table1_98_emit_[72]; 592 static const uint8_t table1_99_emit_[72]; 593 static const uint8_t table1_100_emit_[72]; 594 static const uint8_t table1_101_emit_[72]; 595 static const uint8_t table1_102_emit_[72]; 596 static const uint8_t table1_103_emit_[72]; 597 static const uint8_t table1_104_emit_[72]; 598 static const uint8_t table1_105_emit_[72]; 599 static const uint8_t table1_106_emit_[72]; 600 static const uint8_t table1_107_emit_[72]; 601 static const uint8_t table1_108_emit_[72]; 602 static const uint8_t table1_109_emit_[72]; 603 static const uint8_t table1_110_emit_[72]; 604 static const uint8_t table1_111_emit_[72]; 605 static const uint8_t table1_112_emit_[72]; 606 static const uint8_t table1_113_emit_[72]; 607 static const uint8_t table1_114_emit_[72]; 608 static const uint8_t table1_115_emit_[72]; 609 static const uint8_t table1_116_emit_[72]; 610 static const uint8_t table1_117_emit_[72]; 611 static const uint8_t table1_118_emit_[72]; 612 static const uint8_t table1_119_emit_[72]; 613 static const uint8_t table1_120_emit_[72]; 614 static const uint8_t table1_121_emit_[72]; 615 static const uint8_t table1_122_emit_[72]; 616 static const uint8_t table1_123_emit_[72]; 617 static const uint8_t table1_124_emit_[40]; 618 static const uint16_t table1_124_inner_[22]; 619 static const uint8_t table1_124_outer_[64]; 620 static const uint8_t table1_125_emit_[40]; 621 static const uint8_t table1_126_emit_[40]; 622 static const uint8_t table1_127_emit_[16]; 623 static const uint16_t table1_127_inner_[18]; 624 static const uint8_t table1_127_outer_[64]; 625 static const uint8_t* const table1_emit_[128]; 626 static const uint16_t* const table1_inner_[128]; 627 static const uint8_t* const table1_outer_[128]; 628 static const uint8_t table13_0_inner_[5]; 629 static const uint8_t table13_0_outer_[8]; 630 static const uint8_t table14_0_outer_[16]; 631 static const uint8_t table15_0_ops_[32]; 632 static const uint8_t table11_0_emit_[6]; 633 static const uint16_t table11_0_inner_[19]; 634 static const uint8_t table23_0_emit_[8]; 635 static const uint8_t table23_0_inner_[8]; 636 static const uint8_t table24_0_emit_[8]; 637 static const uint8_t table25_0_emit_[16]; 638 static const uint8_t table25_0_inner_[16]; 639 static const uint8_t table26_0_emit_[7]; 640 static const uint8_t table26_0_inner_[7]; 641 static const uint8_t table29_0_inner_[5]; 642 static const uint8_t table28_0_emit_[12]; 643 static const uint8_t table28_0_inner_[12]; 644 static const uint8_t table31_0_emit_[5]; 645 static const uint8_t table31_0_inner_[7]; 646 static const uint8_t table32_0_emit_[17]; 647 static const uint8_t table32_0_ops_[32]; 648 static const uint8_t table33_0_emit_[21]; 649 static const uint8_t table33_0_ops_[64]; 650 static const uint8_t table34_0_emit_[36]; 651 static const uint8_t table34_0_ops_[128]; 652 static const uint8_t table35_0_emit_[55]; 653 static const uint8_t table35_0_ops_[256]; 654 static const uint8_t table36_0_emit_[40]; 655 static const uint8_t table36_0_ops_[64]; 656 static const uint8_t table36_1_emit_[40]; 657 static const uint8_t table36_2_emit_[22]; 658 static const uint8_t table36_2_ops_[64]; 659 static const uint8_t table36_3_emit_[4]; 660 static const uint8_t table36_4_emit_[4]; 661 static const uint8_t table36_5_emit_[6]; 662 static const uint8_t table36_6_emit_[17]; 663 static const uint8_t table36_6_ops_[64]; 664 static const uint8_t table36_7_emit_[46]; 665 static const uint8_t table36_7_ops_[64]; 666 static const uint8_t* const table36_emit_[8]; 667 static const uint8_t* const table36_ops_[8]; 668 static const uint8_t table37_0_emit_[72]; 669 static const uint16_t table37_0_ops_[64]; 670 static const uint8_t table37_1_emit_[72]; 671 static const uint8_t table37_2_emit_[72]; 672 static const uint8_t table37_3_emit_[72]; 673 static const uint8_t table37_4_emit_[72]; 674 static const uint8_t table37_5_emit_[40]; 675 static const uint16_t table37_5_ops_[64]; 676 static const uint8_t table37_6_emit_[40]; 677 static const uint8_t table37_7_emit_[40]; 678 static const uint8_t table37_8_emit_[40]; 679 static const uint8_t table37_9_emit_[40]; 680 static const uint8_t table37_10_emit_[40]; 681 static const uint8_t table37_11_emit_[4]; 682 static const uint16_t table37_11_ops_[64]; 683 static const uint8_t table37_12_emit_[8]; 684 static const uint16_t table37_12_ops_[64]; 685 static const uint8_t table37_13_emit_[9]; 686 static const uint16_t table37_13_ops_[64]; 687 static const uint8_t table37_14_emit_[16]; 688 static const uint16_t table37_14_ops_[64]; 689 static const uint8_t table37_15_emit_[30]; 690 static const uint16_t table37_15_ops_[64]; 691 static const uint8_t* const table37_emit_[16]; 692 static const uint16_t* const table37_ops_[16]; 693 static const uint8_t table30_0_emit_[1]; 694 static const uint16_t table30_0_ops_[64]; 695 static const uint8_t table30_2_emit_[1]; 696 static const uint8_t table30_4_emit_[1]; 697 static const uint8_t table30_6_emit_[1]; 698 static const uint8_t table30_8_emit_[1]; 699 static const uint8_t table30_10_emit_[1]; 700 static const uint16_t table30_10_ops_[64]; 701 static const uint8_t table30_11_emit_[1]; 702 static const uint8_t table30_12_emit_[1]; 703 static const uint8_t table30_13_emit_[1]; 704 static const uint8_t table30_14_emit_[1]; 705 static const uint8_t table30_15_emit_[1]; 706 static const uint8_t table30_16_emit_[1]; 707 static const uint8_t table30_17_emit_[1]; 708 static const uint8_t table30_18_emit_[1]; 709 static const uint8_t table30_19_emit_[1]; 710 static const uint8_t table30_20_emit_[1]; 711 static const uint8_t table30_21_emit_[1]; 712 static const uint8_t table30_22_emit_[2]; 713 static const uint16_t table30_22_ops_[64]; 714 static const uint8_t table30_23_emit_[2]; 715 static const uint8_t table30_24_emit_[4]; 716 static const uint16_t table30_24_ops_[64]; 717 static const uint8_t table30_25_emit_[4]; 718 static const uint8_t table30_26_emit_[4]; 719 static const uint8_t table30_27_emit_[5]; 720 static const uint16_t table30_27_ops_[64]; 721 static const uint8_t table30_28_emit_[8]; 722 static const uint16_t table30_28_ops_[64]; 723 static const uint8_t table30_29_emit_[8]; 724 static const uint8_t table30_30_emit_[15]; 725 static const uint16_t table30_30_ops_[64]; 726 static const uint8_t table30_31_emit_[18]; 727 static const uint16_t table30_31_ops_[64]; 728 static const uint8_t* const table30_emit_[32]; 729 static const uint16_t* const table30_ops_[32]; 730 }; 731 template <typename F> 732 class HuffDecoder : public HuffDecoderCommon { 733 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)734 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 735 : sink_(sink), begin_(begin), end_(end) {} Run()736 bool Run() { 737 while (!done_) { 738 if (!RefillTo13()) { 739 Done0(); 740 break; 741 } 742 const auto index = (buffer_ >> (buffer_len_ - 13)) & 0x1fff; 743 const auto op = GetOp1(index); 744 const int consumed = op & 15; 745 buffer_len_ -= consumed; 746 const auto emit_ofs = op >> 6; 747 switch ((op >> 4) & 3) { 748 case 0: { 749 sink_(GetEmit1(index, emit_ofs + 0)); 750 sink_(GetEmit1(index, emit_ofs + 1)); 751 break; 752 } 753 case 1: { 754 sink_(GetEmit1(index, emit_ofs + 0)); 755 break; 756 } 757 case 2: { 758 DecodeStep0(); 759 break; 760 } 761 case 3: { 762 DecodeStep1(); 763 break; 764 } 765 } 766 } 767 return ok_; 768 } 769 770 private: RefillTo13()771 bool RefillTo13() { 772 switch (buffer_len_) { 773 case 0: { 774 return Read2to8Bytes(); 775 } 776 case 1: 777 case 2: 778 case 3: 779 case 4: { 780 return Read2to7Bytes(); 781 } 782 case 5: 783 case 6: 784 case 7: 785 case 8: { 786 return Read1to7Bytes(); 787 } 788 case 9: 789 case 10: 790 case 11: 791 case 12: { 792 return Read1to6Bytes(); 793 } 794 } 795 return true; 796 } Read2to8Bytes()797 bool Read2to8Bytes() { 798 switch (end_ - begin_) { 799 case 0: 800 case 1: { 801 return false; 802 } 803 case 2: { 804 Fill2(); 805 return true; 806 } 807 case 3: { 808 Fill3(); 809 return true; 810 } 811 case 4: { 812 Fill4(); 813 return true; 814 } 815 case 5: { 816 Fill5(); 817 return true; 818 } 819 case 6: { 820 Fill6(); 821 return true; 822 } 823 case 7: { 824 Fill7(); 825 return true; 826 } 827 default: { 828 Fill8(); 829 return true; 830 } 831 } 832 } Fill2()833 void Fill2() { 834 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 835 (static_cast<uint64_t>(begin_[1]) << 0); 836 begin_ += 2; 837 buffer_len_ += 16; 838 } Fill3()839 void Fill3() { 840 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 841 (static_cast<uint64_t>(begin_[1]) << 8) | 842 (static_cast<uint64_t>(begin_[2]) << 0); 843 begin_ += 3; 844 buffer_len_ += 24; 845 } Fill4()846 void Fill4() { 847 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 848 (static_cast<uint64_t>(begin_[1]) << 16) | 849 (static_cast<uint64_t>(begin_[2]) << 8) | 850 (static_cast<uint64_t>(begin_[3]) << 0); 851 begin_ += 4; 852 buffer_len_ += 32; 853 } Fill5()854 void Fill5() { 855 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 856 (static_cast<uint64_t>(begin_[1]) << 24) | 857 (static_cast<uint64_t>(begin_[2]) << 16) | 858 (static_cast<uint64_t>(begin_[3]) << 8) | 859 (static_cast<uint64_t>(begin_[4]) << 0); 860 begin_ += 5; 861 buffer_len_ += 40; 862 } Fill6()863 void Fill6() { 864 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 865 (static_cast<uint64_t>(begin_[1]) << 32) | 866 (static_cast<uint64_t>(begin_[2]) << 24) | 867 (static_cast<uint64_t>(begin_[3]) << 16) | 868 (static_cast<uint64_t>(begin_[4]) << 8) | 869 (static_cast<uint64_t>(begin_[5]) << 0); 870 begin_ += 6; 871 buffer_len_ += 48; 872 } Fill7()873 void Fill7() { 874 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 875 (static_cast<uint64_t>(begin_[1]) << 40) | 876 (static_cast<uint64_t>(begin_[2]) << 32) | 877 (static_cast<uint64_t>(begin_[3]) << 24) | 878 (static_cast<uint64_t>(begin_[4]) << 16) | 879 (static_cast<uint64_t>(begin_[5]) << 8) | 880 (static_cast<uint64_t>(begin_[6]) << 0); 881 begin_ += 7; 882 buffer_len_ += 56; 883 } Fill8()884 void Fill8() { 885 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 886 (static_cast<uint64_t>(begin_[1]) << 48) | 887 (static_cast<uint64_t>(begin_[2]) << 40) | 888 (static_cast<uint64_t>(begin_[3]) << 32) | 889 (static_cast<uint64_t>(begin_[4]) << 24) | 890 (static_cast<uint64_t>(begin_[5]) << 16) | 891 (static_cast<uint64_t>(begin_[6]) << 8) | 892 (static_cast<uint64_t>(begin_[7]) << 0); 893 begin_ += 8; 894 buffer_len_ += 64; 895 } Read2to7Bytes()896 bool Read2to7Bytes() { 897 switch (end_ - begin_) { 898 case 0: 899 case 1: { 900 return false; 901 } 902 case 2: { 903 Fill2(); 904 return true; 905 } 906 case 3: { 907 Fill3(); 908 return true; 909 } 910 case 4: { 911 Fill4(); 912 return true; 913 } 914 case 5: { 915 Fill5(); 916 return true; 917 } 918 case 6: { 919 Fill6(); 920 return true; 921 } 922 default: { 923 Fill7(); 924 return true; 925 } 926 } 927 } Read1to7Bytes()928 bool Read1to7Bytes() { 929 switch (end_ - begin_) { 930 case 0: { 931 return false; 932 } 933 case 1: { 934 Fill1(); 935 return true; 936 } 937 case 2: { 938 Fill2(); 939 return true; 940 } 941 case 3: { 942 Fill3(); 943 return true; 944 } 945 case 4: { 946 Fill4(); 947 return true; 948 } 949 case 5: { 950 Fill5(); 951 return true; 952 } 953 case 6: { 954 Fill6(); 955 return true; 956 } 957 default: { 958 Fill7(); 959 return true; 960 } 961 } 962 } Fill1()963 void Fill1() { 964 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 965 begin_ += 1; 966 buffer_len_ += 8; 967 } Read1to6Bytes()968 bool Read1to6Bytes() { 969 switch (end_ - begin_) { 970 case 0: { 971 return false; 972 } 973 case 1: { 974 Fill1(); 975 return true; 976 } 977 case 2: { 978 Fill2(); 979 return true; 980 } 981 case 3: { 982 Fill3(); 983 return true; 984 } 985 case 4: { 986 Fill4(); 987 return true; 988 } 989 case 5: { 990 Fill5(); 991 return true; 992 } 993 default: { 994 Fill6(); 995 return true; 996 } 997 } 998 } Done0()999 void Done0() { 1000 done_ = true; 1001 switch (end_ - begin_) { 1002 case 1: { 1003 Fill1(); 1004 break; 1005 } 1006 } 1007 switch (buffer_len_) { 1008 case 1: 1009 case 2: 1010 case 3: 1011 case 4: { 1012 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1013 return; 1014 } 1015 case 5: { 1016 const auto index = buffer_ & 31; 1017 const auto op = GetOp2(index); 1018 switch (op & 3) { 1019 case 0: { 1020 sink_(GetEmit2(index, (op >> 2) + 0)); 1021 break; 1022 } 1023 case 1: { 1024 ok_ = false; 1025 break; 1026 } 1027 } 1028 return; 1029 } 1030 case 6: { 1031 const auto index = buffer_ & 63; 1032 const auto op = GetOp3(index); 1033 switch (op & 3) { 1034 case 0: { 1035 ok_ = false; 1036 break; 1037 } 1038 case 1: { 1039 sink_(GetEmit3(index, (op >> 2) + 0)); 1040 break; 1041 } 1042 } 1043 return; 1044 } 1045 case 7: { 1046 const auto index = buffer_ & 127; 1047 const auto op = GetOp4(index); 1048 switch (op & 3) { 1049 case 0: { 1050 ok_ = false; 1051 break; 1052 } 1053 case 1: { 1054 sink_(GetEmit4(index, (op >> 2) + 0)); 1055 break; 1056 } 1057 } 1058 return; 1059 } 1060 case 8: { 1061 const auto index = buffer_ & 255; 1062 const auto op = GetOp5(index); 1063 switch (op & 3) { 1064 case 0: { 1065 ok_ = false; 1066 break; 1067 } 1068 case 1: { 1069 sink_(GetEmit5(index, (op >> 2) + 0)); 1070 break; 1071 } 1072 } 1073 return; 1074 } 1075 case 9: { 1076 const auto index = buffer_ & 511; 1077 const auto op = GetOp6(index); 1078 switch (op & 3) { 1079 case 0: { 1080 ok_ = false; 1081 break; 1082 } 1083 case 1: { 1084 sink_(GetEmit6(index, (op >> 2) + 0)); 1085 break; 1086 } 1087 } 1088 return; 1089 } 1090 case 10: { 1091 const auto index = buffer_ & 1023; 1092 const auto op = GetOp7(index); 1093 switch (op & 3) { 1094 case 0: { 1095 sink_(GetEmit7(index, (op >> 2) + 0)); 1096 sink_(GetEmit7(index, (op >> 2) + 1)); 1097 break; 1098 } 1099 case 1: { 1100 ok_ = false; 1101 break; 1102 } 1103 case 2: { 1104 sink_(GetEmit7(index, (op >> 2) + 0)); 1105 break; 1106 } 1107 } 1108 return; 1109 } 1110 case 11: { 1111 const auto index = buffer_ & 2047; 1112 const auto op = GetOp8(index); 1113 switch (op & 3) { 1114 case 0: { 1115 ok_ = false; 1116 break; 1117 } 1118 case 1: { 1119 sink_(GetEmit8(index, (op >> 2) + 0)); 1120 sink_(GetEmit8(index, (op >> 2) + 1)); 1121 break; 1122 } 1123 case 2: { 1124 sink_(GetEmit8(index, (op >> 2) + 0)); 1125 break; 1126 } 1127 } 1128 return; 1129 } 1130 case 12: { 1131 const auto index = buffer_ & 4095; 1132 const auto op = GetOp9(index); 1133 switch (op & 3) { 1134 case 0: { 1135 ok_ = false; 1136 break; 1137 } 1138 case 1: { 1139 sink_(GetEmit9(index, (op >> 2) + 0)); 1140 sink_(GetEmit9(index, (op >> 2) + 1)); 1141 break; 1142 } 1143 case 2: { 1144 sink_(GetEmit9(index, (op >> 2) + 0)); 1145 break; 1146 } 1147 } 1148 return; 1149 } 1150 case 0: { 1151 return; 1152 } 1153 } 1154 } DecodeStep0()1155 void DecodeStep0() { 1156 if (!RefillTo1()) { 1157 Done1(); 1158 return; 1159 } 1160 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1161 const auto op = GetOp10(index); 1162 const int consumed = op & 1; 1163 buffer_len_ -= consumed; 1164 const auto emit_ofs = op >> 1; 1165 sink_(GetEmit10(index, emit_ofs + 0)); 1166 } RefillTo1()1167 bool RefillTo1() { 1168 switch (buffer_len_) { 1169 case 0: { 1170 return Read1to8Bytes(); 1171 } 1172 } 1173 return true; 1174 } Read1to8Bytes()1175 bool Read1to8Bytes() { 1176 switch (end_ - begin_) { 1177 case 0: { 1178 return false; 1179 } 1180 case 1: { 1181 Fill1(); 1182 return true; 1183 } 1184 case 2: { 1185 Fill2(); 1186 return true; 1187 } 1188 case 3: { 1189 Fill3(); 1190 return true; 1191 } 1192 case 4: { 1193 Fill4(); 1194 return true; 1195 } 1196 case 5: { 1197 Fill5(); 1198 return true; 1199 } 1200 case 6: { 1201 Fill6(); 1202 return true; 1203 } 1204 case 7: { 1205 Fill7(); 1206 return true; 1207 } 1208 default: { 1209 Fill8(); 1210 return true; 1211 } 1212 } 1213 } Done1()1214 void Done1() { 1215 done_ = true; 1216 ok_ = false; 1217 } DecodeStep1()1218 void DecodeStep1() { 1219 if (!RefillTo6()) { 1220 Done2(); 1221 return; 1222 } 1223 const auto index = (buffer_ >> (buffer_len_ - 6)) & 0x3f; 1224 const auto op = GetOp11(index); 1225 const int consumed = op & 7; 1226 buffer_len_ -= consumed; 1227 const auto emit_ofs = op >> 7; 1228 switch ((op >> 3) & 15) { 1229 case 0: { 1230 sink_(GetEmit11(index, emit_ofs + 0)); 1231 break; 1232 } 1233 case 1: { 1234 DecodeStep2(); 1235 break; 1236 } 1237 case 2: { 1238 DecodeStep3(); 1239 break; 1240 } 1241 case 3: { 1242 DecodeStep4(); 1243 break; 1244 } 1245 case 4: { 1246 DecodeStep5(); 1247 break; 1248 } 1249 case 5: { 1250 DecodeStep6(); 1251 break; 1252 } 1253 case 6: { 1254 DecodeStep7(); 1255 break; 1256 } 1257 case 7: { 1258 DecodeStep8(); 1259 break; 1260 } 1261 case 8: { 1262 DecodeStep12(); 1263 break; 1264 } 1265 case 9: { 1266 DecodeStep9(); 1267 break; 1268 } 1269 case 10: { 1270 DecodeStep10(); 1271 break; 1272 } 1273 case 11: { 1274 DecodeStep13(); 1275 break; 1276 } 1277 case 12: { 1278 DecodeStep11(); 1279 break; 1280 } 1281 case 13: { 1282 DecodeStep14(); 1283 break; 1284 } 1285 } 1286 } RefillTo6()1287 bool RefillTo6() { 1288 switch (buffer_len_) { 1289 case 0: { 1290 return Read1to8Bytes(); 1291 } 1292 case 1: 1293 case 2: 1294 case 3: 1295 case 4: 1296 case 5: { 1297 return Read1to7Bytes(); 1298 } 1299 } 1300 return true; 1301 } Done2()1302 void Done2() { 1303 done_ = true; 1304 switch (buffer_len_) { 1305 case 1: { 1306 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1307 return; 1308 } 1309 case 2: { 1310 const auto index = buffer_ & 3; 1311 const auto op = GetOp12(index); 1312 switch (op & 1) { 1313 case 0: { 1314 sink_(GetEmit12(index, (op >> 1) + 0)); 1315 break; 1316 } 1317 } 1318 return; 1319 } 1320 case 3: { 1321 const auto index = buffer_ & 7; 1322 const auto op = GetOp13(index); 1323 switch (op & 3) { 1324 case 0: { 1325 ok_ = false; 1326 break; 1327 } 1328 case 1: { 1329 sink_(GetEmit13(index, (op >> 2) + 0)); 1330 break; 1331 } 1332 } 1333 return; 1334 } 1335 case 4: { 1336 const auto index = buffer_ & 15; 1337 const auto op = GetOp14(index); 1338 switch (op & 3) { 1339 case 0: { 1340 ok_ = false; 1341 break; 1342 } 1343 case 1: { 1344 sink_(GetEmit14(index, (op >> 2) + 0)); 1345 break; 1346 } 1347 } 1348 return; 1349 } 1350 case 5: { 1351 const auto index = buffer_ & 31; 1352 const auto op = GetOp15(index); 1353 switch (op & 3) { 1354 case 0: { 1355 ok_ = false; 1356 break; 1357 } 1358 case 1: { 1359 sink_(GetEmit15(index, (op >> 2) + 0)); 1360 break; 1361 } 1362 } 1363 return; 1364 } 1365 case 0: { 1366 return; 1367 } 1368 } 1369 } DecodeStep2()1370 void DecodeStep2() { 1371 if (!RefillTo1()) { 1372 Done3(); 1373 return; 1374 } 1375 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1376 const auto op = GetOp16(index); 1377 const int consumed = op & 1; 1378 buffer_len_ -= consumed; 1379 const auto emit_ofs = op >> 1; 1380 sink_(GetEmit16(index, emit_ofs + 0)); 1381 } Done3()1382 void Done3() { 1383 done_ = true; 1384 ok_ = false; 1385 } DecodeStep3()1386 void DecodeStep3() { 1387 if (!RefillTo1()) { 1388 Done4(); 1389 return; 1390 } 1391 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1392 const auto op = GetOp17(index); 1393 const int consumed = op & 1; 1394 buffer_len_ -= consumed; 1395 const auto emit_ofs = op >> 1; 1396 sink_(GetEmit17(index, emit_ofs + 0)); 1397 } Done4()1398 void Done4() { 1399 done_ = true; 1400 ok_ = false; 1401 } DecodeStep4()1402 void DecodeStep4() { 1403 if (!RefillTo1()) { 1404 Done5(); 1405 return; 1406 } 1407 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1408 const auto op = GetOp18(index); 1409 const int consumed = op & 1; 1410 buffer_len_ -= consumed; 1411 const auto emit_ofs = op >> 1; 1412 sink_(GetEmit18(index, emit_ofs + 0)); 1413 } Done5()1414 void Done5() { 1415 done_ = true; 1416 ok_ = false; 1417 } DecodeStep5()1418 void DecodeStep5() { 1419 if (!RefillTo1()) { 1420 Done6(); 1421 return; 1422 } 1423 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 1424 const auto op = GetOp19(index); 1425 const int consumed = op & 1; 1426 buffer_len_ -= consumed; 1427 const auto emit_ofs = op >> 1; 1428 sink_(GetEmit19(index, emit_ofs + 0)); 1429 } Done6()1430 void Done6() { 1431 done_ = true; 1432 ok_ = false; 1433 } DecodeStep6()1434 void DecodeStep6() { 1435 if (!RefillTo2()) { 1436 Done7(); 1437 return; 1438 } 1439 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1440 const auto op = GetOp20(index); 1441 const int consumed = op & 3; 1442 buffer_len_ -= consumed; 1443 const auto emit_ofs = op >> 2; 1444 sink_(GetEmit20(index, emit_ofs + 0)); 1445 } RefillTo2()1446 bool RefillTo2() { 1447 switch (buffer_len_) { 1448 case 0: { 1449 return Read1to8Bytes(); 1450 } 1451 case 1: { 1452 return Read1to7Bytes(); 1453 } 1454 } 1455 return true; 1456 } Done7()1457 void Done7() { 1458 done_ = true; 1459 switch (buffer_len_) { 1460 case 1: 1461 case 0: { 1462 ok_ = false; 1463 return; 1464 } 1465 } 1466 } DecodeStep7()1467 void DecodeStep7() { 1468 if (!RefillTo2()) { 1469 Done8(); 1470 return; 1471 } 1472 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1473 const auto op = GetOp21(index); 1474 const int consumed = op & 3; 1475 buffer_len_ -= consumed; 1476 const auto emit_ofs = op >> 2; 1477 sink_(GetEmit21(index, emit_ofs + 0)); 1478 } Done8()1479 void Done8() { 1480 done_ = true; 1481 switch (buffer_len_) { 1482 case 1: 1483 case 0: { 1484 ok_ = false; 1485 return; 1486 } 1487 } 1488 } DecodeStep8()1489 void DecodeStep8() { 1490 if (!RefillTo2()) { 1491 Done9(); 1492 return; 1493 } 1494 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 1495 const auto op = GetOp22(index); 1496 const int consumed = op & 3; 1497 buffer_len_ -= consumed; 1498 const auto emit_ofs = op >> 2; 1499 sink_(GetEmit22(index, emit_ofs + 0)); 1500 } Done9()1501 void Done9() { 1502 done_ = true; 1503 switch (buffer_len_) { 1504 case 1: 1505 case 0: { 1506 ok_ = false; 1507 return; 1508 } 1509 } 1510 } DecodeStep9()1511 void DecodeStep9() { 1512 if (!RefillTo3()) { 1513 Done10(); 1514 return; 1515 } 1516 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1517 const auto op = GetOp23(index); 1518 const int consumed = op & 3; 1519 buffer_len_ -= consumed; 1520 const auto emit_ofs = op >> 2; 1521 sink_(GetEmit23(index, emit_ofs + 0)); 1522 } RefillTo3()1523 bool RefillTo3() { 1524 switch (buffer_len_) { 1525 case 0: { 1526 return Read1to8Bytes(); 1527 } 1528 case 1: 1529 case 2: { 1530 return Read1to7Bytes(); 1531 } 1532 } 1533 return true; 1534 } Done10()1535 void Done10() { 1536 done_ = true; 1537 switch (buffer_len_) { 1538 case 1: 1539 case 2: 1540 case 0: { 1541 ok_ = false; 1542 return; 1543 } 1544 } 1545 } DecodeStep10()1546 void DecodeStep10() { 1547 if (!RefillTo3()) { 1548 Done11(); 1549 return; 1550 } 1551 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1552 const auto op = GetOp24(index); 1553 const int consumed = op & 3; 1554 buffer_len_ -= consumed; 1555 const auto emit_ofs = op >> 2; 1556 sink_(GetEmit24(index, emit_ofs + 0)); 1557 } Done11()1558 void Done11() { 1559 done_ = true; 1560 switch (buffer_len_) { 1561 case 1: 1562 case 2: 1563 case 0: { 1564 ok_ = false; 1565 return; 1566 } 1567 } 1568 } DecodeStep11()1569 void DecodeStep11() { 1570 if (!RefillTo4()) { 1571 Done12(); 1572 return; 1573 } 1574 const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf; 1575 const auto op = GetOp25(index); 1576 const int consumed = op & 7; 1577 buffer_len_ -= consumed; 1578 const auto emit_ofs = op >> 3; 1579 sink_(GetEmit25(index, emit_ofs + 0)); 1580 } RefillTo4()1581 bool RefillTo4() { 1582 switch (buffer_len_) { 1583 case 0: { 1584 return Read1to8Bytes(); 1585 } 1586 case 1: 1587 case 2: 1588 case 3: { 1589 return Read1to7Bytes(); 1590 } 1591 } 1592 return true; 1593 } Done12()1594 void Done12() { 1595 done_ = true; 1596 switch (buffer_len_) { 1597 case 1: 1598 case 2: 1599 case 3: 1600 case 0: { 1601 ok_ = false; 1602 return; 1603 } 1604 } 1605 } DecodeStep12()1606 void DecodeStep12() { 1607 if (!RefillTo3()) { 1608 Done13(); 1609 return; 1610 } 1611 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1612 const auto op = GetOp26(index); 1613 const int consumed = op & 3; 1614 buffer_len_ -= consumed; 1615 const auto emit_ofs = op >> 2; 1616 sink_(GetEmit26(index, emit_ofs + 0)); 1617 } Done13()1618 void Done13() { 1619 done_ = true; 1620 switch (buffer_len_) { 1621 case 1: 1622 case 0: { 1623 ok_ = false; 1624 return; 1625 } 1626 case 2: { 1627 const auto index = buffer_ & 3; 1628 const auto op = GetOp27(index); 1629 switch (op & 1) { 1630 case 0: { 1631 sink_(GetEmit27(index, (op >> 1) + 0)); 1632 break; 1633 } 1634 case 1: { 1635 ok_ = false; 1636 break; 1637 } 1638 } 1639 return; 1640 } 1641 } 1642 } DecodeStep13()1643 void DecodeStep13() { 1644 if (!RefillTo4()) { 1645 Done14(); 1646 return; 1647 } 1648 const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf; 1649 const auto op = GetOp28(index); 1650 const int consumed = op & 7; 1651 buffer_len_ -= consumed; 1652 const auto emit_ofs = op >> 3; 1653 sink_(GetEmit28(index, emit_ofs + 0)); 1654 } Done14()1655 void Done14() { 1656 done_ = true; 1657 switch (buffer_len_) { 1658 case 1: 1659 case 2: 1660 case 0: { 1661 ok_ = false; 1662 return; 1663 } 1664 case 3: { 1665 const auto index = buffer_ & 7; 1666 const auto op = GetOp29(index); 1667 switch (op & 1) { 1668 case 0: { 1669 sink_(GetEmit29(index, (op >> 1) + 0)); 1670 break; 1671 } 1672 case 1: { 1673 ok_ = false; 1674 break; 1675 } 1676 } 1677 return; 1678 } 1679 } 1680 } DecodeStep14()1681 void DecodeStep14() { 1682 if (!RefillTo11()) { 1683 Done15(); 1684 return; 1685 } 1686 const auto index = (buffer_ >> (buffer_len_ - 11)) & 0x7ff; 1687 const auto op = GetOp30(index); 1688 const int consumed = op & 15; 1689 buffer_len_ -= consumed; 1690 const auto emit_ofs = op >> 5; 1691 switch ((op >> 4) & 1) { 1692 case 0: { 1693 sink_(GetEmit30(index, emit_ofs + 0)); 1694 break; 1695 } 1696 case 1: { 1697 begin_ = end_; 1698 buffer_len_ = 0; 1699 break; 1700 } 1701 } 1702 } RefillTo11()1703 bool RefillTo11() { 1704 switch (buffer_len_) { 1705 case 0: { 1706 return Read2to8Bytes(); 1707 } 1708 case 1: 1709 case 2: { 1710 return Read2to7Bytes(); 1711 } 1712 case 3: 1713 case 4: 1714 case 5: 1715 case 6: 1716 case 7: 1717 case 8: { 1718 return Read1to7Bytes(); 1719 } 1720 case 9: 1721 case 10: { 1722 return Read1to6Bytes(); 1723 } 1724 } 1725 return true; 1726 } Done15()1727 void Done15() { 1728 done_ = true; 1729 switch (end_ - begin_) { 1730 case 1: { 1731 Fill1(); 1732 break; 1733 } 1734 } 1735 switch (buffer_len_) { 1736 case 1: 1737 case 2: 1738 case 3: { 1739 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1740 return; 1741 } 1742 case 4: { 1743 const auto index = buffer_ & 15; 1744 const auto op = GetOp31(index); 1745 switch (op & 3) { 1746 case 0: { 1747 sink_(GetEmit31(index, (op >> 2) + 0)); 1748 break; 1749 } 1750 case 1: { 1751 ok_ = false; 1752 break; 1753 } 1754 } 1755 return; 1756 } 1757 case 5: { 1758 const auto index = buffer_ & 31; 1759 const auto op = GetOp32(index); 1760 switch (op & 3) { 1761 case 0: { 1762 ok_ = false; 1763 break; 1764 } 1765 case 1: { 1766 sink_(GetEmit32(index, (op >> 2) + 0)); 1767 break; 1768 } 1769 } 1770 return; 1771 } 1772 case 6: { 1773 const auto index = buffer_ & 63; 1774 const auto op = GetOp33(index); 1775 switch (op & 3) { 1776 case 0: { 1777 ok_ = false; 1778 break; 1779 } 1780 case 1: { 1781 sink_(GetEmit33(index, (op >> 2) + 0)); 1782 break; 1783 } 1784 } 1785 return; 1786 } 1787 case 7: { 1788 const auto index = buffer_ & 127; 1789 const auto op = GetOp34(index); 1790 switch (op & 3) { 1791 case 0: { 1792 ok_ = false; 1793 break; 1794 } 1795 case 1: { 1796 sink_(GetEmit34(index, (op >> 2) + 0)); 1797 break; 1798 } 1799 } 1800 return; 1801 } 1802 case 8: { 1803 const auto index = buffer_ & 255; 1804 const auto op = GetOp35(index); 1805 switch (op & 3) { 1806 case 0: { 1807 ok_ = false; 1808 break; 1809 } 1810 case 1: { 1811 sink_(GetEmit35(index, (op >> 2) + 0)); 1812 break; 1813 } 1814 } 1815 return; 1816 } 1817 case 9: { 1818 const auto index = buffer_ & 511; 1819 const auto op = GetOp36(index); 1820 switch (op & 3) { 1821 case 0: { 1822 sink_(GetEmit36(index, (op >> 2) + 0)); 1823 sink_(GetEmit36(index, (op >> 2) + 1)); 1824 break; 1825 } 1826 case 1: { 1827 ok_ = false; 1828 break; 1829 } 1830 case 2: { 1831 sink_(GetEmit36(index, (op >> 2) + 0)); 1832 break; 1833 } 1834 } 1835 return; 1836 } 1837 case 10: { 1838 const auto index = buffer_ & 1023; 1839 const auto op = GetOp37(index); 1840 switch (op & 3) { 1841 case 0: { 1842 ok_ = false; 1843 break; 1844 } 1845 case 1: { 1846 sink_(GetEmit37(index, (op >> 2) + 0)); 1847 sink_(GetEmit37(index, (op >> 2) + 1)); 1848 break; 1849 } 1850 case 2: { 1851 sink_(GetEmit37(index, (op >> 2) + 0)); 1852 break; 1853 } 1854 } 1855 return; 1856 } 1857 case 0: { 1858 return; 1859 } 1860 } 1861 } 1862 F sink_; 1863 const uint8_t* begin_; 1864 const uint8_t* const end_; 1865 uint64_t buffer_ = 0; 1866 int buffer_len_ = 0; 1867 bool ok_ = true; 1868 bool done_ = false; 1869 }; 1870 } // namespace geometry_13_6_11 1871 } // namespace grpc_core 1872 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_13_6_11_H 1873