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