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