1 // Copyright 2023 gRPC authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // This file is autogenerated: see 16 // tools/codegen/core/gen_huffman_decompressor.cc 17 18 #ifndef GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_9_14_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_9_14_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_7_9_14 { 26 class HuffDecoderCommon { 27 protected: GetOp2(size_t i)28 static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; } GetEmit2(size_t,size_t emit)29 static inline uint64_t GetEmit2(size_t, size_t emit) { 30 return table2_0_emit_[emit]; 31 } GetOp3(size_t i)32 static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; } GetEmit3(size_t,size_t emit)33 static inline uint64_t GetEmit3(size_t, size_t emit) { 34 return table3_0_emit_[emit]; 35 } GetOp1(size_t i)36 static inline uint64_t GetOp1(size_t i) { 37 return table1_0_inner_[table1_0_outer_[i]]; 38 } GetEmit1(size_t,size_t emit)39 static inline uint64_t GetEmit1(size_t, size_t emit) { 40 return table1_0_emit_[emit]; 41 } GetOp4(size_t i)42 static inline uint64_t GetOp4(size_t i) { return i ? 3 : 1; } GetEmit4(size_t,size_t emit)43 static inline uint64_t GetEmit4(size_t, size_t emit) { 44 return emit ? 42 : 38; 45 } GetOp5(size_t i)46 static inline uint64_t GetOp5(size_t i) { return i ? 3 : 1; } GetEmit5(size_t,size_t emit)47 static inline uint64_t GetEmit5(size_t, size_t emit) { 48 return emit ? 59 : 44; 49 } GetOp6(size_t i)50 static inline uint64_t GetOp6(size_t i) { return i ? 3 : 1; } GetEmit6(size_t,size_t emit)51 static inline uint64_t GetEmit6(size_t, size_t emit) { 52 return emit ? 90 : 88; 53 } GetOp8(size_t i)54 static inline uint64_t GetOp8(size_t i) { 55 return table8_0_inner_[(i < 6 ? (i) : ((i - 6) + 5))]; 56 } GetEmit8(size_t,size_t emit)57 static inline uint64_t GetEmit8(size_t, size_t emit) { 58 return table8_0_emit_[emit]; 59 } GetOp9(size_t i)60 static inline uint64_t GetOp9(size_t i) { 61 return table9_0_inner_[table9_0_outer_[i]]; 62 } GetEmit9(size_t,size_t emit)63 static inline uint64_t GetEmit9(size_t, size_t emit) { 64 return table9_0_emit_[emit]; 65 } GetOp10(size_t i)66 static inline uint64_t GetOp10(size_t i) { return table10_0_ops_[i]; } GetEmit10(size_t,size_t emit)67 static inline uint64_t GetEmit10(size_t, size_t emit) { 68 return table10_0_emit_[emit]; 69 } GetOp11(size_t i)70 static inline uint64_t GetOp11(size_t i) { return table11_0_ops_[i]; } GetEmit11(size_t,size_t emit)71 static inline uint64_t GetEmit11(size_t, size_t emit) { 72 return table11_0_emit_[emit]; 73 } GetOp12(size_t i)74 static inline uint64_t GetOp12(size_t i) { return table12_0_ops_[i]; } GetEmit12(size_t,size_t emit)75 static inline uint64_t GetEmit12(size_t, size_t emit) { 76 return table12_0_emit_[emit]; 77 } GetOp13(size_t i)78 static inline uint64_t GetOp13(size_t i) { 79 return table13_ops_[i >> 6][i & 0x3f]; 80 } GetEmit13(size_t i,size_t emit)81 static inline uint64_t GetEmit13(size_t i, size_t emit) { 82 return table13_emit_[i >> 6][emit]; 83 } GetOp7(size_t i)84 static inline uint64_t GetOp7(size_t i) { 85 return table7_ops_[i >> 6][i & 0x3f]; 86 } GetEmit7(size_t i,size_t emit)87 static inline uint64_t GetEmit7(size_t i, size_t emit) { 88 return table7_emit_[i >> 6][emit]; 89 } GetOp15(size_t i)90 static inline uint64_t GetOp15(size_t i) { 91 return ((i < 3 ? (i) : (((void)(i - 3), 3))) < 2 92 ? ((i < 3 ? (i) : (((void)(i - 3), 3))) ? 2 : 0) 93 : (((i < 3 ? (i) : (((void)(i - 3), 3))) - 2) ? 1 : 4)); 94 } GetEmit15(size_t,size_t emit)95 static inline uint64_t GetEmit15(size_t, size_t emit) { 96 return (emit < 1 ? (((void)emit, 92)) : ((emit - 1) ? 208 : 195)); 97 } GetOp16(size_t i)98 static inline uint64_t GetOp16(size_t i) { 99 return table16_0_inner_[table16_0_outer_[i]]; 100 } GetEmit16(size_t,size_t emit)101 static inline uint64_t GetEmit16(size_t, size_t emit) { 102 return table16_0_emit_[emit]; 103 } GetOp14(size_t i)104 static inline uint64_t GetOp14(size_t i) { return table14_0_ops_[i]; } GetEmit14(size_t,size_t emit)105 static inline uint64_t GetEmit14(size_t, size_t emit) { 106 return table14_0_emit_[emit]; 107 } GetOp18(size_t i)108 static inline uint64_t GetOp18(size_t i) { return table18_0_ops_[i]; } GetEmit18(size_t,size_t emit)109 static inline uint64_t GetEmit18(size_t, size_t emit) { 110 return table18_0_emit_[emit]; 111 } GetOp19(size_t i)112 static inline uint64_t GetOp19(size_t i) { return table19_0_ops_[i]; } GetEmit19(size_t,size_t emit)113 static inline uint64_t GetEmit19(size_t, size_t emit) { 114 return table19_0_emit_[emit]; 115 } GetOp20(size_t i)116 static inline uint64_t GetOp20(size_t i) { return table20_0_ops_[i]; } GetEmit20(size_t,size_t emit)117 static inline uint64_t GetEmit20(size_t, size_t emit) { 118 return table20_0_emit_[emit]; 119 } GetOp21(size_t i)120 static inline uint64_t GetOp21(size_t i) { 121 return table21_ops_[i >> 7][i & 0x7f]; 122 } GetEmit21(size_t i,size_t emit)123 static inline uint64_t GetEmit21(size_t i, size_t emit) { 124 return table21_emit_[i >> 7][emit]; 125 } GetOp22(size_t i)126 static inline uint64_t GetOp22(size_t i) { 127 return table22_ops_[i >> 8][i & 0xff]; 128 } GetEmit22(size_t i,size_t emit)129 static inline uint64_t GetEmit22(size_t i, size_t emit) { 130 return table22_emit_[i >> 8][emit]; 131 } GetOp23(size_t i)132 static inline uint64_t GetOp23(size_t i) { 133 return table23_ops_[i >> 6][i & 0x3f]; 134 } GetEmit23(size_t i,size_t emit)135 static inline uint64_t GetEmit23(size_t i, size_t emit) { 136 return table23_emit_[i >> 6][emit]; 137 } GetOp24(size_t i)138 static inline uint64_t GetOp24(size_t i) { 139 return table24_ops_[i >> 6][i & 0x3f]; 140 } GetEmit24(size_t i,size_t emit)141 static inline uint64_t GetEmit24(size_t i, size_t emit) { 142 return table24_emit_[i >> 6][emit]; 143 } GetOp25(size_t i)144 static inline uint64_t GetOp25(size_t i) { 145 return table25_ops_[i >> 7][i & 0x7f]; 146 } GetEmit25(size_t i,size_t emit)147 static inline uint64_t GetEmit25(size_t i, size_t emit) { 148 return table25_emit_[i >> 7][emit]; 149 } GetOp26(size_t i)150 static inline uint64_t GetOp26(size_t i) { 151 return table26_ops_[i >> 7][i & 0x7f]; 152 } GetEmit26(size_t i,size_t emit)153 static inline uint64_t GetEmit26(size_t i, size_t emit) { 154 return table26_emit_[i >> 7][emit]; 155 } GetOp17(size_t i)156 static inline uint64_t GetOp17(size_t i) { 157 return table17_ops_[i >> 8][i & 0xff]; 158 } GetEmit17(size_t i,size_t emit)159 static inline uint64_t GetEmit17(size_t i, size_t emit) { 160 return table17_emit_[i >> 8][emit]; 161 } 162 163 private: 164 static const uint8_t table2_0_emit_[10]; 165 static const uint8_t table2_0_ops_[32]; 166 static const uint8_t table3_0_emit_[36]; 167 static const uint8_t table3_0_ops_[64]; 168 static const uint8_t table1_0_emit_[68]; 169 static const uint16_t table1_0_inner_[72]; 170 static const uint8_t table1_0_outer_[128]; 171 static const uint8_t table8_0_emit_[5]; 172 static const uint8_t table8_0_inner_[7]; 173 static const uint8_t table9_0_emit_[8]; 174 static const uint8_t table9_0_inner_[10]; 175 static const uint8_t table9_0_outer_[16]; 176 static const uint8_t table10_0_emit_[10]; 177 static const uint8_t table10_0_ops_[32]; 178 static const uint8_t table11_0_emit_[16]; 179 static const uint8_t table11_0_ops_[64]; 180 static const uint8_t table12_0_emit_[18]; 181 static const uint8_t table12_0_ops_[128]; 182 static const uint8_t table13_0_emit_[40]; 183 static const uint8_t table13_0_ops_[64]; 184 static const uint8_t table13_1_emit_[40]; 185 static const uint8_t table13_2_emit_[22]; 186 static const uint8_t table13_2_ops_[64]; 187 static const uint8_t table13_3_emit_[14]; 188 static const uint8_t table13_3_ops_[64]; 189 static const uint8_t* const table13_emit_[4]; 190 static const uint8_t* const table13_ops_[4]; 191 static const uint8_t table7_0_emit_[1]; 192 static const uint16_t table7_0_ops_[64]; 193 static const uint8_t table7_1_emit_[1]; 194 static const uint8_t table7_2_emit_[1]; 195 static const uint8_t table7_3_emit_[1]; 196 static const uint8_t table7_4_emit_[1]; 197 static const uint8_t table7_5_emit_[2]; 198 static const uint16_t table7_5_ops_[64]; 199 static const uint8_t table7_6_emit_[3]; 200 static const uint16_t table7_6_ops_[64]; 201 static const uint8_t table7_7_emit_[11]; 202 static const uint16_t table7_7_ops_[64]; 203 static const uint8_t* const table7_emit_[8]; 204 static const uint16_t* const table7_ops_[8]; 205 static const uint8_t table16_0_emit_[11]; 206 static const uint8_t table16_0_inner_[12]; 207 static const uint8_t table16_0_outer_[16]; 208 static const uint8_t table14_0_emit_[15]; 209 static const uint8_t table14_0_ops_[32]; 210 static const uint8_t table18_0_emit_[9]; 211 static const uint8_t table18_0_ops_[32]; 212 static const uint8_t table19_0_emit_[35]; 213 static const uint8_t table19_0_ops_[64]; 214 static const uint8_t table20_0_emit_[64]; 215 static const uint8_t table20_0_ops_[128]; 216 static const uint8_t table21_0_emit_[23]; 217 static const uint8_t table21_0_ops_[128]; 218 static const uint8_t table21_1_emit_[53]; 219 static const uint8_t table21_1_ops_[128]; 220 static const uint8_t* const table21_emit_[2]; 221 static const uint8_t* const table21_ops_[2]; 222 static const uint8_t table22_0_ops_[256]; 223 static const uint8_t table22_1_emit_[57]; 224 static const uint8_t table22_1_ops_[256]; 225 static const uint8_t* const table22_emit_[2]; 226 static const uint8_t* const table22_ops_[2]; 227 static const uint8_t table23_0_emit_[40]; 228 static const uint8_t table23_1_emit_[40]; 229 static const uint8_t table23_2_emit_[40]; 230 static const uint8_t table23_3_emit_[40]; 231 static const uint8_t table23_4_emit_[22]; 232 static const uint8_t table23_5_emit_[4]; 233 static const uint8_t table23_5_ops_[64]; 234 static const uint8_t table23_6_emit_[4]; 235 static const uint8_t table23_7_emit_[4]; 236 static const uint8_t table23_8_emit_[4]; 237 static const uint8_t table23_9_emit_[4]; 238 static const uint8_t table23_10_emit_[4]; 239 static const uint8_t table23_11_emit_[8]; 240 static const uint8_t table23_11_ops_[64]; 241 static const uint8_t table23_12_emit_[8]; 242 static const uint8_t table23_13_emit_[8]; 243 static const uint8_t table23_14_emit_[11]; 244 static const uint8_t table23_14_ops_[64]; 245 static const uint8_t table23_15_emit_[25]; 246 static const uint8_t table23_15_ops_[64]; 247 static const uint8_t* const table23_emit_[16]; 248 static const uint8_t* const table23_ops_[16]; 249 static const uint8_t table24_0_emit_[72]; 250 static const uint16_t table24_0_ops_[64]; 251 static const uint8_t table24_1_emit_[72]; 252 static const uint8_t table24_2_emit_[72]; 253 static const uint8_t table24_3_emit_[72]; 254 static const uint8_t table24_4_emit_[72]; 255 static const uint8_t table24_5_emit_[72]; 256 static const uint8_t table24_6_emit_[72]; 257 static const uint8_t table24_7_emit_[72]; 258 static const uint8_t table24_8_emit_[72]; 259 static const uint8_t table24_9_emit_[40]; 260 static const uint16_t table24_9_ops_[64]; 261 static const uint8_t table24_10_emit_[40]; 262 static const uint8_t table24_11_emit_[40]; 263 static const uint8_t table24_12_emit_[40]; 264 static const uint8_t table24_13_emit_[40]; 265 static const uint8_t table24_14_emit_[40]; 266 static const uint8_t table24_15_emit_[40]; 267 static const uint8_t table24_16_emit_[40]; 268 static const uint8_t table24_17_emit_[40]; 269 static const uint8_t table24_18_emit_[40]; 270 static const uint8_t table24_19_emit_[40]; 271 static const uint8_t table24_20_emit_[40]; 272 static const uint8_t table24_21_emit_[40]; 273 static const uint8_t table24_22_emit_[4]; 274 static const uint16_t table24_22_ops_[64]; 275 static const uint8_t table24_23_emit_[4]; 276 static const uint8_t table24_24_emit_[4]; 277 static const uint8_t table24_25_emit_[4]; 278 static const uint8_t table24_26_emit_[4]; 279 static const uint8_t table24_27_emit_[4]; 280 static const uint8_t table24_28_emit_[4]; 281 static const uint8_t table24_29_emit_[7]; 282 static const uint16_t table24_29_ops_[64]; 283 static const uint8_t table24_30_emit_[10]; 284 static const uint16_t table24_30_ops_[64]; 285 static const uint8_t table24_31_emit_[34]; 286 static const uint16_t table24_31_ops_[64]; 287 static const uint8_t* const table24_emit_[32]; 288 static const uint16_t* const table24_ops_[32]; 289 static const uint8_t table25_0_emit_[136]; 290 static const uint16_t table25_0_ops_[128]; 291 static const uint8_t table25_1_emit_[136]; 292 static const uint8_t table25_2_emit_[136]; 293 static const uint8_t table25_3_emit_[136]; 294 static const uint8_t table25_4_emit_[136]; 295 static const uint8_t table25_5_emit_[136]; 296 static const uint8_t table25_6_emit_[136]; 297 static const uint8_t table25_7_emit_[136]; 298 static const uint8_t table25_8_emit_[136]; 299 static const uint8_t table25_9_emit_[144]; 300 static const uint16_t table25_9_ops_[128]; 301 static const uint8_t table25_10_emit_[144]; 302 static const uint8_t table25_11_emit_[144]; 303 static const uint8_t table25_12_emit_[144]; 304 static const uint8_t table25_13_emit_[144]; 305 static const uint8_t table25_14_emit_[144]; 306 static const uint8_t table25_15_emit_[144]; 307 static const uint8_t table25_16_emit_[144]; 308 static const uint8_t table25_17_emit_[144]; 309 static const uint8_t table25_18_emit_[144]; 310 static const uint8_t table25_19_emit_[144]; 311 static const uint8_t table25_20_emit_[144]; 312 static const uint8_t table25_21_emit_[144]; 313 static const uint8_t table25_22_emit_[80]; 314 static const uint16_t table25_22_ops_[128]; 315 static const uint8_t table25_23_emit_[80]; 316 static const uint8_t table25_24_emit_[80]; 317 static const uint8_t table25_25_emit_[80]; 318 static const uint8_t table25_26_emit_[80]; 319 static const uint8_t table25_27_emit_[80]; 320 static const uint8_t table25_28_emit_[80]; 321 static const uint8_t table25_29_emit_[26]; 322 static const uint16_t table25_29_ops_[128]; 323 static const uint16_t table25_30_ops_[128]; 324 static const uint8_t table25_31_emit_[63]; 325 static const uint16_t table25_31_ops_[128]; 326 static const uint8_t* const table25_emit_[32]; 327 static const uint16_t* const table25_ops_[32]; 328 static const uint8_t table26_0_emit_[44]; 329 static const uint16_t table26_0_ops_[128]; 330 static const uint8_t table26_1_emit_[104]; 331 static const uint16_t table26_1_ops_[128]; 332 static const uint8_t table26_2_emit_[44]; 333 static const uint8_t table26_3_emit_[104]; 334 static const uint8_t table26_4_emit_[44]; 335 static const uint8_t table26_5_emit_[104]; 336 static const uint8_t table26_6_emit_[44]; 337 static const uint8_t table26_7_emit_[104]; 338 static const uint8_t table26_8_emit_[44]; 339 static const uint8_t table26_9_emit_[104]; 340 static const uint8_t table26_10_emit_[44]; 341 static const uint8_t table26_11_emit_[104]; 342 static const uint8_t table26_12_emit_[44]; 343 static const uint8_t table26_13_emit_[104]; 344 static const uint8_t table26_14_emit_[44]; 345 static const uint8_t table26_15_emit_[104]; 346 static const uint8_t table26_16_emit_[44]; 347 static const uint8_t table26_17_emit_[104]; 348 static const uint8_t table26_18_emit_[136]; 349 static const uint8_t table26_19_emit_[136]; 350 static const uint8_t table26_20_emit_[136]; 351 static const uint8_t table26_21_emit_[136]; 352 static const uint8_t table26_22_emit_[136]; 353 static const uint8_t table26_23_emit_[136]; 354 static const uint8_t table26_24_emit_[136]; 355 static const uint8_t table26_25_emit_[136]; 356 static const uint8_t table26_26_emit_[136]; 357 static const uint8_t table26_27_emit_[136]; 358 static const uint8_t table26_28_emit_[136]; 359 static const uint8_t table26_29_emit_[136]; 360 static const uint8_t table26_30_emit_[136]; 361 static const uint8_t table26_31_emit_[136]; 362 static const uint8_t table26_32_emit_[136]; 363 static const uint8_t table26_33_emit_[136]; 364 static const uint8_t table26_34_emit_[136]; 365 static const uint8_t table26_35_emit_[136]; 366 static const uint8_t table26_36_emit_[136]; 367 static const uint8_t table26_37_emit_[136]; 368 static const uint8_t table26_38_emit_[136]; 369 static const uint8_t table26_39_emit_[136]; 370 static const uint8_t table26_40_emit_[136]; 371 static const uint8_t table26_41_emit_[136]; 372 static const uint8_t table26_42_emit_[136]; 373 static const uint8_t table26_43_emit_[136]; 374 static const uint8_t table26_44_emit_[144]; 375 static const uint8_t table26_45_emit_[144]; 376 static const uint8_t table26_46_emit_[144]; 377 static const uint8_t table26_47_emit_[144]; 378 static const uint8_t table26_48_emit_[144]; 379 static const uint8_t table26_49_emit_[144]; 380 static const uint8_t table26_50_emit_[144]; 381 static const uint8_t table26_51_emit_[144]; 382 static const uint8_t table26_52_emit_[144]; 383 static const uint8_t table26_53_emit_[144]; 384 static const uint8_t table26_54_emit_[144]; 385 static const uint8_t table26_55_emit_[144]; 386 static const uint8_t table26_56_emit_[144]; 387 static const uint8_t table26_57_emit_[144]; 388 static const uint8_t table26_58_emit_[112]; 389 static const uint16_t table26_58_ops_[128]; 390 static const uint8_t table26_59_emit_[80]; 391 static const uint8_t table26_60_emit_[80]; 392 static const uint8_t table26_61_emit_[44]; 393 static const uint16_t table26_61_ops_[128]; 394 static const uint8_t table26_62_emit_[17]; 395 static const uint16_t table26_62_ops_[128]; 396 static const uint8_t table26_63_emit_[46]; 397 static const uint16_t table26_63_ops_[128]; 398 static const uint8_t* const table26_emit_[64]; 399 static const uint16_t* const table26_ops_[64]; 400 static const uint8_t table17_0_emit_[1]; 401 static const uint16_t table17_0_ops_[256]; 402 static const uint8_t table17_2_emit_[1]; 403 static const uint8_t table17_4_emit_[1]; 404 static const uint8_t table17_6_emit_[1]; 405 static const uint8_t table17_8_emit_[1]; 406 static const uint8_t table17_10_emit_[1]; 407 static const uint8_t table17_12_emit_[1]; 408 static const uint8_t table17_14_emit_[1]; 409 static const uint8_t table17_16_emit_[1]; 410 static const uint8_t table17_18_emit_[1]; 411 static const uint16_t table17_18_ops_[256]; 412 static const uint8_t table17_19_emit_[1]; 413 static const uint8_t table17_20_emit_[1]; 414 static const uint8_t table17_21_emit_[1]; 415 static const uint8_t table17_22_emit_[1]; 416 static const uint8_t table17_23_emit_[1]; 417 static const uint8_t table17_24_emit_[1]; 418 static const uint8_t table17_25_emit_[1]; 419 static const uint8_t table17_26_emit_[1]; 420 static const uint8_t table17_27_emit_[1]; 421 static const uint8_t table17_28_emit_[1]; 422 static const uint8_t table17_29_emit_[1]; 423 static const uint8_t table17_30_emit_[1]; 424 static const uint8_t table17_31_emit_[1]; 425 static const uint8_t table17_32_emit_[1]; 426 static const uint8_t table17_33_emit_[1]; 427 static const uint8_t table17_34_emit_[1]; 428 static const uint8_t table17_35_emit_[1]; 429 static const uint8_t table17_36_emit_[1]; 430 static const uint8_t table17_37_emit_[1]; 431 static const uint8_t table17_38_emit_[1]; 432 static const uint8_t table17_39_emit_[1]; 433 static const uint8_t table17_40_emit_[1]; 434 static const uint8_t table17_41_emit_[1]; 435 static const uint8_t table17_42_emit_[1]; 436 static const uint8_t table17_43_emit_[1]; 437 static const uint8_t table17_44_emit_[2]; 438 static const uint16_t table17_44_ops_[256]; 439 static const uint8_t table17_45_emit_[2]; 440 static const uint8_t table17_46_emit_[2]; 441 static const uint8_t table17_47_emit_[2]; 442 static const uint8_t table17_48_emit_[2]; 443 static const uint8_t table17_49_emit_[2]; 444 static const uint8_t table17_50_emit_[2]; 445 static const uint8_t table17_51_emit_[2]; 446 static const uint8_t table17_52_emit_[2]; 447 static const uint8_t table17_53_emit_[2]; 448 static const uint8_t table17_54_emit_[2]; 449 static const uint8_t table17_55_emit_[2]; 450 static const uint8_t table17_56_emit_[2]; 451 static const uint8_t table17_57_emit_[2]; 452 static const uint8_t table17_58_emit_[3]; 453 static const uint16_t table17_58_ops_[256]; 454 static const uint8_t table17_59_emit_[4]; 455 static const uint16_t table17_59_ops_[256]; 456 static const uint8_t table17_60_emit_[4]; 457 static const uint8_t table17_61_emit_[6]; 458 static const uint16_t table17_61_ops_[256]; 459 static const uint16_t table17_62_ops_[256]; 460 static const uint8_t table17_63_emit_[49]; 461 static const uint16_t table17_63_ops_[256]; 462 static const uint8_t* const table17_emit_[64]; 463 static const uint16_t* const table17_ops_[64]; 464 }; 465 template <typename F> 466 class HuffDecoder : public HuffDecoderCommon { 467 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)468 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 469 : sink_(sink), begin_(begin), end_(end) {} Run()470 bool Run() { 471 while (!done_) { 472 if (!RefillTo7()) { 473 Done0(); 474 break; 475 } 476 const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f; 477 const auto op = GetOp1(index); 478 const int consumed = op & 7; 479 buffer_len_ -= consumed; 480 const auto emit_ofs = op >> 6; 481 switch ((op >> 3) & 7) { 482 case 0: { 483 sink_(GetEmit1(index, emit_ofs + 0)); 484 break; 485 } 486 case 1: { 487 DecodeStep0(); 488 break; 489 } 490 case 2: { 491 DecodeStep1(); 492 break; 493 } 494 case 3: { 495 DecodeStep2(); 496 break; 497 } 498 case 4: { 499 DecodeStep3(); 500 break; 501 } 502 } 503 } 504 return ok_; 505 } 506 507 private: RefillTo7()508 bool RefillTo7() { 509 switch (buffer_len_) { 510 case 0: { 511 return Read1to8Bytes(); 512 } 513 case 1: 514 case 2: 515 case 3: 516 case 4: 517 case 5: 518 case 6: { 519 return Read1to7Bytes(); 520 } 521 } 522 return true; 523 } Read1to8Bytes()524 bool Read1to8Bytes() { 525 switch (end_ - begin_) { 526 case 0: { 527 return false; 528 } 529 case 1: { 530 Fill1(); 531 return true; 532 } 533 case 2: { 534 Fill2(); 535 return true; 536 } 537 case 3: { 538 Fill3(); 539 return true; 540 } 541 case 4: { 542 Fill4(); 543 return true; 544 } 545 case 5: { 546 Fill5(); 547 return true; 548 } 549 case 6: { 550 Fill6(); 551 return true; 552 } 553 case 7: { 554 Fill7(); 555 return true; 556 } 557 default: { 558 Fill8(); 559 return true; 560 } 561 } 562 } Fill1()563 void Fill1() { 564 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 565 begin_ += 1; 566 buffer_len_ += 8; 567 } Fill2()568 void Fill2() { 569 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 570 (static_cast<uint64_t>(begin_[1]) << 0); 571 begin_ += 2; 572 buffer_len_ += 16; 573 } Fill3()574 void Fill3() { 575 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 576 (static_cast<uint64_t>(begin_[1]) << 8) | 577 (static_cast<uint64_t>(begin_[2]) << 0); 578 begin_ += 3; 579 buffer_len_ += 24; 580 } Fill4()581 void Fill4() { 582 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 583 (static_cast<uint64_t>(begin_[1]) << 16) | 584 (static_cast<uint64_t>(begin_[2]) << 8) | 585 (static_cast<uint64_t>(begin_[3]) << 0); 586 begin_ += 4; 587 buffer_len_ += 32; 588 } Fill5()589 void Fill5() { 590 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 591 (static_cast<uint64_t>(begin_[1]) << 24) | 592 (static_cast<uint64_t>(begin_[2]) << 16) | 593 (static_cast<uint64_t>(begin_[3]) << 8) | 594 (static_cast<uint64_t>(begin_[4]) << 0); 595 begin_ += 5; 596 buffer_len_ += 40; 597 } Fill6()598 void Fill6() { 599 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 600 (static_cast<uint64_t>(begin_[1]) << 32) | 601 (static_cast<uint64_t>(begin_[2]) << 24) | 602 (static_cast<uint64_t>(begin_[3]) << 16) | 603 (static_cast<uint64_t>(begin_[4]) << 8) | 604 (static_cast<uint64_t>(begin_[5]) << 0); 605 begin_ += 6; 606 buffer_len_ += 48; 607 } Fill7()608 void Fill7() { 609 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 610 (static_cast<uint64_t>(begin_[1]) << 40) | 611 (static_cast<uint64_t>(begin_[2]) << 32) | 612 (static_cast<uint64_t>(begin_[3]) << 24) | 613 (static_cast<uint64_t>(begin_[4]) << 16) | 614 (static_cast<uint64_t>(begin_[5]) << 8) | 615 (static_cast<uint64_t>(begin_[6]) << 0); 616 begin_ += 7; 617 buffer_len_ += 56; 618 } Fill8()619 void Fill8() { 620 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 621 (static_cast<uint64_t>(begin_[1]) << 48) | 622 (static_cast<uint64_t>(begin_[2]) << 40) | 623 (static_cast<uint64_t>(begin_[3]) << 32) | 624 (static_cast<uint64_t>(begin_[4]) << 24) | 625 (static_cast<uint64_t>(begin_[5]) << 16) | 626 (static_cast<uint64_t>(begin_[6]) << 8) | 627 (static_cast<uint64_t>(begin_[7]) << 0); 628 begin_ += 8; 629 buffer_len_ += 64; 630 } Read1to7Bytes()631 bool Read1to7Bytes() { 632 switch (end_ - begin_) { 633 case 0: { 634 return false; 635 } 636 case 1: { 637 Fill1(); 638 return true; 639 } 640 case 2: { 641 Fill2(); 642 return true; 643 } 644 case 3: { 645 Fill3(); 646 return true; 647 } 648 case 4: { 649 Fill4(); 650 return true; 651 } 652 case 5: { 653 Fill5(); 654 return true; 655 } 656 case 6: { 657 Fill6(); 658 return true; 659 } 660 default: { 661 Fill7(); 662 return true; 663 } 664 } 665 } Done0()666 void Done0() { 667 done_ = true; 668 switch (buffer_len_) { 669 case 1: 670 case 2: 671 case 3: 672 case 4: { 673 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 674 return; 675 } 676 case 5: { 677 const auto index = buffer_ & 31; 678 const auto op = GetOp2(index); 679 switch (op & 3) { 680 case 0: { 681 sink_(GetEmit2(index, (op >> 2) + 0)); 682 break; 683 } 684 case 1: { 685 ok_ = false; 686 break; 687 } 688 } 689 return; 690 } 691 case 6: { 692 const auto index = buffer_ & 63; 693 const auto op = GetOp3(index); 694 switch (op & 3) { 695 case 0: { 696 ok_ = false; 697 break; 698 } 699 case 1: { 700 sink_(GetEmit3(index, (op >> 2) + 0)); 701 break; 702 } 703 } 704 return; 705 } 706 case 0: { 707 return; 708 } 709 } 710 } DecodeStep0()711 void DecodeStep0() { 712 if (!RefillTo1()) { 713 Done1(); 714 return; 715 } 716 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 717 const auto op = GetOp4(index); 718 const int consumed = op & 1; 719 buffer_len_ -= consumed; 720 const auto emit_ofs = op >> 1; 721 sink_(GetEmit4(index, emit_ofs + 0)); 722 } RefillTo1()723 bool RefillTo1() { 724 switch (buffer_len_) { 725 case 0: { 726 return Read1to8Bytes(); 727 } 728 } 729 return true; 730 } Done1()731 void Done1() { 732 done_ = true; 733 ok_ = false; 734 } DecodeStep1()735 void DecodeStep1() { 736 if (!RefillTo1()) { 737 Done2(); 738 return; 739 } 740 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 741 const auto op = GetOp5(index); 742 const int consumed = op & 1; 743 buffer_len_ -= consumed; 744 const auto emit_ofs = op >> 1; 745 sink_(GetEmit5(index, emit_ofs + 0)); 746 } Done2()747 void Done2() { 748 done_ = true; 749 ok_ = false; 750 } DecodeStep2()751 void DecodeStep2() { 752 if (!RefillTo1()) { 753 Done3(); 754 return; 755 } 756 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 757 const auto op = GetOp6(index); 758 const int consumed = op & 1; 759 buffer_len_ -= consumed; 760 const auto emit_ofs = op >> 1; 761 sink_(GetEmit6(index, emit_ofs + 0)); 762 } Done3()763 void Done3() { 764 done_ = true; 765 ok_ = false; 766 } DecodeStep3()767 void DecodeStep3() { 768 if (!RefillTo9()) { 769 Done4(); 770 return; 771 } 772 const auto index = (buffer_ >> (buffer_len_ - 9)) & 0x1ff; 773 const auto op = GetOp7(index); 774 const int consumed = op & 15; 775 buffer_len_ -= consumed; 776 const auto emit_ofs = op >> 6; 777 switch ((op >> 4) & 3) { 778 case 0: { 779 sink_(GetEmit7(index, emit_ofs + 0)); 780 break; 781 } 782 case 1: { 783 DecodeStep4(); 784 break; 785 } 786 case 2: { 787 DecodeStep5(); 788 break; 789 } 790 } 791 } RefillTo9()792 bool RefillTo9() { 793 switch (buffer_len_) { 794 case 0: { 795 return Read2to8Bytes(); 796 } 797 case 1: 798 case 2: 799 case 3: 800 case 4: 801 case 5: 802 case 6: 803 case 7: 804 case 8: { 805 return Read1to7Bytes(); 806 } 807 } 808 return true; 809 } Read2to8Bytes()810 bool Read2to8Bytes() { 811 switch (end_ - begin_) { 812 case 0: 813 case 1: { 814 return false; 815 } 816 case 2: { 817 Fill2(); 818 return true; 819 } 820 case 3: { 821 Fill3(); 822 return true; 823 } 824 case 4: { 825 Fill4(); 826 return true; 827 } 828 case 5: { 829 Fill5(); 830 return true; 831 } 832 case 6: { 833 Fill6(); 834 return true; 835 } 836 case 7: { 837 Fill7(); 838 return true; 839 } 840 default: { 841 Fill8(); 842 return true; 843 } 844 } 845 } Done4()846 void Done4() { 847 done_ = true; 848 switch (end_ - begin_) { 849 case 1: { 850 Fill1(); 851 break; 852 } 853 } 854 switch (buffer_len_) { 855 case 1: 856 case 2: { 857 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 858 return; 859 } 860 case 3: { 861 const auto index = buffer_ & 7; 862 const auto op = GetOp8(index); 863 switch (op & 3) { 864 case 0: { 865 sink_(GetEmit8(index, (op >> 2) + 0)); 866 break; 867 } 868 case 1: { 869 ok_ = false; 870 break; 871 } 872 } 873 return; 874 } 875 case 4: { 876 const auto index = buffer_ & 15; 877 const auto op = GetOp9(index); 878 switch (op & 3) { 879 case 0: { 880 ok_ = false; 881 break; 882 } 883 case 1: { 884 sink_(GetEmit9(index, (op >> 2) + 0)); 885 break; 886 } 887 } 888 return; 889 } 890 case 5: { 891 const auto index = buffer_ & 31; 892 const auto op = GetOp10(index); 893 switch (op & 3) { 894 case 0: { 895 ok_ = false; 896 break; 897 } 898 case 1: { 899 sink_(GetEmit10(index, (op >> 2) + 0)); 900 break; 901 } 902 } 903 return; 904 } 905 case 6: { 906 const auto index = buffer_ & 63; 907 const auto op = GetOp11(index); 908 switch (op & 3) { 909 case 0: { 910 ok_ = false; 911 break; 912 } 913 case 1: { 914 sink_(GetEmit11(index, (op >> 2) + 0)); 915 break; 916 } 917 } 918 return; 919 } 920 case 7: { 921 const auto index = buffer_ & 127; 922 const auto op = GetOp12(index); 923 switch (op & 3) { 924 case 0: { 925 ok_ = false; 926 break; 927 } 928 case 1: { 929 sink_(GetEmit12(index, (op >> 2) + 0)); 930 break; 931 } 932 } 933 return; 934 } 935 case 8: { 936 const auto index = buffer_ & 255; 937 const auto op = GetOp13(index); 938 switch (op & 3) { 939 case 0: { 940 sink_(GetEmit13(index, (op >> 2) + 0)); 941 sink_(GetEmit13(index, (op >> 2) + 1)); 942 break; 943 } 944 case 1: { 945 ok_ = false; 946 break; 947 } 948 case 2: { 949 sink_(GetEmit13(index, (op >> 2) + 0)); 950 break; 951 } 952 } 953 return; 954 } 955 case 0: { 956 return; 957 } 958 } 959 } DecodeStep4()960 void DecodeStep4() { 961 if (!RefillTo5()) { 962 Done5(); 963 return; 964 } 965 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 966 const auto op = GetOp14(index); 967 const int consumed = op & 7; 968 buffer_len_ -= consumed; 969 const auto emit_ofs = op >> 3; 970 sink_(GetEmit14(index, emit_ofs + 0)); 971 } RefillTo5()972 bool RefillTo5() { 973 switch (buffer_len_) { 974 case 0: { 975 return Read1to8Bytes(); 976 } 977 case 1: 978 case 2: 979 case 3: 980 case 4: { 981 return Read1to7Bytes(); 982 } 983 } 984 return true; 985 } Done5()986 void Done5() { 987 done_ = true; 988 switch (buffer_len_) { 989 case 1: 990 case 2: 991 case 0: { 992 ok_ = false; 993 return; 994 } 995 case 3: { 996 const auto index = buffer_ & 7; 997 const auto op = GetOp15(index); 998 switch (op & 1) { 999 case 0: { 1000 sink_(GetEmit15(index, (op >> 1) + 0)); 1001 break; 1002 } 1003 case 1: { 1004 ok_ = false; 1005 break; 1006 } 1007 } 1008 return; 1009 } 1010 case 4: { 1011 const auto index = buffer_ & 15; 1012 const auto op = GetOp16(index); 1013 switch (op & 1) { 1014 case 0: { 1015 ok_ = false; 1016 break; 1017 } 1018 case 1: { 1019 sink_(GetEmit16(index, (op >> 1) + 0)); 1020 break; 1021 } 1022 } 1023 return; 1024 } 1025 } 1026 } DecodeStep5()1027 void DecodeStep5() { 1028 if (!RefillTo14()) { 1029 Done6(); 1030 return; 1031 } 1032 const auto index = (buffer_ >> (buffer_len_ - 14)) & 0x3fff; 1033 const auto op = GetOp17(index); 1034 const int consumed = op & 15; 1035 buffer_len_ -= consumed; 1036 const auto emit_ofs = op >> 5; 1037 switch ((op >> 4) & 1) { 1038 case 0: { 1039 sink_(GetEmit17(index, emit_ofs + 0)); 1040 break; 1041 } 1042 case 1: { 1043 begin_ = end_; 1044 buffer_len_ = 0; 1045 break; 1046 } 1047 } 1048 } RefillTo14()1049 bool RefillTo14() { 1050 switch (buffer_len_) { 1051 case 0: { 1052 return Read2to8Bytes(); 1053 } 1054 case 1: 1055 case 2: 1056 case 3: 1057 case 4: 1058 case 5: { 1059 return Read2to7Bytes(); 1060 } 1061 case 6: 1062 case 7: 1063 case 8: { 1064 return Read1to7Bytes(); 1065 } 1066 case 9: 1067 case 10: 1068 case 11: 1069 case 12: 1070 case 13: { 1071 return Read1to6Bytes(); 1072 } 1073 } 1074 return true; 1075 } Read2to7Bytes()1076 bool Read2to7Bytes() { 1077 switch (end_ - begin_) { 1078 case 0: 1079 case 1: { 1080 return false; 1081 } 1082 case 2: { 1083 Fill2(); 1084 return true; 1085 } 1086 case 3: { 1087 Fill3(); 1088 return true; 1089 } 1090 case 4: { 1091 Fill4(); 1092 return true; 1093 } 1094 case 5: { 1095 Fill5(); 1096 return true; 1097 } 1098 case 6: { 1099 Fill6(); 1100 return true; 1101 } 1102 default: { 1103 Fill7(); 1104 return true; 1105 } 1106 } 1107 } Read1to6Bytes()1108 bool Read1to6Bytes() { 1109 switch (end_ - begin_) { 1110 case 0: { 1111 return false; 1112 } 1113 case 1: { 1114 Fill1(); 1115 return true; 1116 } 1117 case 2: { 1118 Fill2(); 1119 return true; 1120 } 1121 case 3: { 1122 Fill3(); 1123 return true; 1124 } 1125 case 4: { 1126 Fill4(); 1127 return true; 1128 } 1129 case 5: { 1130 Fill5(); 1131 return true; 1132 } 1133 default: { 1134 Fill6(); 1135 return true; 1136 } 1137 } 1138 } Done6()1139 void Done6() { 1140 done_ = true; 1141 switch (end_ - begin_) { 1142 case 1: { 1143 Fill1(); 1144 break; 1145 } 1146 } 1147 switch (buffer_len_) { 1148 case 1: 1149 case 2: 1150 case 3: 1151 case 4: { 1152 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1153 return; 1154 } 1155 case 5: { 1156 const auto index = buffer_ & 31; 1157 const auto op = GetOp18(index); 1158 switch (op & 3) { 1159 case 0: { 1160 sink_(GetEmit18(index, (op >> 2) + 0)); 1161 break; 1162 } 1163 case 1: { 1164 ok_ = false; 1165 break; 1166 } 1167 } 1168 return; 1169 } 1170 case 6: { 1171 const auto index = buffer_ & 63; 1172 const auto op = GetOp19(index); 1173 switch (op & 3) { 1174 case 0: { 1175 ok_ = false; 1176 break; 1177 } 1178 case 1: { 1179 sink_(GetEmit19(index, (op >> 2) + 0)); 1180 break; 1181 } 1182 } 1183 return; 1184 } 1185 case 7: { 1186 const auto index = buffer_ & 127; 1187 const auto op = GetOp20(index); 1188 switch (op & 3) { 1189 case 0: { 1190 ok_ = false; 1191 break; 1192 } 1193 case 1: { 1194 sink_(GetEmit20(index, (op >> 2) + 0)); 1195 break; 1196 } 1197 } 1198 return; 1199 } 1200 case 8: { 1201 const auto index = buffer_ & 255; 1202 const auto op = GetOp21(index); 1203 switch (op & 3) { 1204 case 0: { 1205 ok_ = false; 1206 break; 1207 } 1208 case 1: { 1209 sink_(GetEmit21(index, (op >> 2) + 0)); 1210 break; 1211 } 1212 } 1213 return; 1214 } 1215 case 9: { 1216 const auto index = buffer_ & 511; 1217 const auto op = GetOp22(index); 1218 switch (op & 3) { 1219 case 0: { 1220 ok_ = false; 1221 break; 1222 } 1223 case 1: { 1224 sink_(GetEmit22(index, (op >> 2) + 0)); 1225 break; 1226 } 1227 } 1228 return; 1229 } 1230 case 10: { 1231 const auto index = buffer_ & 1023; 1232 const auto op = GetOp23(index); 1233 switch (op & 3) { 1234 case 0: { 1235 sink_(GetEmit23(index, (op >> 2) + 0)); 1236 sink_(GetEmit23(index, (op >> 2) + 1)); 1237 break; 1238 } 1239 case 1: { 1240 ok_ = false; 1241 break; 1242 } 1243 case 2: { 1244 sink_(GetEmit23(index, (op >> 2) + 0)); 1245 break; 1246 } 1247 } 1248 return; 1249 } 1250 case 11: { 1251 const auto index = buffer_ & 2047; 1252 const auto op = GetOp24(index); 1253 switch (op & 3) { 1254 case 0: { 1255 ok_ = false; 1256 break; 1257 } 1258 case 1: { 1259 sink_(GetEmit24(index, (op >> 2) + 0)); 1260 sink_(GetEmit24(index, (op >> 2) + 1)); 1261 break; 1262 } 1263 case 2: { 1264 sink_(GetEmit24(index, (op >> 2) + 0)); 1265 break; 1266 } 1267 } 1268 return; 1269 } 1270 case 12: { 1271 const auto index = buffer_ & 4095; 1272 const auto op = GetOp25(index); 1273 switch (op & 3) { 1274 case 0: { 1275 ok_ = false; 1276 break; 1277 } 1278 case 1: { 1279 sink_(GetEmit25(index, (op >> 2) + 0)); 1280 sink_(GetEmit25(index, (op >> 2) + 1)); 1281 break; 1282 } 1283 case 2: { 1284 sink_(GetEmit25(index, (op >> 2) + 0)); 1285 break; 1286 } 1287 } 1288 return; 1289 } 1290 case 13: { 1291 const auto index = buffer_ & 8191; 1292 const auto op = GetOp26(index); 1293 switch (op & 3) { 1294 case 0: { 1295 ok_ = false; 1296 break; 1297 } 1298 case 1: { 1299 sink_(GetEmit26(index, (op >> 2) + 0)); 1300 sink_(GetEmit26(index, (op >> 2) + 1)); 1301 break; 1302 } 1303 case 2: { 1304 sink_(GetEmit26(index, (op >> 2) + 0)); 1305 break; 1306 } 1307 } 1308 return; 1309 } 1310 case 0: { 1311 return; 1312 } 1313 } 1314 } 1315 F sink_; 1316 const uint8_t* begin_; 1317 const uint8_t* const end_; 1318 uint64_t buffer_ = 0; 1319 int buffer_len_ = 0; 1320 bool ok_ = true; 1321 bool done_ = false; 1322 }; 1323 } // namespace geometry_7_9_14 1324 } // namespace grpc_core 1325 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_7_9_14_H 1326