xref: /aosp_15_r20/external/grpc-grpc/test/cpp/microbenchmarks/huffman_geometries/decode_huff_11_10_9.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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_10_9_H
19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_10_9_H
20 #include <cstddef>
21 #include <cstdint>
22 
23 #include <grpc/support/port_platform.h>
24 namespace grpc_core {
25 namespace geometry_11_10_9 {
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   }
GetOp15(size_t i)98   static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; }
GetEmit15(size_t,size_t emit)99   static inline uint64_t GetEmit15(size_t, size_t emit) {
100     return table13_0_emit_[emit];
101   }
GetOp16(size_t i)102   static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; }
GetEmit16(size_t,size_t emit)103   static inline uint64_t GetEmit16(size_t, size_t emit) {
104     return table16_0_emit_[emit];
105   }
GetOp17(size_t i)106   static inline uint64_t GetOp17(size_t i) {
107     return table17_ops_[i >> 6][i & 0x3f];
108   }
GetEmit17(size_t i,size_t emit)109   static inline uint64_t GetEmit17(size_t i, size_t emit) {
110     return table17_emit_[i >> 6][emit];
111   }
GetOp18(size_t i)112   static inline uint64_t GetOp18(size_t i) {
113     return table18_ops_[i >> 6][i & 0x3f];
114   }
GetEmit18(size_t i,size_t emit)115   static inline uint64_t GetEmit18(size_t i, size_t emit) {
116     return table18_emit_[i >> 6][emit];
117   }
GetOp10(size_t i)118   static inline uint64_t GetOp10(size_t i) {
119     return table10_ops_[i >> 6][i & 0x3f];
120   }
GetEmit10(size_t i,size_t emit)121   static inline uint64_t GetEmit10(size_t i, size_t emit) {
122     return table10_emit_[i >> 6][emit];
123   }
GetOp19(size_t i)124   static inline uint64_t GetOp19(size_t i) { return i ? 3 : 1; }
GetEmit19(size_t,size_t emit)125   static inline uint64_t GetEmit19(size_t, size_t emit) {
126     return emit ? 132 : 129;
127   }
GetOp20(size_t i)128   static inline uint64_t GetOp20(size_t i) { return i ? 3 : 1; }
GetEmit20(size_t,size_t emit)129   static inline uint64_t GetEmit20(size_t, size_t emit) { return emit + 133; }
GetOp21(size_t i)130   static inline uint64_t GetOp21(size_t i) { return i ? 3 : 1; }
GetEmit21(size_t,size_t emit)131   static inline uint64_t GetEmit21(size_t, size_t emit) {
132     return emit ? 146 : 136;
133   }
GetOp22(size_t i)134   static inline uint64_t GetOp22(size_t i) { return i ? 3 : 1; }
GetEmit22(size_t,size_t emit)135   static inline uint64_t GetEmit22(size_t, size_t emit) {
136     return emit ? 156 : 154;
137   }
GetOp23(size_t i)138   static inline uint64_t GetOp23(size_t i) { return i ? 3 : 1; }
GetEmit23(size_t,size_t emit)139   static inline uint64_t GetEmit23(size_t, size_t emit) {
140     return emit ? 163 : 160;
141   }
GetOp24(size_t i)142   static inline uint64_t GetOp24(size_t i) { return i ? 3 : 1; }
GetEmit24(size_t,size_t emit)143   static inline uint64_t GetEmit24(size_t, size_t emit) {
144     return emit ? 169 : 164;
145   }
GetOp25(size_t i)146   static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; }
GetEmit25(size_t,size_t emit)147   static inline uint64_t GetEmit25(size_t, size_t emit) {
148     return emit ? 173 : 170;
149   }
GetOp26(size_t i)150   static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; }
GetEmit26(size_t,size_t emit)151   static inline uint64_t GetEmit26(size_t, size_t emit) {
152     return emit ? 181 : 178;
153   }
GetOp27(size_t i)154   static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; }
GetEmit27(size_t,size_t emit)155   static inline uint64_t GetEmit27(size_t, size_t emit) { return emit + 185; }
GetOp28(size_t i)156   static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; }
GetEmit28(size_t,size_t emit)157   static inline uint64_t GetEmit28(size_t, size_t emit) {
158     return emit ? 189 : 187;
159   }
GetOp29(size_t i)160   static inline uint64_t GetOp29(size_t i) { return i ? 3 : 1; }
GetEmit29(size_t,size_t emit)161   static inline uint64_t GetEmit29(size_t, size_t emit) {
162     return emit ? 196 : 190;
163   }
GetOp30(size_t i)164   static inline uint64_t GetOp30(size_t i) { return i ? 3 : 1; }
GetEmit30(size_t,size_t emit)165   static inline uint64_t GetEmit30(size_t, size_t emit) {
166     return emit ? 228 : 198;
167   }
GetOp31(size_t i)168   static inline uint64_t GetOp31(size_t i) { return i ? 3 : 1; }
GetEmit31(size_t,size_t emit)169   static inline uint64_t GetEmit31(size_t, size_t emit) { return emit + 232; }
GetOp32(size_t i)170   static inline uint64_t GetOp32(size_t i) {
171     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
172   }
GetEmit32(size_t,size_t emit)173   static inline uint64_t GetEmit32(size_t, size_t emit) {
174     return (emit < 2 ? (emit ? 135 : 1) : ((emit - 2) + 137));
175   }
GetOp33(size_t i)176   static inline uint64_t GetOp33(size_t i) {
177     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
178   }
GetEmit33(size_t,size_t emit)179   static inline uint64_t GetEmit33(size_t, size_t emit) {
180     return (emit < 2 ? (emit + 139) : ((emit - 2) ? 143 : 141));
181   }
GetOp34(size_t i)182   static inline uint64_t GetOp34(size_t i) {
183     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
184   }
GetEmit34(size_t,size_t emit)185   static inline uint64_t GetEmit34(size_t, size_t emit) {
186     return (emit < 1 ? (((void)emit, 147)) : ((emit - 1) + 149));
187   }
GetOp35(size_t i)188   static inline uint64_t GetOp35(size_t i) {
189     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
190   }
GetEmit35(size_t,size_t emit)191   static inline uint64_t GetEmit35(size_t, size_t emit) {
192     return (emit < 2 ? (emit ? 155 : 152) : ((emit - 2) + 157));
193   }
GetOp36(size_t i)194   static inline uint64_t GetOp36(size_t i) {
195     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
196   }
GetEmit36(size_t,size_t emit)197   static inline uint64_t GetEmit36(size_t, size_t emit) {
198     return (emit < 2 ? (emit + 165) : ((emit - 2) ? 174 : 168));
199   }
GetOp37(size_t i)200   static inline uint64_t GetOp37(size_t i) {
201     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
202   }
GetEmit37(size_t,size_t emit)203   static inline uint64_t GetEmit37(size_t, size_t emit) {
204     return (emit < 2 ? (emit ? 180 : 175) : ((emit - 2) + 182));
205   }
GetOp38(size_t i)206   static inline uint64_t GetOp38(size_t i) {
207     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
208   }
GetEmit38(size_t,size_t emit)209   static inline uint64_t GetEmit38(size_t, size_t emit) {
210     return (emit < 2 ? (emit ? 191 : 188) : ((emit - 2) ? 231 : 197));
211   }
GetOp40(size_t i)212   static inline uint64_t GetOp40(size_t i) {
213     return table40_0_inner_[(i < 6 ? (i) : (((void)(i - 6), 6)))];
214   }
GetEmit40(size_t,size_t emit)215   static inline uint64_t GetEmit40(size_t, size_t emit) {
216     return table40_0_emit_[emit];
217   }
GetOp39(size_t i)218   static inline uint64_t GetOp39(size_t i) {
219     return table39_0_inner_[(i < 11 ? (i / 2 + 0) : ((i - 11) + 5))];
220   }
GetEmit39(size_t,size_t emit)221   static inline uint64_t GetEmit39(size_t, size_t emit) {
222     return table39_0_emit_[emit];
223   }
GetOp42(size_t i)224   static inline uint64_t GetOp42(size_t i) {
225     return (i < 1 ? (((void)i, 0)) : (((void)(i - 1), 1)));
226   }
GetEmit42(size_t,size_t emit)227   static inline uint64_t GetEmit42(size_t, size_t emit) {
228     return ((void)emit, 239);
229   }
GetOp41(size_t i)230   static inline uint64_t GetOp41(size_t i) {
231     return table41_0_inner_[(i < 1 ? (((void)i, 0)) : ((i - 1)))];
232   }
GetEmit41(size_t,size_t emit)233   static inline uint64_t GetEmit41(size_t, size_t emit) {
234     return table41_0_emit_[emit];
235   }
GetOp44(size_t i)236   static inline uint64_t GetOp44(size_t i) { return table44_0_ops_[i]; }
GetEmit44(size_t,size_t emit)237   static inline uint64_t GetEmit44(size_t, size_t emit) {
238     return table44_0_emit_[emit];
239   }
GetOp45(size_t i)240   static inline uint64_t GetOp45(size_t i) { return table45_0_ops_[i]; }
GetEmit45(size_t,size_t emit)241   static inline uint64_t GetEmit45(size_t, size_t emit) {
242     return table45_0_emit_[emit];
243   }
GetOp46(size_t i)244   static inline uint64_t GetOp46(size_t i) { return table46_0_ops_[i]; }
GetEmit46(size_t,size_t emit)245   static inline uint64_t GetEmit46(size_t, size_t emit) {
246     return table46_0_emit_[emit];
247   }
GetOp47(size_t i)248   static inline uint64_t GetOp47(size_t i) { return table47_0_ops_[i]; }
GetEmit47(size_t,size_t emit)249   static inline uint64_t GetEmit47(size_t, size_t emit) {
250     return table46_0_emit_[emit];
251   }
GetOp43(size_t i)252   static inline uint64_t GetOp43(size_t i) {
253     return table43_ops_[i >> 5][i & 0x1f];
254   }
GetEmit43(size_t i,size_t emit)255   static inline uint64_t GetEmit43(size_t i, size_t emit) {
256     return table43_emit_[i >> 5][emit];
257   }
258 
259  private:
260   static const uint8_t table2_0_emit_[10];
261   static const uint8_t table2_0_ops_[32];
262   static const uint8_t table3_0_emit_[36];
263   static const uint8_t table3_0_ops_[64];
264   static const uint8_t table4_0_emit_[22];
265   static const uint8_t table4_0_ops_[64];
266   static const uint8_t table4_1_emit_[46];
267   static const uint8_t table4_1_ops_[64];
268   static const uint8_t* const table4_emit_[2];
269   static const uint8_t* const table4_ops_[2];
270   static const uint8_t table5_0_ops_[128];
271   static const uint8_t table5_1_emit_[52];
272   static const uint8_t table5_1_ops_[128];
273   static const uint8_t* const table5_emit_[2];
274   static const uint8_t* const table5_ops_[2];
275   static const uint8_t table6_0_emit_[2];
276   static const uint8_t table6_0_ops_[32];
277   static const uint8_t table6_1_emit_[2];
278   static const uint8_t table6_2_emit_[2];
279   static const uint8_t table6_3_emit_[2];
280   static const uint8_t table6_4_emit_[2];
281   static const uint8_t table6_5_emit_[4];
282   static const uint8_t table6_5_ops_[32];
283   static const uint8_t table6_6_emit_[4];
284   static const uint8_t table6_7_emit_[4];
285   static const uint8_t table6_8_emit_[4];
286   static const uint8_t table6_9_emit_[4];
287   static const uint8_t table6_10_emit_[4];
288   static const uint8_t table6_11_emit_[6];
289   static const uint8_t table6_11_ops_[32];
290   static const uint8_t table6_12_emit_[8];
291   static const uint8_t table6_12_ops_[32];
292   static const uint8_t table6_13_emit_[8];
293   static const uint8_t table6_14_emit_[8];
294   static const uint8_t table6_15_emit_[10];
295   static const uint8_t table6_15_ops_[32];
296   static const uint8_t* const table6_emit_[16];
297   static const uint8_t* const table6_ops_[16];
298   static const uint8_t table7_0_emit_[36];
299   static const uint8_t table7_0_ops_[64];
300   static const uint8_t table7_1_emit_[36];
301   static const uint8_t table7_1_ops_[64];
302   static const uint8_t table7_2_emit_[36];
303   static const uint8_t table7_2_ops_[64];
304   static const uint8_t table7_3_emit_[36];
305   static const uint8_t table7_3_ops_[64];
306   static const uint8_t table7_4_emit_[38];
307   static const uint8_t table7_4_ops_[64];
308   static const uint8_t table7_5_ops_[64];
309   static const uint8_t table7_11_ops_[64];
310   static const uint8_t table7_12_ops_[64];
311   static const uint8_t table7_15_emit_[15];
312   static const uint8_t table7_15_ops_[64];
313   static const uint8_t* const table7_emit_[16];
314   static const uint8_t* const table7_ops_[16];
315   static const uint8_t table1_0_emit_[71];
316   static const uint16_t table1_0_inner_[37];
317   static const uint8_t table1_0_outer_[64];
318   static const uint8_t table1_1_emit_[71];
319   static const uint16_t table1_1_inner_[37];
320   static const uint8_t table1_2_emit_[71];
321   static const uint16_t table1_2_inner_[37];
322   static const uint8_t table1_3_emit_[71];
323   static const uint16_t table1_3_inner_[37];
324   static const uint8_t table1_4_emit_[71];
325   static const uint16_t table1_4_inner_[37];
326   static const uint8_t table1_5_emit_[71];
327   static const uint16_t table1_5_inner_[37];
328   static const uint8_t table1_6_emit_[71];
329   static const uint16_t table1_6_inner_[37];
330   static const uint8_t table1_7_emit_[71];
331   static const uint16_t table1_7_inner_[37];
332   static const uint8_t table1_8_emit_[71];
333   static const uint16_t table1_8_inner_[37];
334   static const uint8_t table1_9_emit_[71];
335   static const uint16_t table1_9_inner_[37];
336   static const uint8_t table1_10_emit_[40];
337   static const uint16_t table1_10_inner_[22];
338   static const uint8_t table1_10_outer_[64];
339   static const uint8_t table1_11_emit_[40];
340   static const uint8_t table1_12_emit_[40];
341   static const uint8_t table1_13_emit_[40];
342   static const uint8_t table1_14_emit_[40];
343   static const uint8_t table1_15_emit_[40];
344   static const uint8_t table1_16_emit_[40];
345   static const uint8_t table1_17_emit_[40];
346   static const uint8_t table1_18_emit_[40];
347   static const uint8_t table1_19_emit_[40];
348   static const uint8_t table1_20_emit_[40];
349   static const uint8_t table1_21_emit_[40];
350   static const uint8_t table1_22_emit_[40];
351   static const uint8_t table1_23_emit_[4];
352   static const uint16_t table1_23_inner_[4];
353   static const uint8_t table1_23_outer_[64];
354   static const uint8_t table1_24_emit_[4];
355   static const uint8_t table1_25_emit_[4];
356   static const uint8_t table1_26_emit_[4];
357   static const uint8_t table1_27_emit_[4];
358   static const uint8_t table1_28_emit_[4];
359   static const uint8_t table1_29_emit_[4];
360   static const uint8_t table1_30_emit_[4];
361   static const uint8_t table1_31_emit_[14];
362   static const uint16_t table1_31_inner_[17];
363   static const uint8_t table1_31_outer_[64];
364   static const uint8_t* const table1_emit_[32];
365   static const uint16_t* const table1_inner_[32];
366   static const uint8_t* const table1_outer_[32];
367   static const uint8_t table12_0_inner_[6];
368   static const uint8_t table12_0_outer_[8];
369   static const uint8_t table13_0_emit_[7];
370   static const uint8_t table13_0_inner_[9];
371   static const uint8_t table13_0_outer_[16];
372   static const uint8_t table14_0_ops_[32];
373   static const uint8_t table15_0_ops_[64];
374   static const uint8_t table16_0_emit_[45];
375   static const uint8_t table16_0_ops_[128];
376   static const uint8_t table17_0_emit_[72];
377   static const uint16_t table17_0_ops_[64];
378   static const uint8_t table17_1_emit_[72];
379   static const uint8_t table17_2_emit_[40];
380   static const uint16_t table17_2_ops_[64];
381   static const uint8_t table17_3_emit_[6];
382   static const uint16_t table17_3_ops_[64];
383   static const uint8_t* const table17_emit_[4];
384   static const uint16_t* const table17_ops_[4];
385   static const uint8_t table18_0_emit_[44];
386   static const uint16_t table18_0_ops_[64];
387   static const uint8_t table18_1_emit_[92];
388   static const uint16_t table18_1_ops_[64];
389   static const uint8_t table18_2_emit_[44];
390   static const uint8_t table18_3_emit_[92];
391   static const uint8_t table18_4_emit_[72];
392   static const uint8_t table18_5_emit_[72];
393   static const uint8_t table18_6_emit_[40];
394   static const uint8_t table18_7_emit_[31];
395   static const uint16_t table18_7_ops_[64];
396   static const uint8_t* const table18_emit_[8];
397   static const uint16_t* const table18_ops_[8];
398   static const uint8_t table10_0_emit_[1];
399   static const uint16_t table10_0_ops_[64];
400   static const uint8_t table10_4_emit_[1];
401   static const uint8_t table10_8_emit_[1];
402   static const uint16_t table10_8_ops_[64];
403   static const uint8_t table10_10_emit_[1];
404   static const uint8_t table10_12_emit_[1];
405   static const uint16_t table10_12_ops_[64];
406   static const uint8_t table10_13_emit_[1];
407   static const uint8_t table10_14_emit_[1];
408   static const uint8_t table10_15_emit_[24];
409   static const uint16_t table10_15_ops_[64];
410   static const uint8_t* const table10_emit_[16];
411   static const uint16_t* const table10_ops_[16];
412   static const uint8_t table40_0_emit_[6];
413   static const uint8_t table40_0_inner_[7];
414   static const uint8_t table39_0_emit_[10];
415   static const uint8_t table39_0_inner_[10];
416   static const uint8_t table41_0_emit_[7];
417   static const uint8_t table41_0_inner_[7];
418   static const uint8_t table44_0_emit_[15];
419   static const uint8_t table44_0_ops_[32];
420   static const uint8_t table45_0_emit_[34];
421   static const uint8_t table45_0_ops_[64];
422   static const uint8_t table46_0_emit_[63];
423   static const uint8_t table46_0_ops_[128];
424   static const uint8_t table47_0_ops_[256];
425   static const uint8_t table43_0_emit_[2];
426   static const uint16_t table43_0_ops_[32];
427   static const uint8_t table43_1_emit_[2];
428   static const uint8_t table43_2_emit_[2];
429   static const uint8_t table43_3_emit_[2];
430   static const uint8_t table43_4_emit_[2];
431   static const uint8_t table43_5_emit_[2];
432   static const uint8_t table43_6_emit_[2];
433   static const uint8_t table43_7_emit_[3];
434   static const uint16_t table43_7_ops_[32];
435   static const uint8_t table43_8_emit_[4];
436   static const uint16_t table43_8_ops_[32];
437   static const uint8_t table43_9_emit_[4];
438   static const uint8_t table43_10_emit_[4];
439   static const uint8_t table43_11_emit_[4];
440   static const uint8_t table43_12_emit_[7];
441   static const uint16_t table43_12_ops_[32];
442   static const uint8_t table43_13_emit_[8];
443   static const uint16_t table43_13_ops_[32];
444   static const uint8_t table43_14_emit_[8];
445   static const uint8_t table43_15_emit_[10];
446   static const uint16_t table43_15_ops_[32];
447   static const uint8_t* const table43_emit_[16];
448   static const uint16_t* const table43_ops_[16];
449 };
450 template <typename F>
451 class HuffDecoder : public HuffDecoderCommon {
452  public:
HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)453   HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end)
454       : sink_(sink), begin_(begin), end_(end) {}
Run()455   bool Run() {
456     while (!done_) {
457       if (!RefillTo11()) {
458         Done0();
459         break;
460       }
461       const auto index = (buffer_ >> (buffer_len_ - 11)) & 0x7ff;
462       const auto op = GetOp1(index);
463       const int consumed = op & 15;
464       buffer_len_ -= consumed;
465       const auto emit_ofs = op >> 7;
466       switch ((op >> 4) & 7) {
467         case 0: {
468           sink_(GetEmit1(index, emit_ofs + 0));
469           sink_(GetEmit1(index, emit_ofs + 1));
470           break;
471         }
472         case 1: {
473           sink_(GetEmit1(index, emit_ofs + 0));
474           break;
475         }
476         case 2: {
477           DecodeStep0();
478           break;
479         }
480         case 3: {
481           DecodeStep1();
482           break;
483         }
484         case 4: {
485           DecodeStep2();
486           break;
487         }
488       }
489     }
490     return ok_;
491   }
492 
493  private:
RefillTo11()494   bool RefillTo11() {
495     switch (buffer_len_) {
496       case 0: {
497         return Read2to8Bytes();
498       }
499       case 1:
500       case 2: {
501         return Read2to7Bytes();
502       }
503       case 3:
504       case 4:
505       case 5:
506       case 6:
507       case 7:
508       case 8: {
509         return Read1to7Bytes();
510       }
511       case 9:
512       case 10: {
513         return Read1to6Bytes();
514       }
515     }
516     return true;
517   }
Read2to8Bytes()518   bool Read2to8Bytes() {
519     switch (end_ - begin_) {
520       case 0:
521       case 1: {
522         return false;
523       }
524       case 2: {
525         Fill2();
526         return true;
527       }
528       case 3: {
529         Fill3();
530         return true;
531       }
532       case 4: {
533         Fill4();
534         return true;
535       }
536       case 5: {
537         Fill5();
538         return true;
539       }
540       case 6: {
541         Fill6();
542         return true;
543       }
544       case 7: {
545         Fill7();
546         return true;
547       }
548       default: {
549         Fill8();
550         return true;
551       }
552     }
553   }
Fill2()554   void Fill2() {
555     buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) |
556               (static_cast<uint64_t>(begin_[1]) << 0);
557     begin_ += 2;
558     buffer_len_ += 16;
559   }
Fill3()560   void Fill3() {
561     buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) |
562               (static_cast<uint64_t>(begin_[1]) << 8) |
563               (static_cast<uint64_t>(begin_[2]) << 0);
564     begin_ += 3;
565     buffer_len_ += 24;
566   }
Fill4()567   void Fill4() {
568     buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) |
569               (static_cast<uint64_t>(begin_[1]) << 16) |
570               (static_cast<uint64_t>(begin_[2]) << 8) |
571               (static_cast<uint64_t>(begin_[3]) << 0);
572     begin_ += 4;
573     buffer_len_ += 32;
574   }
Fill5()575   void Fill5() {
576     buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) |
577               (static_cast<uint64_t>(begin_[1]) << 24) |
578               (static_cast<uint64_t>(begin_[2]) << 16) |
579               (static_cast<uint64_t>(begin_[3]) << 8) |
580               (static_cast<uint64_t>(begin_[4]) << 0);
581     begin_ += 5;
582     buffer_len_ += 40;
583   }
Fill6()584   void Fill6() {
585     buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) |
586               (static_cast<uint64_t>(begin_[1]) << 32) |
587               (static_cast<uint64_t>(begin_[2]) << 24) |
588               (static_cast<uint64_t>(begin_[3]) << 16) |
589               (static_cast<uint64_t>(begin_[4]) << 8) |
590               (static_cast<uint64_t>(begin_[5]) << 0);
591     begin_ += 6;
592     buffer_len_ += 48;
593   }
Fill7()594   void Fill7() {
595     buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) |
596               (static_cast<uint64_t>(begin_[1]) << 40) |
597               (static_cast<uint64_t>(begin_[2]) << 32) |
598               (static_cast<uint64_t>(begin_[3]) << 24) |
599               (static_cast<uint64_t>(begin_[4]) << 16) |
600               (static_cast<uint64_t>(begin_[5]) << 8) |
601               (static_cast<uint64_t>(begin_[6]) << 0);
602     begin_ += 7;
603     buffer_len_ += 56;
604   }
Fill8()605   void Fill8() {
606     buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) |
607               (static_cast<uint64_t>(begin_[1]) << 48) |
608               (static_cast<uint64_t>(begin_[2]) << 40) |
609               (static_cast<uint64_t>(begin_[3]) << 32) |
610               (static_cast<uint64_t>(begin_[4]) << 24) |
611               (static_cast<uint64_t>(begin_[5]) << 16) |
612               (static_cast<uint64_t>(begin_[6]) << 8) |
613               (static_cast<uint64_t>(begin_[7]) << 0);
614     begin_ += 8;
615     buffer_len_ += 64;
616   }
Read2to7Bytes()617   bool Read2to7Bytes() {
618     switch (end_ - begin_) {
619       case 0:
620       case 1: {
621         return false;
622       }
623       case 2: {
624         Fill2();
625         return true;
626       }
627       case 3: {
628         Fill3();
629         return true;
630       }
631       case 4: {
632         Fill4();
633         return true;
634       }
635       case 5: {
636         Fill5();
637         return true;
638       }
639       case 6: {
640         Fill6();
641         return true;
642       }
643       default: {
644         Fill7();
645         return true;
646       }
647     }
648   }
Read1to7Bytes()649   bool Read1to7Bytes() {
650     switch (end_ - begin_) {
651       case 0: {
652         return false;
653       }
654       case 1: {
655         Fill1();
656         return true;
657       }
658       case 2: {
659         Fill2();
660         return true;
661       }
662       case 3: {
663         Fill3();
664         return true;
665       }
666       case 4: {
667         Fill4();
668         return true;
669       }
670       case 5: {
671         Fill5();
672         return true;
673       }
674       case 6: {
675         Fill6();
676         return true;
677       }
678       default: {
679         Fill7();
680         return true;
681       }
682     }
683   }
Fill1()684   void Fill1() {
685     buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0);
686     begin_ += 1;
687     buffer_len_ += 8;
688   }
Read1to6Bytes()689   bool Read1to6Bytes() {
690     switch (end_ - begin_) {
691       case 0: {
692         return false;
693       }
694       case 1: {
695         Fill1();
696         return true;
697       }
698       case 2: {
699         Fill2();
700         return true;
701       }
702       case 3: {
703         Fill3();
704         return true;
705       }
706       case 4: {
707         Fill4();
708         return true;
709       }
710       case 5: {
711         Fill5();
712         return true;
713       }
714       default: {
715         Fill6();
716         return true;
717       }
718     }
719   }
Done0()720   void Done0() {
721     done_ = true;
722     switch (end_ - begin_) {
723       case 1: {
724         Fill1();
725         break;
726       }
727     }
728     switch (buffer_len_) {
729       case 1:
730       case 2:
731       case 3:
732       case 4: {
733         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
734         return;
735       }
736       case 5: {
737         const auto index = buffer_ & 31;
738         const auto op = GetOp2(index);
739         switch (op & 3) {
740           case 0: {
741             sink_(GetEmit2(index, (op >> 2) + 0));
742             break;
743           }
744           case 1: {
745             ok_ = false;
746             break;
747           }
748         }
749         return;
750       }
751       case 6: {
752         const auto index = buffer_ & 63;
753         const auto op = GetOp3(index);
754         switch (op & 3) {
755           case 0: {
756             ok_ = false;
757             break;
758           }
759           case 1: {
760             sink_(GetEmit3(index, (op >> 2) + 0));
761             break;
762           }
763         }
764         return;
765       }
766       case 7: {
767         const auto index = buffer_ & 127;
768         const auto op = GetOp4(index);
769         switch (op & 3) {
770           case 0: {
771             ok_ = false;
772             break;
773           }
774           case 1: {
775             sink_(GetEmit4(index, (op >> 2) + 0));
776             break;
777           }
778         }
779         return;
780       }
781       case 8: {
782         const auto index = buffer_ & 255;
783         const auto op = GetOp5(index);
784         switch (op & 3) {
785           case 0: {
786             ok_ = false;
787             break;
788           }
789           case 1: {
790             sink_(GetEmit5(index, (op >> 2) + 0));
791             break;
792           }
793         }
794         return;
795       }
796       case 9: {
797         const auto index = buffer_ & 511;
798         const auto op = GetOp6(index);
799         switch (op & 3) {
800           case 0: {
801             ok_ = false;
802             break;
803           }
804           case 1: {
805             sink_(GetEmit6(index, (op >> 2) + 0));
806             break;
807           }
808         }
809         return;
810       }
811       case 10: {
812         const auto index = buffer_ & 1023;
813         const auto op = GetOp7(index);
814         switch (op & 3) {
815           case 0: {
816             sink_(GetEmit7(index, (op >> 2) + 0));
817             sink_(GetEmit7(index, (op >> 2) + 1));
818             break;
819           }
820           case 1: {
821             ok_ = false;
822             break;
823           }
824           case 2: {
825             sink_(GetEmit7(index, (op >> 2) + 0));
826             break;
827           }
828         }
829         return;
830       }
831       case 0: {
832         return;
833       }
834     }
835   }
DecodeStep0()836   void DecodeStep0() {
837     if (!RefillTo1()) {
838       Done1();
839       return;
840     }
841     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
842     const auto op = GetOp8(index);
843     const int consumed = op & 1;
844     buffer_len_ -= consumed;
845     const auto emit_ofs = op >> 1;
846     sink_(GetEmit8(index, emit_ofs + 0));
847   }
RefillTo1()848   bool RefillTo1() {
849     switch (buffer_len_) {
850       case 0: {
851         return Read1to8Bytes();
852       }
853     }
854     return true;
855   }
Read1to8Bytes()856   bool Read1to8Bytes() {
857     switch (end_ - begin_) {
858       case 0: {
859         return false;
860       }
861       case 1: {
862         Fill1();
863         return true;
864       }
865       case 2: {
866         Fill2();
867         return true;
868       }
869       case 3: {
870         Fill3();
871         return true;
872       }
873       case 4: {
874         Fill4();
875         return true;
876       }
877       case 5: {
878         Fill5();
879         return true;
880       }
881       case 6: {
882         Fill6();
883         return true;
884       }
885       case 7: {
886         Fill7();
887         return true;
888       }
889       default: {
890         Fill8();
891         return true;
892       }
893     }
894   }
Done1()895   void Done1() {
896     done_ = true;
897     ok_ = false;
898   }
DecodeStep1()899   void DecodeStep1() {
900     if (!RefillTo2()) {
901       Done2();
902       return;
903     }
904     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
905     const auto op = GetOp9(index);
906     const int consumed = op & 3;
907     buffer_len_ -= consumed;
908     const auto emit_ofs = op >> 2;
909     sink_(GetEmit9(index, emit_ofs + 0));
910   }
RefillTo2()911   bool RefillTo2() {
912     switch (buffer_len_) {
913       case 0: {
914         return Read1to8Bytes();
915       }
916       case 1: {
917         return Read1to7Bytes();
918       }
919     }
920     return true;
921   }
Done2()922   void Done2() {
923     done_ = true;
924     switch (buffer_len_) {
925       case 1:
926       case 0: {
927         ok_ = false;
928         return;
929       }
930     }
931   }
DecodeStep2()932   void DecodeStep2() {
933     if (!RefillTo10()) {
934       Done3();
935       return;
936     }
937     const auto index = (buffer_ >> (buffer_len_ - 10)) & 0x3ff;
938     const auto op = GetOp10(index);
939     const int consumed = op & 15;
940     buffer_len_ -= consumed;
941     const auto emit_ofs = op >> 9;
942     switch ((op >> 4) & 31) {
943       case 0: {
944         sink_(GetEmit10(index, emit_ofs + 0));
945         break;
946       }
947       case 1: {
948         DecodeStep3();
949         break;
950       }
951       case 2: {
952         DecodeStep4();
953         break;
954       }
955       case 3: {
956         DecodeStep5();
957         break;
958       }
959       case 4: {
960         DecodeStep6();
961         break;
962       }
963       case 5: {
964         DecodeStep7();
965         break;
966       }
967       case 6: {
968         DecodeStep8();
969         break;
970       }
971       case 7: {
972         DecodeStep9();
973         break;
974       }
975       case 8: {
976         DecodeStep10();
977         break;
978       }
979       case 9: {
980         DecodeStep11();
981         break;
982       }
983       case 10: {
984         DecodeStep12();
985         break;
986       }
987       case 11: {
988         DecodeStep13();
989         break;
990       }
991       case 12: {
992         DecodeStep14();
993         break;
994       }
995       case 13: {
996         DecodeStep15();
997         break;
998       }
999       case 14: {
1000         DecodeStep16();
1001         break;
1002       }
1003       case 15: {
1004         DecodeStep17();
1005         break;
1006       }
1007       case 16: {
1008         DecodeStep18();
1009         break;
1010       }
1011       case 17: {
1012         DecodeStep19();
1013         break;
1014       }
1015       case 18: {
1016         DecodeStep20();
1017         break;
1018       }
1019       case 19: {
1020         DecodeStep21();
1021         break;
1022       }
1023       case 20: {
1024         DecodeStep22();
1025         break;
1026       }
1027       case 21: {
1028         DecodeStep24();
1029         break;
1030       }
1031       case 22: {
1032         DecodeStep23();
1033         break;
1034       }
1035       case 23: {
1036         DecodeStep25();
1037         break;
1038       }
1039     }
1040   }
RefillTo10()1041   bool RefillTo10() {
1042     switch (buffer_len_) {
1043       case 0: {
1044         return Read2to8Bytes();
1045       }
1046       case 1: {
1047         return Read2to7Bytes();
1048       }
1049       case 2:
1050       case 3:
1051       case 4:
1052       case 5:
1053       case 6:
1054       case 7:
1055       case 8: {
1056         return Read1to7Bytes();
1057       }
1058       case 9: {
1059         return Read1to6Bytes();
1060       }
1061     }
1062     return true;
1063   }
Done3()1064   void Done3() {
1065     done_ = true;
1066     switch (end_ - begin_) {
1067       case 1: {
1068         Fill1();
1069         break;
1070       }
1071     }
1072     switch (buffer_len_) {
1073       case 1: {
1074         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1075         return;
1076       }
1077       case 2: {
1078         const auto index = buffer_ & 3;
1079         const auto op = GetOp11(index);
1080         switch (op & 3) {
1081           case 0: {
1082             sink_(GetEmit11(index, (op >> 2) + 0));
1083             break;
1084           }
1085           case 1: {
1086             ok_ = false;
1087             break;
1088           }
1089         }
1090         return;
1091       }
1092       case 3: {
1093         const auto index = buffer_ & 7;
1094         const auto op = GetOp12(index);
1095         switch (op & 3) {
1096           case 0: {
1097             ok_ = false;
1098             break;
1099           }
1100           case 1: {
1101             sink_(GetEmit12(index, (op >> 2) + 0));
1102             break;
1103           }
1104         }
1105         return;
1106       }
1107       case 4: {
1108         const auto index = buffer_ & 15;
1109         const auto op = GetOp13(index);
1110         switch (op & 3) {
1111           case 0: {
1112             ok_ = false;
1113             break;
1114           }
1115           case 1: {
1116             sink_(GetEmit13(index, (op >> 2) + 0));
1117             break;
1118           }
1119         }
1120         return;
1121       }
1122       case 5: {
1123         const auto index = buffer_ & 31;
1124         const auto op = GetOp14(index);
1125         switch (op & 3) {
1126           case 0: {
1127             ok_ = false;
1128             break;
1129           }
1130           case 1: {
1131             sink_(GetEmit14(index, (op >> 2) + 0));
1132             break;
1133           }
1134         }
1135         return;
1136       }
1137       case 6: {
1138         const auto index = buffer_ & 63;
1139         const auto op = GetOp15(index);
1140         switch (op & 3) {
1141           case 0: {
1142             ok_ = false;
1143             break;
1144           }
1145           case 1: {
1146             sink_(GetEmit15(index, (op >> 2) + 0));
1147             break;
1148           }
1149         }
1150         return;
1151       }
1152       case 7: {
1153         const auto index = buffer_ & 127;
1154         const auto op = GetOp16(index);
1155         switch (op & 3) {
1156           case 0: {
1157             sink_(GetEmit16(index, (op >> 2) + 0));
1158             sink_(GetEmit16(index, (op >> 2) + 1));
1159             break;
1160           }
1161           case 1: {
1162             ok_ = false;
1163             break;
1164           }
1165           case 2: {
1166             sink_(GetEmit16(index, (op >> 2) + 0));
1167             break;
1168           }
1169         }
1170         return;
1171       }
1172       case 8: {
1173         const auto index = buffer_ & 255;
1174         const auto op = GetOp17(index);
1175         switch (op & 3) {
1176           case 0: {
1177             ok_ = false;
1178             break;
1179           }
1180           case 1: {
1181             sink_(GetEmit17(index, (op >> 2) + 0));
1182             sink_(GetEmit17(index, (op >> 2) + 1));
1183             break;
1184           }
1185           case 2: {
1186             sink_(GetEmit17(index, (op >> 2) + 0));
1187             break;
1188           }
1189         }
1190         return;
1191       }
1192       case 9: {
1193         const auto index = buffer_ & 511;
1194         const auto op = GetOp18(index);
1195         switch (op & 3) {
1196           case 0: {
1197             ok_ = false;
1198             break;
1199           }
1200           case 1: {
1201             sink_(GetEmit18(index, (op >> 2) + 0));
1202             sink_(GetEmit18(index, (op >> 2) + 1));
1203             break;
1204           }
1205           case 2: {
1206             sink_(GetEmit18(index, (op >> 2) + 0));
1207             break;
1208           }
1209         }
1210         return;
1211       }
1212       case 0: {
1213         return;
1214       }
1215     }
1216   }
DecodeStep3()1217   void DecodeStep3() {
1218     if (!RefillTo1()) {
1219       Done4();
1220       return;
1221     }
1222     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1223     const auto op = GetOp19(index);
1224     const int consumed = op & 1;
1225     buffer_len_ -= consumed;
1226     const auto emit_ofs = op >> 1;
1227     sink_(GetEmit19(index, emit_ofs + 0));
1228   }
Done4()1229   void Done4() {
1230     done_ = true;
1231     ok_ = false;
1232   }
DecodeStep4()1233   void DecodeStep4() {
1234     if (!RefillTo1()) {
1235       Done5();
1236       return;
1237     }
1238     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1239     const auto op = GetOp20(index);
1240     const int consumed = op & 1;
1241     buffer_len_ -= consumed;
1242     const auto emit_ofs = op >> 1;
1243     sink_(GetEmit20(index, emit_ofs + 0));
1244   }
Done5()1245   void Done5() {
1246     done_ = true;
1247     ok_ = false;
1248   }
DecodeStep5()1249   void DecodeStep5() {
1250     if (!RefillTo1()) {
1251       Done6();
1252       return;
1253     }
1254     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1255     const auto op = GetOp21(index);
1256     const int consumed = op & 1;
1257     buffer_len_ -= consumed;
1258     const auto emit_ofs = op >> 1;
1259     sink_(GetEmit21(index, emit_ofs + 0));
1260   }
Done6()1261   void Done6() {
1262     done_ = true;
1263     ok_ = false;
1264   }
DecodeStep6()1265   void DecodeStep6() {
1266     if (!RefillTo1()) {
1267       Done7();
1268       return;
1269     }
1270     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1271     const auto op = GetOp22(index);
1272     const int consumed = op & 1;
1273     buffer_len_ -= consumed;
1274     const auto emit_ofs = op >> 1;
1275     sink_(GetEmit22(index, emit_ofs + 0));
1276   }
Done7()1277   void Done7() {
1278     done_ = true;
1279     ok_ = false;
1280   }
DecodeStep7()1281   void DecodeStep7() {
1282     if (!RefillTo1()) {
1283       Done8();
1284       return;
1285     }
1286     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1287     const auto op = GetOp23(index);
1288     const int consumed = op & 1;
1289     buffer_len_ -= consumed;
1290     const auto emit_ofs = op >> 1;
1291     sink_(GetEmit23(index, emit_ofs + 0));
1292   }
Done8()1293   void Done8() {
1294     done_ = true;
1295     ok_ = false;
1296   }
DecodeStep8()1297   void DecodeStep8() {
1298     if (!RefillTo1()) {
1299       Done9();
1300       return;
1301     }
1302     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1303     const auto op = GetOp24(index);
1304     const int consumed = op & 1;
1305     buffer_len_ -= consumed;
1306     const auto emit_ofs = op >> 1;
1307     sink_(GetEmit24(index, emit_ofs + 0));
1308   }
Done9()1309   void Done9() {
1310     done_ = true;
1311     ok_ = false;
1312   }
DecodeStep9()1313   void DecodeStep9() {
1314     if (!RefillTo1()) {
1315       Done10();
1316       return;
1317     }
1318     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1319     const auto op = GetOp25(index);
1320     const int consumed = op & 1;
1321     buffer_len_ -= consumed;
1322     const auto emit_ofs = op >> 1;
1323     sink_(GetEmit25(index, emit_ofs + 0));
1324   }
Done10()1325   void Done10() {
1326     done_ = true;
1327     ok_ = false;
1328   }
DecodeStep10()1329   void DecodeStep10() {
1330     if (!RefillTo1()) {
1331       Done11();
1332       return;
1333     }
1334     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1335     const auto op = GetOp26(index);
1336     const int consumed = op & 1;
1337     buffer_len_ -= consumed;
1338     const auto emit_ofs = op >> 1;
1339     sink_(GetEmit26(index, emit_ofs + 0));
1340   }
Done11()1341   void Done11() {
1342     done_ = true;
1343     ok_ = false;
1344   }
DecodeStep11()1345   void DecodeStep11() {
1346     if (!RefillTo1()) {
1347       Done12();
1348       return;
1349     }
1350     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1351     const auto op = GetOp27(index);
1352     const int consumed = op & 1;
1353     buffer_len_ -= consumed;
1354     const auto emit_ofs = op >> 1;
1355     sink_(GetEmit27(index, emit_ofs + 0));
1356   }
Done12()1357   void Done12() {
1358     done_ = true;
1359     ok_ = false;
1360   }
DecodeStep12()1361   void DecodeStep12() {
1362     if (!RefillTo1()) {
1363       Done13();
1364       return;
1365     }
1366     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1367     const auto op = GetOp28(index);
1368     const int consumed = op & 1;
1369     buffer_len_ -= consumed;
1370     const auto emit_ofs = op >> 1;
1371     sink_(GetEmit28(index, emit_ofs + 0));
1372   }
Done13()1373   void Done13() {
1374     done_ = true;
1375     ok_ = false;
1376   }
DecodeStep13()1377   void DecodeStep13() {
1378     if (!RefillTo1()) {
1379       Done14();
1380       return;
1381     }
1382     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1383     const auto op = GetOp29(index);
1384     const int consumed = op & 1;
1385     buffer_len_ -= consumed;
1386     const auto emit_ofs = op >> 1;
1387     sink_(GetEmit29(index, emit_ofs + 0));
1388   }
Done14()1389   void Done14() {
1390     done_ = true;
1391     ok_ = false;
1392   }
DecodeStep14()1393   void DecodeStep14() {
1394     if (!RefillTo1()) {
1395       Done15();
1396       return;
1397     }
1398     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1399     const auto op = GetOp30(index);
1400     const int consumed = op & 1;
1401     buffer_len_ -= consumed;
1402     const auto emit_ofs = op >> 1;
1403     sink_(GetEmit30(index, emit_ofs + 0));
1404   }
Done15()1405   void Done15() {
1406     done_ = true;
1407     ok_ = false;
1408   }
DecodeStep15()1409   void DecodeStep15() {
1410     if (!RefillTo1()) {
1411       Done16();
1412       return;
1413     }
1414     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1415     const auto op = GetOp31(index);
1416     const int consumed = op & 1;
1417     buffer_len_ -= consumed;
1418     const auto emit_ofs = op >> 1;
1419     sink_(GetEmit31(index, emit_ofs + 0));
1420   }
Done16()1421   void Done16() {
1422     done_ = true;
1423     ok_ = false;
1424   }
DecodeStep16()1425   void DecodeStep16() {
1426     if (!RefillTo2()) {
1427       Done17();
1428       return;
1429     }
1430     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1431     const auto op = GetOp32(index);
1432     const int consumed = op & 3;
1433     buffer_len_ -= consumed;
1434     const auto emit_ofs = op >> 2;
1435     sink_(GetEmit32(index, emit_ofs + 0));
1436   }
Done17()1437   void Done17() {
1438     done_ = true;
1439     switch (buffer_len_) {
1440       case 1:
1441       case 0: {
1442         ok_ = false;
1443         return;
1444       }
1445     }
1446   }
DecodeStep17()1447   void DecodeStep17() {
1448     if (!RefillTo2()) {
1449       Done18();
1450       return;
1451     }
1452     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1453     const auto op = GetOp33(index);
1454     const int consumed = op & 3;
1455     buffer_len_ -= consumed;
1456     const auto emit_ofs = op >> 2;
1457     sink_(GetEmit33(index, emit_ofs + 0));
1458   }
Done18()1459   void Done18() {
1460     done_ = true;
1461     switch (buffer_len_) {
1462       case 1:
1463       case 0: {
1464         ok_ = false;
1465         return;
1466       }
1467     }
1468   }
DecodeStep18()1469   void DecodeStep18() {
1470     if (!RefillTo2()) {
1471       Done19();
1472       return;
1473     }
1474     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1475     const auto op = GetOp34(index);
1476     const int consumed = op & 3;
1477     buffer_len_ -= consumed;
1478     const auto emit_ofs = op >> 2;
1479     sink_(GetEmit34(index, emit_ofs + 0));
1480   }
Done19()1481   void Done19() {
1482     done_ = true;
1483     switch (buffer_len_) {
1484       case 1:
1485       case 0: {
1486         ok_ = false;
1487         return;
1488       }
1489     }
1490   }
DecodeStep19()1491   void DecodeStep19() {
1492     if (!RefillTo2()) {
1493       Done20();
1494       return;
1495     }
1496     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1497     const auto op = GetOp35(index);
1498     const int consumed = op & 3;
1499     buffer_len_ -= consumed;
1500     const auto emit_ofs = op >> 2;
1501     sink_(GetEmit35(index, emit_ofs + 0));
1502   }
Done20()1503   void Done20() {
1504     done_ = true;
1505     switch (buffer_len_) {
1506       case 1:
1507       case 0: {
1508         ok_ = false;
1509         return;
1510       }
1511     }
1512   }
DecodeStep20()1513   void DecodeStep20() {
1514     if (!RefillTo2()) {
1515       Done21();
1516       return;
1517     }
1518     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1519     const auto op = GetOp36(index);
1520     const int consumed = op & 3;
1521     buffer_len_ -= consumed;
1522     const auto emit_ofs = op >> 2;
1523     sink_(GetEmit36(index, emit_ofs + 0));
1524   }
Done21()1525   void Done21() {
1526     done_ = true;
1527     switch (buffer_len_) {
1528       case 1:
1529       case 0: {
1530         ok_ = false;
1531         return;
1532       }
1533     }
1534   }
DecodeStep21()1535   void DecodeStep21() {
1536     if (!RefillTo2()) {
1537       Done22();
1538       return;
1539     }
1540     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1541     const auto op = GetOp37(index);
1542     const int consumed = op & 3;
1543     buffer_len_ -= consumed;
1544     const auto emit_ofs = op >> 2;
1545     sink_(GetEmit37(index, emit_ofs + 0));
1546   }
Done22()1547   void Done22() {
1548     done_ = true;
1549     switch (buffer_len_) {
1550       case 1:
1551       case 0: {
1552         ok_ = false;
1553         return;
1554       }
1555     }
1556   }
DecodeStep22()1557   void DecodeStep22() {
1558     if (!RefillTo2()) {
1559       Done23();
1560       return;
1561     }
1562     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1563     const auto op = GetOp38(index);
1564     const int consumed = op & 3;
1565     buffer_len_ -= consumed;
1566     const auto emit_ofs = op >> 2;
1567     sink_(GetEmit38(index, emit_ofs + 0));
1568   }
Done23()1569   void Done23() {
1570     done_ = true;
1571     switch (buffer_len_) {
1572       case 1:
1573       case 0: {
1574         ok_ = false;
1575         return;
1576       }
1577     }
1578   }
DecodeStep23()1579   void DecodeStep23() {
1580     if (!RefillTo4()) {
1581       Done24();
1582       return;
1583     }
1584     const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf;
1585     const auto op = GetOp39(index);
1586     const int consumed = op & 7;
1587     buffer_len_ -= consumed;
1588     const auto emit_ofs = op >> 3;
1589     sink_(GetEmit39(index, emit_ofs + 0));
1590   }
RefillTo4()1591   bool RefillTo4() {
1592     switch (buffer_len_) {
1593       case 0: {
1594         return Read1to8Bytes();
1595       }
1596       case 1:
1597       case 2:
1598       case 3: {
1599         return Read1to7Bytes();
1600       }
1601     }
1602     return true;
1603   }
Done24()1604   void Done24() {
1605     done_ = true;
1606     switch (buffer_len_) {
1607       case 1:
1608       case 2:
1609       case 0: {
1610         ok_ = false;
1611         return;
1612       }
1613       case 3: {
1614         const auto index = buffer_ & 7;
1615         const auto op = GetOp40(index);
1616         switch (op & 1) {
1617           case 0: {
1618             sink_(GetEmit40(index, (op >> 1) + 0));
1619             break;
1620           }
1621           case 1: {
1622             ok_ = false;
1623             break;
1624           }
1625         }
1626         return;
1627       }
1628     }
1629   }
DecodeStep24()1630   void DecodeStep24() {
1631     if (!RefillTo3()) {
1632       Done25();
1633       return;
1634     }
1635     const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7;
1636     const auto op = GetOp41(index);
1637     const int consumed = op & 3;
1638     buffer_len_ -= consumed;
1639     const auto emit_ofs = op >> 2;
1640     sink_(GetEmit41(index, emit_ofs + 0));
1641   }
RefillTo3()1642   bool RefillTo3() {
1643     switch (buffer_len_) {
1644       case 0: {
1645         return Read1to8Bytes();
1646       }
1647       case 1:
1648       case 2: {
1649         return Read1to7Bytes();
1650       }
1651     }
1652     return true;
1653   }
Done25()1654   void Done25() {
1655     done_ = true;
1656     switch (buffer_len_) {
1657       case 1:
1658       case 0: {
1659         ok_ = false;
1660         return;
1661       }
1662       case 2: {
1663         const auto index = buffer_ & 3;
1664         const auto op = GetOp42(index);
1665         switch (op & 1) {
1666           case 0: {
1667             sink_(GetEmit42(index, (op >> 1) + 0));
1668             break;
1669           }
1670           case 1: {
1671             ok_ = false;
1672             break;
1673           }
1674         }
1675         return;
1676       }
1677     }
1678   }
DecodeStep25()1679   void DecodeStep25() {
1680     if (!RefillTo9()) {
1681       Done26();
1682       return;
1683     }
1684     const auto index = (buffer_ >> (buffer_len_ - 9)) & 0x1ff;
1685     const auto op = GetOp43(index);
1686     const int consumed = op & 15;
1687     buffer_len_ -= consumed;
1688     const auto emit_ofs = op >> 5;
1689     switch ((op >> 4) & 1) {
1690       case 0: {
1691         sink_(GetEmit43(index, emit_ofs + 0));
1692         break;
1693       }
1694       case 1: {
1695         begin_ = end_;
1696         buffer_len_ = 0;
1697         break;
1698       }
1699     }
1700   }
RefillTo9()1701   bool RefillTo9() {
1702     switch (buffer_len_) {
1703       case 0: {
1704         return Read2to8Bytes();
1705       }
1706       case 1:
1707       case 2:
1708       case 3:
1709       case 4:
1710       case 5:
1711       case 6:
1712       case 7:
1713       case 8: {
1714         return Read1to7Bytes();
1715       }
1716     }
1717     return true;
1718   }
Done26()1719   void Done26() {
1720     done_ = true;
1721     switch (end_ - begin_) {
1722       case 1: {
1723         Fill1();
1724         break;
1725       }
1726     }
1727     switch (buffer_len_) {
1728       case 1:
1729       case 2:
1730       case 3:
1731       case 4: {
1732         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1733         return;
1734       }
1735       case 5: {
1736         const auto index = buffer_ & 31;
1737         const auto op = GetOp44(index);
1738         switch (op & 3) {
1739           case 0: {
1740             sink_(GetEmit44(index, (op >> 2) + 0));
1741             break;
1742           }
1743           case 1: {
1744             ok_ = false;
1745             break;
1746           }
1747         }
1748         return;
1749       }
1750       case 6: {
1751         const auto index = buffer_ & 63;
1752         const auto op = GetOp45(index);
1753         switch (op & 3) {
1754           case 0: {
1755             ok_ = false;
1756             break;
1757           }
1758           case 1: {
1759             sink_(GetEmit45(index, (op >> 2) + 0));
1760             break;
1761           }
1762         }
1763         return;
1764       }
1765       case 7: {
1766         const auto index = buffer_ & 127;
1767         const auto op = GetOp46(index);
1768         switch (op & 3) {
1769           case 0: {
1770             ok_ = false;
1771             break;
1772           }
1773           case 1: {
1774             sink_(GetEmit46(index, (op >> 2) + 0));
1775             break;
1776           }
1777         }
1778         return;
1779       }
1780       case 8: {
1781         const auto index = buffer_ & 255;
1782         const auto op = GetOp47(index);
1783         switch (op & 3) {
1784           case 0: {
1785             ok_ = false;
1786             break;
1787           }
1788           case 1: {
1789             sink_(GetEmit47(index, (op >> 2) + 0));
1790             break;
1791           }
1792         }
1793         return;
1794       }
1795       case 0: {
1796         return;
1797       }
1798     }
1799   }
1800   F sink_;
1801   const uint8_t* begin_;
1802   const uint8_t* const end_;
1803   uint64_t buffer_ = 0;
1804   int buffer_len_ = 0;
1805   bool ok_ = true;
1806   bool done_ = false;
1807 };
1808 }  // namespace geometry_11_10_9
1809 }  // namespace grpc_core
1810 #endif  // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_11_10_9_H
1811