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_11_6_13_H 19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_6_13_H 20 #include <cstddef> 21 #include <cstdint> 22 23 #include <grpc/support/port_platform.h> 24 namespace grpc_core { 25 namespace geometry_11_6_13 { 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 } GetOp1(size_t i)60 static inline uint64_t GetOp1(size_t i) { 61 return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]]; 62 } GetEmit1(size_t i,size_t emit)63 static inline uint64_t GetEmit1(size_t i, size_t emit) { 64 return table1_emit_[i >> 6][emit]; 65 } GetOp8(size_t i)66 static inline uint64_t GetOp8(size_t i) { return i ? 3 : 1; } GetEmit8(size_t,size_t emit)67 static inline uint64_t GetEmit8(size_t, size_t emit) { 68 return emit ? 62 : 35; 69 } GetOp9(size_t i)70 static inline uint64_t GetOp9(size_t i) { 71 return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10)); 72 } GetEmit9(size_t,size_t emit)73 static inline uint64_t GetEmit9(size_t, size_t emit) { 74 return (emit < 2 ? (emit ? 36 : 0) : ((emit - 2) ? 91 : 64)); 75 } GetOp11(size_t i)76 static inline uint64_t GetOp11(size_t i) { 77 return (i < 2 ? (i ? 4 : 0) : ((i - 2) + 1)); 78 } GetEmit11(size_t,size_t emit)79 static inline uint64_t GetEmit11(size_t, size_t emit) { 80 return emit ? 126 : 93; 81 } GetOp12(size_t i)82 static inline uint64_t GetOp12(size_t i) { 83 return table12_0_inner_[table12_0_outer_[i]]; 84 } GetEmit12(size_t,size_t emit)85 static inline uint64_t GetEmit12(size_t, size_t emit) { 86 return (emit < 2 ? (emit ? 126 : 93) : ((emit - 2) ? 125 : 94)); 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 table13_0_emit_[emit]; 93 } GetOp14(size_t i)94 static inline uint64_t GetOp14(size_t i) { return table14_0_ops_[i]; } GetEmit14(size_t,size_t emit)95 static inline uint64_t GetEmit14(size_t, size_t emit) { 96 return table13_0_emit_[emit]; 97 } GetOp10(size_t i)98 static inline uint64_t GetOp10(size_t i) { 99 return table10_0_inner_[table10_0_outer_[i]]; 100 } GetEmit10(size_t,size_t emit)101 static inline uint64_t GetEmit10(size_t, size_t emit) { 102 return table13_0_emit_[emit]; 103 } GetOp16(size_t i)104 static inline uint64_t GetOp16(size_t i) { 105 return (i < 2 ? (i ? 2 : 0) : ((i - 2) ? 1 : 4)); 106 } GetEmit16(size_t,size_t emit)107 static inline uint64_t GetEmit16(size_t, size_t emit) { 108 return (emit < 1 ? (((void)emit, 92)) : ((emit - 1) ? 208 : 195)); 109 } GetOp15(size_t i)110 static inline uint64_t GetOp15(size_t i) { 111 return table15_0_inner_[(i < 5 ? (i / 2 + 0) : ((i - 5) + 2))]; 112 } GetEmit15(size_t,size_t emit)113 static inline uint64_t GetEmit15(size_t, size_t emit) { 114 return table15_0_emit_[emit]; 115 } GetOp18(size_t i)116 static inline uint64_t GetOp18(size_t i) { 117 return table18_0_inner_[(i < 6 ? (i) : (((void)(i - 6), 6)))]; 118 } GetEmit18(size_t,size_t emit)119 static inline uint64_t GetEmit18(size_t, size_t emit) { 120 return table18_0_emit_[emit]; 121 } GetOp17(size_t i)122 static inline uint64_t GetOp17(size_t i) { 123 return table17_0_inner_[(i < 11 ? (i / 2 + 0) : ((i - 11) + 5))]; 124 } GetEmit17(size_t,size_t emit)125 static inline uint64_t GetEmit17(size_t, size_t emit) { 126 return table17_0_emit_[emit]; 127 } GetOp20(size_t i)128 static inline uint64_t GetOp20(size_t i) { 129 return table20_0_inner_[(i < 9 ? (i) : (((void)(i - 9), 9)))]; 130 } GetEmit20(size_t,size_t emit)131 static inline uint64_t GetEmit20(size_t, size_t emit) { 132 return table20_0_emit_[emit]; 133 } GetOp19(size_t i)134 static inline uint64_t GetOp19(size_t i) { return table19_0_ops_[i]; } GetEmit19(size_t,size_t emit)135 static inline uint64_t GetEmit19(size_t, size_t emit) { 136 return table19_0_emit_[emit]; 137 } GetOp22(size_t i)138 static inline uint64_t GetOp22(size_t i) { return table22_0_ops_[i]; } GetEmit22(size_t,size_t emit)139 static inline uint64_t GetEmit22(size_t, size_t emit) { 140 return table22_0_emit_[emit]; 141 } GetOp23(size_t i)142 static inline uint64_t GetOp23(size_t i) { return table23_0_ops_[i]; } GetEmit23(size_t,size_t emit)143 static inline uint64_t GetEmit23(size_t, size_t emit) { 144 return table23_0_emit_[emit]; 145 } GetOp24(size_t i)146 static inline uint64_t GetOp24(size_t i) { return table24_0_ops_[i]; } GetEmit24(size_t,size_t emit)147 static inline uint64_t GetEmit24(size_t, size_t emit) { 148 return table24_0_emit_[emit]; 149 } GetOp25(size_t i)150 static inline uint64_t GetOp25(size_t i) { return table25_0_ops_[i]; } GetEmit25(size_t,size_t emit)151 static inline uint64_t GetEmit25(size_t, size_t emit) { 152 return table25_0_emit_[emit]; 153 } GetOp26(size_t i)154 static inline uint64_t GetOp26(size_t i) { 155 return table26_ops_[i >> 6][i & 0x3f]; 156 } GetEmit26(size_t i,size_t emit)157 static inline uint64_t GetEmit26(size_t i, size_t emit) { 158 return table26_emit_[i >> 6][emit]; 159 } GetOp27(size_t i)160 static inline uint64_t GetOp27(size_t i) { 161 return table27_ops_[i >> 6][i & 0x3f]; 162 } GetEmit27(size_t i,size_t emit)163 static inline uint64_t GetEmit27(size_t i, size_t emit) { 164 return table27_emit_[i >> 6][emit]; 165 } GetOp28(size_t i)166 static inline uint64_t GetOp28(size_t i) { 167 return table28_ops_[i >> 7][i & 0x7f]; 168 } GetEmit28(size_t i,size_t emit)169 static inline uint64_t GetEmit28(size_t i, size_t emit) { 170 return table28_emit_[i >> 7][emit]; 171 } GetOp29(size_t i)172 static inline uint64_t GetOp29(size_t i) { 173 return table29_ops_[i >> 7][i & 0x7f]; 174 } GetEmit29(size_t i,size_t emit)175 static inline uint64_t GetEmit29(size_t i, size_t emit) { 176 return table29_emit_[i >> 7][emit]; 177 } GetOp21(size_t i)178 static inline uint64_t GetOp21(size_t i) { 179 return table21_ops_[i >> 7][i & 0x7f]; 180 } GetEmit21(size_t i,size_t emit)181 static inline uint64_t GetEmit21(size_t i, size_t emit) { 182 return table21_emit_[i >> 7][emit]; 183 } 184 185 private: 186 static const uint8_t table2_0_emit_[10]; 187 static const uint8_t table2_0_ops_[32]; 188 static const uint8_t table3_0_emit_[36]; 189 static const uint8_t table3_0_ops_[64]; 190 static const uint8_t table4_0_emit_[22]; 191 static const uint8_t table4_0_ops_[64]; 192 static const uint8_t table4_1_emit_[46]; 193 static const uint8_t table4_1_ops_[64]; 194 static const uint8_t* const table4_emit_[2]; 195 static const uint8_t* const table4_ops_[2]; 196 static const uint8_t table5_0_ops_[128]; 197 static const uint8_t table5_1_emit_[52]; 198 static const uint8_t table5_1_ops_[128]; 199 static const uint8_t* const table5_emit_[2]; 200 static const uint8_t* const table5_ops_[2]; 201 static const uint8_t table6_0_emit_[2]; 202 static const uint8_t table6_0_ops_[32]; 203 static const uint8_t table6_1_emit_[2]; 204 static const uint8_t table6_2_emit_[2]; 205 static const uint8_t table6_3_emit_[2]; 206 static const uint8_t table6_4_emit_[2]; 207 static const uint8_t table6_5_emit_[4]; 208 static const uint8_t table6_5_ops_[32]; 209 static const uint8_t table6_6_emit_[4]; 210 static const uint8_t table6_7_emit_[4]; 211 static const uint8_t table6_8_emit_[4]; 212 static const uint8_t table6_9_emit_[4]; 213 static const uint8_t table6_10_emit_[4]; 214 static const uint8_t table6_11_emit_[6]; 215 static const uint8_t table6_11_ops_[32]; 216 static const uint8_t table6_12_emit_[8]; 217 static const uint8_t table6_12_ops_[32]; 218 static const uint8_t table6_13_emit_[8]; 219 static const uint8_t table6_14_emit_[8]; 220 static const uint8_t table6_15_emit_[10]; 221 static const uint8_t table6_15_ops_[32]; 222 static const uint8_t* const table6_emit_[16]; 223 static const uint8_t* const table6_ops_[16]; 224 static const uint8_t table7_0_emit_[36]; 225 static const uint8_t table7_0_ops_[64]; 226 static const uint8_t table7_1_emit_[36]; 227 static const uint8_t table7_1_ops_[64]; 228 static const uint8_t table7_2_emit_[36]; 229 static const uint8_t table7_2_ops_[64]; 230 static const uint8_t table7_3_emit_[36]; 231 static const uint8_t table7_3_ops_[64]; 232 static const uint8_t table7_4_emit_[38]; 233 static const uint8_t table7_4_ops_[64]; 234 static const uint8_t table7_5_ops_[64]; 235 static const uint8_t table7_11_ops_[64]; 236 static const uint8_t table7_12_ops_[64]; 237 static const uint8_t table7_15_emit_[15]; 238 static const uint8_t table7_15_ops_[64]; 239 static const uint8_t* const table7_emit_[16]; 240 static const uint8_t* const table7_ops_[16]; 241 static const uint8_t table1_0_emit_[71]; 242 static const uint16_t table1_0_inner_[37]; 243 static const uint8_t table1_0_outer_[64]; 244 static const uint8_t table1_1_emit_[71]; 245 static const uint16_t table1_1_inner_[37]; 246 static const uint8_t table1_2_emit_[71]; 247 static const uint16_t table1_2_inner_[37]; 248 static const uint8_t table1_3_emit_[71]; 249 static const uint16_t table1_3_inner_[37]; 250 static const uint8_t table1_4_emit_[71]; 251 static const uint16_t table1_4_inner_[37]; 252 static const uint8_t table1_5_emit_[71]; 253 static const uint16_t table1_5_inner_[37]; 254 static const uint8_t table1_6_emit_[71]; 255 static const uint16_t table1_6_inner_[37]; 256 static const uint8_t table1_7_emit_[71]; 257 static const uint16_t table1_7_inner_[37]; 258 static const uint8_t table1_8_emit_[71]; 259 static const uint16_t table1_8_inner_[37]; 260 static const uint8_t table1_9_emit_[71]; 261 static const uint16_t table1_9_inner_[37]; 262 static const uint8_t table1_10_emit_[40]; 263 static const uint16_t table1_10_inner_[22]; 264 static const uint8_t table1_10_outer_[64]; 265 static const uint8_t table1_11_emit_[40]; 266 static const uint8_t table1_12_emit_[40]; 267 static const uint8_t table1_13_emit_[40]; 268 static const uint8_t table1_14_emit_[40]; 269 static const uint8_t table1_15_emit_[40]; 270 static const uint8_t table1_16_emit_[40]; 271 static const uint8_t table1_17_emit_[40]; 272 static const uint8_t table1_18_emit_[40]; 273 static const uint8_t table1_19_emit_[40]; 274 static const uint8_t table1_20_emit_[40]; 275 static const uint8_t table1_21_emit_[40]; 276 static const uint8_t table1_22_emit_[40]; 277 static const uint8_t table1_23_emit_[4]; 278 static const uint16_t table1_23_inner_[4]; 279 static const uint8_t table1_23_outer_[64]; 280 static const uint8_t table1_24_emit_[4]; 281 static const uint8_t table1_25_emit_[4]; 282 static const uint8_t table1_26_emit_[4]; 283 static const uint8_t table1_27_emit_[4]; 284 static const uint8_t table1_28_emit_[4]; 285 static const uint8_t table1_29_emit_[4]; 286 static const uint8_t table1_30_emit_[4]; 287 static const uint8_t table1_31_emit_[14]; 288 static const uint16_t table1_31_inner_[17]; 289 static const uint8_t table1_31_outer_[64]; 290 static const uint8_t* const table1_emit_[32]; 291 static const uint16_t* const table1_inner_[32]; 292 static const uint8_t* const table1_outer_[32]; 293 static const uint8_t table12_0_inner_[6]; 294 static const uint8_t table12_0_outer_[8]; 295 static const uint8_t table13_0_emit_[7]; 296 static const uint8_t table13_0_inner_[9]; 297 static const uint8_t table13_0_outer_[16]; 298 static const uint8_t table14_0_ops_[32]; 299 static const uint16_t table10_0_inner_[11]; 300 static const uint8_t table10_0_outer_[64]; 301 static const uint8_t table15_0_emit_[5]; 302 static const uint8_t table15_0_inner_[5]; 303 static const uint8_t table18_0_emit_[6]; 304 static const uint8_t table18_0_inner_[7]; 305 static const uint8_t table17_0_emit_[10]; 306 static const uint8_t table17_0_inner_[10]; 307 static const uint8_t table20_0_emit_[9]; 308 static const uint8_t table20_0_inner_[10]; 309 static const uint8_t table19_0_emit_[23]; 310 static const uint8_t table19_0_ops_[32]; 311 static const uint8_t table22_0_emit_[12]; 312 static const uint8_t table22_0_ops_[32]; 313 static const uint8_t table23_0_emit_[41]; 314 static const uint8_t table23_0_ops_[64]; 315 static const uint8_t table24_0_emit_[53]; 316 static const uint8_t table24_0_ops_[128]; 317 static const uint8_t table25_0_emit_[57]; 318 static const uint8_t table25_0_ops_[256]; 319 static const uint8_t table26_0_emit_[4]; 320 static const uint8_t table26_0_ops_[64]; 321 static const uint8_t table26_1_emit_[4]; 322 static const uint8_t table26_2_emit_[4]; 323 static const uint8_t table26_3_emit_[8]; 324 static const uint8_t table26_3_ops_[64]; 325 static const uint8_t table26_4_emit_[8]; 326 static const uint8_t table26_5_emit_[8]; 327 static const uint8_t table26_6_emit_[11]; 328 static const uint8_t table26_6_ops_[64]; 329 static const uint8_t table26_7_emit_[25]; 330 static const uint8_t table26_7_ops_[64]; 331 static const uint8_t* const table26_emit_[8]; 332 static const uint8_t* const table26_ops_[8]; 333 static const uint8_t table27_0_emit_[40]; 334 static const uint8_t table27_0_ops_[64]; 335 static const uint8_t table27_1_emit_[40]; 336 static const uint8_t table27_2_emit_[40]; 337 static const uint8_t table27_3_emit_[40]; 338 static const uint8_t table27_4_emit_[40]; 339 static const uint8_t table27_5_emit_[40]; 340 static const uint8_t table27_6_emit_[4]; 341 static const uint8_t table27_7_emit_[4]; 342 static const uint8_t table27_8_emit_[4]; 343 static const uint8_t table27_9_emit_[4]; 344 static const uint8_t table27_10_emit_[4]; 345 static const uint8_t table27_11_emit_[4]; 346 static const uint8_t table27_12_emit_[4]; 347 static const uint8_t table27_13_emit_[7]; 348 static const uint8_t table27_13_ops_[64]; 349 static const uint8_t table27_14_emit_[10]; 350 static const uint8_t table27_14_ops_[64]; 351 static const uint8_t table27_15_emit_[34]; 352 static const uint8_t table27_15_ops_[64]; 353 static const uint8_t* const table27_emit_[16]; 354 static const uint8_t* const table27_ops_[16]; 355 static const uint8_t table28_0_emit_[144]; 356 static const uint16_t table28_0_ops_[128]; 357 static const uint8_t table28_1_emit_[144]; 358 static const uint8_t table28_2_emit_[144]; 359 static const uint8_t table28_3_emit_[144]; 360 static const uint8_t table28_4_emit_[144]; 361 static const uint8_t table28_5_emit_[144]; 362 static const uint8_t table28_6_emit_[80]; 363 static const uint16_t table28_6_ops_[128]; 364 static const uint8_t table28_7_emit_[80]; 365 static const uint8_t table28_8_emit_[80]; 366 static const uint8_t table28_9_emit_[80]; 367 static const uint8_t table28_10_emit_[80]; 368 static const uint8_t table28_11_emit_[80]; 369 static const uint8_t table28_12_emit_[80]; 370 static const uint8_t table28_13_emit_[26]; 371 static const uint16_t table28_13_ops_[128]; 372 static const uint16_t table28_14_ops_[128]; 373 static const uint8_t table28_15_emit_[63]; 374 static const uint16_t table28_15_ops_[128]; 375 static const uint8_t* const table28_emit_[16]; 376 static const uint16_t* const table28_ops_[16]; 377 static const uint8_t table29_0_emit_[136]; 378 static const uint16_t table29_0_ops_[128]; 379 static const uint8_t table29_1_emit_[136]; 380 static const uint8_t table29_2_emit_[136]; 381 static const uint8_t table29_3_emit_[136]; 382 static const uint8_t table29_4_emit_[136]; 383 static const uint8_t table29_5_emit_[136]; 384 static const uint8_t table29_6_emit_[136]; 385 static const uint8_t table29_7_emit_[136]; 386 static const uint8_t table29_8_emit_[136]; 387 static const uint8_t table29_9_emit_[136]; 388 static const uint8_t table29_10_emit_[136]; 389 static const uint8_t table29_11_emit_[136]; 390 static const uint8_t table29_12_emit_[144]; 391 static const uint8_t table29_13_emit_[144]; 392 static const uint8_t table29_14_emit_[144]; 393 static const uint8_t table29_15_emit_[144]; 394 static const uint8_t table29_16_emit_[144]; 395 static const uint8_t table29_17_emit_[144]; 396 static const uint8_t table29_18_emit_[144]; 397 static const uint8_t table29_19_emit_[144]; 398 static const uint8_t table29_20_emit_[144]; 399 static const uint8_t table29_21_emit_[144]; 400 static const uint8_t table29_22_emit_[144]; 401 static const uint8_t table29_23_emit_[144]; 402 static const uint8_t table29_24_emit_[144]; 403 static const uint8_t table29_25_emit_[144]; 404 static const uint8_t table29_26_emit_[112]; 405 static const uint16_t table29_26_ops_[128]; 406 static const uint8_t table29_27_emit_[80]; 407 static const uint8_t table29_28_emit_[80]; 408 static const uint8_t table29_29_emit_[44]; 409 static const uint16_t table29_29_ops_[128]; 410 static const uint8_t table29_30_emit_[17]; 411 static const uint16_t table29_30_ops_[128]; 412 static const uint8_t table29_31_emit_[46]; 413 static const uint16_t table29_31_ops_[128]; 414 static const uint8_t* const table29_emit_[32]; 415 static const uint16_t* const table29_ops_[32]; 416 static const uint8_t table21_0_emit_[1]; 417 static const uint16_t table21_0_ops_[128]; 418 static const uint8_t table21_2_emit_[1]; 419 static const uint8_t table21_4_emit_[1]; 420 static const uint8_t table21_6_emit_[1]; 421 static const uint8_t table21_8_emit_[1]; 422 static const uint8_t table21_10_emit_[1]; 423 static const uint8_t table21_12_emit_[1]; 424 static const uint8_t table21_14_emit_[1]; 425 static const uint8_t table21_16_emit_[1]; 426 static const uint8_t table21_18_emit_[1]; 427 static const uint8_t table21_20_emit_[1]; 428 static const uint8_t table21_22_emit_[1]; 429 static const uint8_t table21_24_emit_[1]; 430 static const uint16_t table21_24_ops_[128]; 431 static const uint8_t table21_25_emit_[1]; 432 static const uint8_t table21_26_emit_[1]; 433 static const uint8_t table21_27_emit_[1]; 434 static const uint8_t table21_28_emit_[1]; 435 static const uint8_t table21_29_emit_[1]; 436 static const uint8_t table21_30_emit_[1]; 437 static const uint8_t table21_31_emit_[1]; 438 static const uint8_t table21_32_emit_[1]; 439 static const uint8_t table21_33_emit_[1]; 440 static const uint8_t table21_34_emit_[1]; 441 static const uint8_t table21_35_emit_[1]; 442 static const uint8_t table21_36_emit_[1]; 443 static const uint8_t table21_37_emit_[1]; 444 static const uint8_t table21_38_emit_[1]; 445 static const uint8_t table21_39_emit_[1]; 446 static const uint8_t table21_40_emit_[1]; 447 static const uint8_t table21_41_emit_[1]; 448 static const uint8_t table21_42_emit_[1]; 449 static const uint8_t table21_43_emit_[1]; 450 static const uint8_t table21_44_emit_[1]; 451 static const uint8_t table21_45_emit_[1]; 452 static const uint8_t table21_46_emit_[1]; 453 static const uint8_t table21_47_emit_[1]; 454 static const uint8_t table21_48_emit_[1]; 455 static const uint8_t table21_49_emit_[1]; 456 static const uint8_t table21_50_emit_[1]; 457 static const uint8_t table21_51_emit_[1]; 458 static const uint8_t table21_52_emit_[1]; 459 static const uint8_t table21_53_emit_[2]; 460 static const uint16_t table21_53_ops_[128]; 461 static const uint8_t table21_54_emit_[2]; 462 static const uint8_t table21_55_emit_[2]; 463 static const uint8_t table21_56_emit_[2]; 464 static const uint8_t table21_57_emit_[2]; 465 static const uint8_t table21_58_emit_[2]; 466 static const uint8_t table21_59_emit_[4]; 467 static const uint16_t table21_59_ops_[128]; 468 static const uint8_t table21_60_emit_[8]; 469 static const uint16_t table21_60_ops_[128]; 470 static const uint8_t table21_61_emit_[9]; 471 static const uint16_t table21_61_ops_[128]; 472 static const uint8_t table21_62_emit_[16]; 473 static const uint16_t table21_62_ops_[128]; 474 static const uint8_t table21_63_emit_[33]; 475 static const uint16_t table21_63_ops_[128]; 476 static const uint8_t* const table21_emit_[64]; 477 static const uint16_t* const table21_ops_[64]; 478 }; 479 template <typename F> 480 class HuffDecoder : public HuffDecoderCommon { 481 public: HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)482 HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end) 483 : sink_(sink), begin_(begin), end_(end) {} Run()484 bool Run() { 485 while (!done_) { 486 if (!RefillTo11()) { 487 Done0(); 488 break; 489 } 490 const auto index = (buffer_ >> (buffer_len_ - 11)) & 0x7ff; 491 const auto op = GetOp1(index); 492 const int consumed = op & 15; 493 buffer_len_ -= consumed; 494 const auto emit_ofs = op >> 7; 495 switch ((op >> 4) & 7) { 496 case 0: { 497 sink_(GetEmit1(index, emit_ofs + 0)); 498 sink_(GetEmit1(index, emit_ofs + 1)); 499 break; 500 } 501 case 1: { 502 sink_(GetEmit1(index, emit_ofs + 0)); 503 break; 504 } 505 case 2: { 506 DecodeStep0(); 507 break; 508 } 509 case 3: { 510 DecodeStep1(); 511 break; 512 } 513 case 4: { 514 DecodeStep2(); 515 break; 516 } 517 } 518 } 519 return ok_; 520 } 521 522 private: RefillTo11()523 bool RefillTo11() { 524 switch (buffer_len_) { 525 case 0: { 526 return Read2to8Bytes(); 527 } 528 case 1: 529 case 2: { 530 return Read2to7Bytes(); 531 } 532 case 3: 533 case 4: 534 case 5: 535 case 6: 536 case 7: 537 case 8: { 538 return Read1to7Bytes(); 539 } 540 case 9: 541 case 10: { 542 return Read1to6Bytes(); 543 } 544 } 545 return true; 546 } Read2to8Bytes()547 bool Read2to8Bytes() { 548 switch (end_ - begin_) { 549 case 0: 550 case 1: { 551 return false; 552 } 553 case 2: { 554 Fill2(); 555 return true; 556 } 557 case 3: { 558 Fill3(); 559 return true; 560 } 561 case 4: { 562 Fill4(); 563 return true; 564 } 565 case 5: { 566 Fill5(); 567 return true; 568 } 569 case 6: { 570 Fill6(); 571 return true; 572 } 573 case 7: { 574 Fill7(); 575 return true; 576 } 577 default: { 578 Fill8(); 579 return true; 580 } 581 } 582 } Fill2()583 void Fill2() { 584 buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) | 585 (static_cast<uint64_t>(begin_[1]) << 0); 586 begin_ += 2; 587 buffer_len_ += 16; 588 } Fill3()589 void Fill3() { 590 buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) | 591 (static_cast<uint64_t>(begin_[1]) << 8) | 592 (static_cast<uint64_t>(begin_[2]) << 0); 593 begin_ += 3; 594 buffer_len_ += 24; 595 } Fill4()596 void Fill4() { 597 buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) | 598 (static_cast<uint64_t>(begin_[1]) << 16) | 599 (static_cast<uint64_t>(begin_[2]) << 8) | 600 (static_cast<uint64_t>(begin_[3]) << 0); 601 begin_ += 4; 602 buffer_len_ += 32; 603 } Fill5()604 void Fill5() { 605 buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) | 606 (static_cast<uint64_t>(begin_[1]) << 24) | 607 (static_cast<uint64_t>(begin_[2]) << 16) | 608 (static_cast<uint64_t>(begin_[3]) << 8) | 609 (static_cast<uint64_t>(begin_[4]) << 0); 610 begin_ += 5; 611 buffer_len_ += 40; 612 } Fill6()613 void Fill6() { 614 buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) | 615 (static_cast<uint64_t>(begin_[1]) << 32) | 616 (static_cast<uint64_t>(begin_[2]) << 24) | 617 (static_cast<uint64_t>(begin_[3]) << 16) | 618 (static_cast<uint64_t>(begin_[4]) << 8) | 619 (static_cast<uint64_t>(begin_[5]) << 0); 620 begin_ += 6; 621 buffer_len_ += 48; 622 } Fill7()623 void Fill7() { 624 buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) | 625 (static_cast<uint64_t>(begin_[1]) << 40) | 626 (static_cast<uint64_t>(begin_[2]) << 32) | 627 (static_cast<uint64_t>(begin_[3]) << 24) | 628 (static_cast<uint64_t>(begin_[4]) << 16) | 629 (static_cast<uint64_t>(begin_[5]) << 8) | 630 (static_cast<uint64_t>(begin_[6]) << 0); 631 begin_ += 7; 632 buffer_len_ += 56; 633 } Fill8()634 void Fill8() { 635 buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) | 636 (static_cast<uint64_t>(begin_[1]) << 48) | 637 (static_cast<uint64_t>(begin_[2]) << 40) | 638 (static_cast<uint64_t>(begin_[3]) << 32) | 639 (static_cast<uint64_t>(begin_[4]) << 24) | 640 (static_cast<uint64_t>(begin_[5]) << 16) | 641 (static_cast<uint64_t>(begin_[6]) << 8) | 642 (static_cast<uint64_t>(begin_[7]) << 0); 643 begin_ += 8; 644 buffer_len_ += 64; 645 } Read2to7Bytes()646 bool Read2to7Bytes() { 647 switch (end_ - begin_) { 648 case 0: 649 case 1: { 650 return false; 651 } 652 case 2: { 653 Fill2(); 654 return true; 655 } 656 case 3: { 657 Fill3(); 658 return true; 659 } 660 case 4: { 661 Fill4(); 662 return true; 663 } 664 case 5: { 665 Fill5(); 666 return true; 667 } 668 case 6: { 669 Fill6(); 670 return true; 671 } 672 default: { 673 Fill7(); 674 return true; 675 } 676 } 677 } Read1to7Bytes()678 bool Read1to7Bytes() { 679 switch (end_ - begin_) { 680 case 0: { 681 return false; 682 } 683 case 1: { 684 Fill1(); 685 return true; 686 } 687 case 2: { 688 Fill2(); 689 return true; 690 } 691 case 3: { 692 Fill3(); 693 return true; 694 } 695 case 4: { 696 Fill4(); 697 return true; 698 } 699 case 5: { 700 Fill5(); 701 return true; 702 } 703 case 6: { 704 Fill6(); 705 return true; 706 } 707 default: { 708 Fill7(); 709 return true; 710 } 711 } 712 } Fill1()713 void Fill1() { 714 buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0); 715 begin_ += 1; 716 buffer_len_ += 8; 717 } Read1to6Bytes()718 bool Read1to6Bytes() { 719 switch (end_ - begin_) { 720 case 0: { 721 return false; 722 } 723 case 1: { 724 Fill1(); 725 return true; 726 } 727 case 2: { 728 Fill2(); 729 return true; 730 } 731 case 3: { 732 Fill3(); 733 return true; 734 } 735 case 4: { 736 Fill4(); 737 return true; 738 } 739 case 5: { 740 Fill5(); 741 return true; 742 } 743 default: { 744 Fill6(); 745 return true; 746 } 747 } 748 } Done0()749 void Done0() { 750 done_ = true; 751 switch (end_ - begin_) { 752 case 1: { 753 Fill1(); 754 break; 755 } 756 } 757 switch (buffer_len_) { 758 case 1: 759 case 2: 760 case 3: 761 case 4: { 762 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 763 return; 764 } 765 case 5: { 766 const auto index = buffer_ & 31; 767 const auto op = GetOp2(index); 768 switch (op & 3) { 769 case 0: { 770 sink_(GetEmit2(index, (op >> 2) + 0)); 771 break; 772 } 773 case 1: { 774 ok_ = false; 775 break; 776 } 777 } 778 return; 779 } 780 case 6: { 781 const auto index = buffer_ & 63; 782 const auto op = GetOp3(index); 783 switch (op & 3) { 784 case 0: { 785 ok_ = false; 786 break; 787 } 788 case 1: { 789 sink_(GetEmit3(index, (op >> 2) + 0)); 790 break; 791 } 792 } 793 return; 794 } 795 case 7: { 796 const auto index = buffer_ & 127; 797 const auto op = GetOp4(index); 798 switch (op & 3) { 799 case 0: { 800 ok_ = false; 801 break; 802 } 803 case 1: { 804 sink_(GetEmit4(index, (op >> 2) + 0)); 805 break; 806 } 807 } 808 return; 809 } 810 case 8: { 811 const auto index = buffer_ & 255; 812 const auto op = GetOp5(index); 813 switch (op & 3) { 814 case 0: { 815 ok_ = false; 816 break; 817 } 818 case 1: { 819 sink_(GetEmit5(index, (op >> 2) + 0)); 820 break; 821 } 822 } 823 return; 824 } 825 case 9: { 826 const auto index = buffer_ & 511; 827 const auto op = GetOp6(index); 828 switch (op & 3) { 829 case 0: { 830 ok_ = false; 831 break; 832 } 833 case 1: { 834 sink_(GetEmit6(index, (op >> 2) + 0)); 835 break; 836 } 837 } 838 return; 839 } 840 case 10: { 841 const auto index = buffer_ & 1023; 842 const auto op = GetOp7(index); 843 switch (op & 3) { 844 case 0: { 845 sink_(GetEmit7(index, (op >> 2) + 0)); 846 sink_(GetEmit7(index, (op >> 2) + 1)); 847 break; 848 } 849 case 1: { 850 ok_ = false; 851 break; 852 } 853 case 2: { 854 sink_(GetEmit7(index, (op >> 2) + 0)); 855 break; 856 } 857 } 858 return; 859 } 860 case 0: { 861 return; 862 } 863 } 864 } DecodeStep0()865 void DecodeStep0() { 866 if (!RefillTo1()) { 867 Done1(); 868 return; 869 } 870 const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1; 871 const auto op = GetOp8(index); 872 const int consumed = op & 1; 873 buffer_len_ -= consumed; 874 const auto emit_ofs = op >> 1; 875 sink_(GetEmit8(index, emit_ofs + 0)); 876 } RefillTo1()877 bool RefillTo1() { 878 switch (buffer_len_) { 879 case 0: { 880 return Read1to8Bytes(); 881 } 882 } 883 return true; 884 } Read1to8Bytes()885 bool Read1to8Bytes() { 886 switch (end_ - begin_) { 887 case 0: { 888 return false; 889 } 890 case 1: { 891 Fill1(); 892 return true; 893 } 894 case 2: { 895 Fill2(); 896 return true; 897 } 898 case 3: { 899 Fill3(); 900 return true; 901 } 902 case 4: { 903 Fill4(); 904 return true; 905 } 906 case 5: { 907 Fill5(); 908 return true; 909 } 910 case 6: { 911 Fill6(); 912 return true; 913 } 914 case 7: { 915 Fill7(); 916 return true; 917 } 918 default: { 919 Fill8(); 920 return true; 921 } 922 } 923 } Done1()924 void Done1() { 925 done_ = true; 926 ok_ = false; 927 } DecodeStep1()928 void DecodeStep1() { 929 if (!RefillTo2()) { 930 Done2(); 931 return; 932 } 933 const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3; 934 const auto op = GetOp9(index); 935 const int consumed = op & 3; 936 buffer_len_ -= consumed; 937 const auto emit_ofs = op >> 2; 938 sink_(GetEmit9(index, emit_ofs + 0)); 939 } RefillTo2()940 bool RefillTo2() { 941 switch (buffer_len_) { 942 case 0: { 943 return Read1to8Bytes(); 944 } 945 case 1: { 946 return Read1to7Bytes(); 947 } 948 } 949 return true; 950 } Done2()951 void Done2() { 952 done_ = true; 953 switch (buffer_len_) { 954 case 1: 955 case 0: { 956 ok_ = false; 957 return; 958 } 959 } 960 } DecodeStep2()961 void DecodeStep2() { 962 if (!RefillTo6()) { 963 Done3(); 964 return; 965 } 966 const auto index = (buffer_ >> (buffer_len_ - 6)) & 0x3f; 967 const auto op = GetOp10(index); 968 const int consumed = op & 7; 969 buffer_len_ -= consumed; 970 const auto emit_ofs = op >> 6; 971 switch ((op >> 3) & 7) { 972 case 0: { 973 sink_(GetEmit10(index, emit_ofs + 0)); 974 break; 975 } 976 case 1: { 977 DecodeStep3(); 978 break; 979 } 980 case 2: { 981 DecodeStep4(); 982 break; 983 } 984 case 3: { 985 DecodeStep5(); 986 break; 987 } 988 case 4: { 989 DecodeStep6(); 990 break; 991 } 992 } 993 } RefillTo6()994 bool RefillTo6() { 995 switch (buffer_len_) { 996 case 0: { 997 return Read1to8Bytes(); 998 } 999 case 1: 1000 case 2: 1001 case 3: 1002 case 4: 1003 case 5: { 1004 return Read1to7Bytes(); 1005 } 1006 } 1007 return true; 1008 } Done3()1009 void Done3() { 1010 done_ = true; 1011 switch (buffer_len_) { 1012 case 1: { 1013 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1014 return; 1015 } 1016 case 2: { 1017 const auto index = buffer_ & 3; 1018 const auto op = GetOp11(index); 1019 switch (op & 3) { 1020 case 0: { 1021 sink_(GetEmit11(index, (op >> 2) + 0)); 1022 break; 1023 } 1024 case 1: { 1025 ok_ = false; 1026 break; 1027 } 1028 } 1029 return; 1030 } 1031 case 3: { 1032 const auto index = buffer_ & 7; 1033 const auto op = GetOp12(index); 1034 switch (op & 3) { 1035 case 0: { 1036 ok_ = false; 1037 break; 1038 } 1039 case 1: { 1040 sink_(GetEmit12(index, (op >> 2) + 0)); 1041 break; 1042 } 1043 } 1044 return; 1045 } 1046 case 4: { 1047 const auto index = buffer_ & 15; 1048 const auto op = GetOp13(index); 1049 switch (op & 3) { 1050 case 0: { 1051 ok_ = false; 1052 break; 1053 } 1054 case 1: { 1055 sink_(GetEmit13(index, (op >> 2) + 0)); 1056 break; 1057 } 1058 } 1059 return; 1060 } 1061 case 5: { 1062 const auto index = buffer_ & 31; 1063 const auto op = GetOp14(index); 1064 switch (op & 3) { 1065 case 0: { 1066 ok_ = false; 1067 break; 1068 } 1069 case 1: { 1070 sink_(GetEmit14(index, (op >> 2) + 0)); 1071 break; 1072 } 1073 } 1074 return; 1075 } 1076 case 0: { 1077 return; 1078 } 1079 } 1080 } DecodeStep3()1081 void DecodeStep3() { 1082 if (!RefillTo3()) { 1083 Done4(); 1084 return; 1085 } 1086 const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7; 1087 const auto op = GetOp15(index); 1088 const int consumed = op & 3; 1089 buffer_len_ -= consumed; 1090 const auto emit_ofs = op >> 2; 1091 sink_(GetEmit15(index, emit_ofs + 0)); 1092 } RefillTo3()1093 bool RefillTo3() { 1094 switch (buffer_len_) { 1095 case 0: { 1096 return Read1to8Bytes(); 1097 } 1098 case 1: 1099 case 2: { 1100 return Read1to7Bytes(); 1101 } 1102 } 1103 return true; 1104 } Done4()1105 void Done4() { 1106 done_ = true; 1107 switch (buffer_len_) { 1108 case 1: 1109 case 0: { 1110 ok_ = false; 1111 return; 1112 } 1113 case 2: { 1114 const auto index = buffer_ & 3; 1115 const auto op = GetOp16(index); 1116 switch (op & 1) { 1117 case 0: { 1118 sink_(GetEmit16(index, (op >> 1) + 0)); 1119 break; 1120 } 1121 case 1: { 1122 ok_ = false; 1123 break; 1124 } 1125 } 1126 return; 1127 } 1128 } 1129 } DecodeStep4()1130 void DecodeStep4() { 1131 if (!RefillTo4()) { 1132 Done5(); 1133 return; 1134 } 1135 const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf; 1136 const auto op = GetOp17(index); 1137 const int consumed = op & 7; 1138 buffer_len_ -= consumed; 1139 const auto emit_ofs = op >> 3; 1140 sink_(GetEmit17(index, emit_ofs + 0)); 1141 } RefillTo4()1142 bool RefillTo4() { 1143 switch (buffer_len_) { 1144 case 0: { 1145 return Read1to8Bytes(); 1146 } 1147 case 1: 1148 case 2: 1149 case 3: { 1150 return Read1to7Bytes(); 1151 } 1152 } 1153 return true; 1154 } Done5()1155 void Done5() { 1156 done_ = true; 1157 switch (buffer_len_) { 1158 case 1: 1159 case 2: 1160 case 0: { 1161 ok_ = false; 1162 return; 1163 } 1164 case 3: { 1165 const auto index = buffer_ & 7; 1166 const auto op = GetOp18(index); 1167 switch (op & 1) { 1168 case 0: { 1169 sink_(GetEmit18(index, (op >> 1) + 0)); 1170 break; 1171 } 1172 case 1: { 1173 ok_ = false; 1174 break; 1175 } 1176 } 1177 return; 1178 } 1179 } 1180 } DecodeStep5()1181 void DecodeStep5() { 1182 if (!RefillTo5()) { 1183 Done6(); 1184 return; 1185 } 1186 const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f; 1187 const auto op = GetOp19(index); 1188 const int consumed = op & 7; 1189 buffer_len_ -= consumed; 1190 const auto emit_ofs = op >> 3; 1191 sink_(GetEmit19(index, emit_ofs + 0)); 1192 } RefillTo5()1193 bool RefillTo5() { 1194 switch (buffer_len_) { 1195 case 0: { 1196 return Read1to8Bytes(); 1197 } 1198 case 1: 1199 case 2: 1200 case 3: 1201 case 4: { 1202 return Read1to7Bytes(); 1203 } 1204 } 1205 return true; 1206 } Done6()1207 void Done6() { 1208 done_ = true; 1209 switch (buffer_len_) { 1210 case 1: 1211 case 2: 1212 case 3: 1213 case 0: { 1214 ok_ = false; 1215 return; 1216 } 1217 case 4: { 1218 const auto index = buffer_ & 15; 1219 const auto op = GetOp20(index); 1220 switch (op & 1) { 1221 case 0: { 1222 sink_(GetEmit20(index, (op >> 1) + 0)); 1223 break; 1224 } 1225 case 1: { 1226 ok_ = false; 1227 break; 1228 } 1229 } 1230 return; 1231 } 1232 } 1233 } DecodeStep6()1234 void DecodeStep6() { 1235 if (!RefillTo13()) { 1236 Done7(); 1237 return; 1238 } 1239 const auto index = (buffer_ >> (buffer_len_ - 13)) & 0x1fff; 1240 const auto op = GetOp21(index); 1241 const int consumed = op & 15; 1242 buffer_len_ -= consumed; 1243 const auto emit_ofs = op >> 5; 1244 switch ((op >> 4) & 1) { 1245 case 0: { 1246 sink_(GetEmit21(index, emit_ofs + 0)); 1247 break; 1248 } 1249 case 1: { 1250 begin_ = end_; 1251 buffer_len_ = 0; 1252 break; 1253 } 1254 } 1255 } RefillTo13()1256 bool RefillTo13() { 1257 switch (buffer_len_) { 1258 case 0: { 1259 return Read2to8Bytes(); 1260 } 1261 case 1: 1262 case 2: 1263 case 3: 1264 case 4: { 1265 return Read2to7Bytes(); 1266 } 1267 case 5: 1268 case 6: 1269 case 7: 1270 case 8: { 1271 return Read1to7Bytes(); 1272 } 1273 case 9: 1274 case 10: 1275 case 11: 1276 case 12: { 1277 return Read1to6Bytes(); 1278 } 1279 } 1280 return true; 1281 } Done7()1282 void Done7() { 1283 done_ = true; 1284 switch (end_ - begin_) { 1285 case 1: { 1286 Fill1(); 1287 break; 1288 } 1289 } 1290 switch (buffer_len_) { 1291 case 1: 1292 case 2: 1293 case 3: 1294 case 4: { 1295 ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1; 1296 return; 1297 } 1298 case 5: { 1299 const auto index = buffer_ & 31; 1300 const auto op = GetOp22(index); 1301 switch (op & 3) { 1302 case 0: { 1303 sink_(GetEmit22(index, (op >> 2) + 0)); 1304 break; 1305 } 1306 case 1: { 1307 ok_ = false; 1308 break; 1309 } 1310 } 1311 return; 1312 } 1313 case 6: { 1314 const auto index = buffer_ & 63; 1315 const auto op = GetOp23(index); 1316 switch (op & 3) { 1317 case 0: { 1318 ok_ = false; 1319 break; 1320 } 1321 case 1: { 1322 sink_(GetEmit23(index, (op >> 2) + 0)); 1323 break; 1324 } 1325 } 1326 return; 1327 } 1328 case 7: { 1329 const auto index = buffer_ & 127; 1330 const auto op = GetOp24(index); 1331 switch (op & 3) { 1332 case 0: { 1333 ok_ = false; 1334 break; 1335 } 1336 case 1: { 1337 sink_(GetEmit24(index, (op >> 2) + 0)); 1338 break; 1339 } 1340 } 1341 return; 1342 } 1343 case 8: { 1344 const auto index = buffer_ & 255; 1345 const auto op = GetOp25(index); 1346 switch (op & 3) { 1347 case 0: { 1348 ok_ = false; 1349 break; 1350 } 1351 case 1: { 1352 sink_(GetEmit25(index, (op >> 2) + 0)); 1353 break; 1354 } 1355 } 1356 return; 1357 } 1358 case 9: { 1359 const auto index = buffer_ & 511; 1360 const auto op = GetOp26(index); 1361 switch (op & 3) { 1362 case 0: { 1363 ok_ = false; 1364 break; 1365 } 1366 case 1: { 1367 sink_(GetEmit26(index, (op >> 2) + 0)); 1368 break; 1369 } 1370 } 1371 return; 1372 } 1373 case 10: { 1374 const auto index = buffer_ & 1023; 1375 const auto op = GetOp27(index); 1376 switch (op & 3) { 1377 case 0: { 1378 sink_(GetEmit27(index, (op >> 2) + 0)); 1379 sink_(GetEmit27(index, (op >> 2) + 1)); 1380 break; 1381 } 1382 case 1: { 1383 ok_ = false; 1384 break; 1385 } 1386 case 2: { 1387 sink_(GetEmit27(index, (op >> 2) + 0)); 1388 break; 1389 } 1390 } 1391 return; 1392 } 1393 case 11: { 1394 const auto index = buffer_ & 2047; 1395 const auto op = GetOp28(index); 1396 switch (op & 3) { 1397 case 0: { 1398 ok_ = false; 1399 break; 1400 } 1401 case 1: { 1402 sink_(GetEmit28(index, (op >> 2) + 0)); 1403 sink_(GetEmit28(index, (op >> 2) + 1)); 1404 break; 1405 } 1406 case 2: { 1407 sink_(GetEmit28(index, (op >> 2) + 0)); 1408 break; 1409 } 1410 } 1411 return; 1412 } 1413 case 12: { 1414 const auto index = buffer_ & 4095; 1415 const auto op = GetOp29(index); 1416 switch (op & 3) { 1417 case 0: { 1418 ok_ = false; 1419 break; 1420 } 1421 case 1: { 1422 sink_(GetEmit29(index, (op >> 2) + 0)); 1423 sink_(GetEmit29(index, (op >> 2) + 1)); 1424 break; 1425 } 1426 case 2: { 1427 sink_(GetEmit29(index, (op >> 2) + 0)); 1428 break; 1429 } 1430 } 1431 return; 1432 } 1433 case 0: { 1434 return; 1435 } 1436 } 1437 } 1438 F sink_; 1439 const uint8_t* begin_; 1440 const uint8_t* const end_; 1441 uint64_t buffer_ = 0; 1442 int buffer_len_ = 0; 1443 bool ok_ = true; 1444 bool done_ = false; 1445 }; 1446 } // namespace geometry_11_6_13 1447 } // namespace grpc_core 1448 #endif // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_6_13_H 1449