xref: /aosp_15_r20/external/grpc-grpc/test/cpp/microbenchmarks/huffman_geometries/decode_huff_9_7_14.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_9_7_14_H
19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_7_14_H
20 #include <cstddef>
21 #include <cstdint>
22 
23 #include <grpc/support/port_platform.h>
24 namespace grpc_core {
25 namespace geometry_9_7_14 {
26 class HuffDecoderCommon {
27  protected:
GetOp2(size_t i)28   static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; }
GetEmit2(size_t,size_t emit)29   static inline uint64_t GetEmit2(size_t, size_t emit) {
30     return table2_0_emit_[emit];
31   }
GetOp3(size_t i)32   static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; }
GetEmit3(size_t,size_t emit)33   static inline uint64_t GetEmit3(size_t, size_t emit) {
34     return table3_0_emit_[emit];
35   }
GetOp4(size_t i)36   static inline uint64_t GetOp4(size_t i) {
37     return table4_ops_[i >> 6][i & 0x3f];
38   }
GetEmit4(size_t i,size_t emit)39   static inline uint64_t GetEmit4(size_t i, size_t emit) {
40     return table4_emit_[i >> 6][emit];
41   }
GetOp5(size_t i)42   static inline uint64_t GetOp5(size_t i) {
43     return table5_ops_[i >> 7][i & 0x7f];
44   }
GetEmit5(size_t i,size_t emit)45   static inline uint64_t GetEmit5(size_t i, size_t emit) {
46     return table5_emit_[i >> 7][emit];
47   }
GetOp1(size_t i)48   static inline uint64_t GetOp1(size_t i) {
49     return table1_ops_[i >> 5][i & 0x1f];
50   }
GetEmit1(size_t i,size_t emit)51   static inline uint64_t GetEmit1(size_t i, size_t emit) {
52     return table1_emit_[i >> 5][emit];
53   }
GetOp6(size_t i)54   static inline uint64_t GetOp6(size_t i) { return i ? 3 : 1; }
GetEmit6(size_t,size_t emit)55   static inline uint64_t GetEmit6(size_t, size_t emit) { return emit + 33; }
GetOp7(size_t i)56   static inline uint64_t GetOp7(size_t i) { return i ? 3 : 1; }
GetEmit7(size_t,size_t emit)57   static inline uint64_t GetEmit7(size_t, size_t emit) { return emit + 40; }
GetOp9(size_t i)58   static inline uint64_t GetOp9(size_t i) { return i; }
GetEmit9(size_t,size_t emit)59   static inline uint64_t GetEmit9(size_t, size_t emit) {
60     return ((void)emit, 63);
61   }
GetOp8(size_t i)62   static inline uint64_t GetOp8(size_t i) {
63     return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1
64                 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1))
65                 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6));
66   }
GetEmit8(size_t,size_t emit)67   static inline uint64_t GetEmit8(size_t, size_t emit) {
68     return (emit < 1 ? (((void)emit, 63)) : ((emit - 1) ? 43 : 39));
69   }
GetOp11(size_t i)70   static inline uint64_t GetOp11(size_t i) {
71     return (i < 2 ? (i) : ((i - 2) + 1));
72   }
GetEmit11(size_t,size_t emit)73   static inline uint64_t GetEmit11(size_t, size_t emit) {
74     return ((void)emit, 124);
75   }
GetOp12(size_t i)76   static inline uint64_t GetOp12(size_t i) {
77     return table12_0_inner_[table12_0_outer_[i]];
78   }
GetEmit12(size_t,size_t emit)79   static inline uint64_t GetEmit12(size_t, size_t emit) {
80     return (emit < 1 ? (((void)emit, 124)) : ((emit - 1) ? 62 : 35));
81   }
GetOp13(size_t i)82   static inline uint64_t GetOp13(size_t i) {
83     return table13_0_inner_[table13_0_outer_[i]];
84   }
GetEmit13(size_t,size_t emit)85   static inline uint64_t GetEmit13(size_t, size_t emit) {
86     return table13_0_emit_[emit];
87   }
GetOp14(size_t i)88   static inline uint64_t GetOp14(size_t i) { return table14_0_ops_[i]; }
GetEmit14(size_t,size_t emit)89   static inline uint64_t GetEmit14(size_t, size_t emit) {
90     return table14_0_emit_[emit];
91   }
GetOp15(size_t i)92   static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; }
GetEmit15(size_t,size_t emit)93   static inline uint64_t GetEmit15(size_t, size_t emit) {
94     return table15_0_emit_[emit];
95   }
GetOp10(size_t i)96   static inline uint64_t GetOp10(size_t i) {
97     return table10_ops_[i >> 5][i & 0x1f];
98   }
GetEmit10(size_t i,size_t emit)99   static inline uint64_t GetEmit10(size_t i, size_t emit) {
100     return table10_emit_[i >> 5][emit];
101   }
GetOp17(size_t i)102   static inline uint64_t GetOp17(size_t i) {
103     return ((i < 3 ? (i) : (((void)(i - 3), 3))) < 2
104                 ? ((i < 3 ? (i) : (((void)(i - 3), 3))) ? 2 : 0)
105                 : (((i < 3 ? (i) : (((void)(i - 3), 3))) - 2) ? 1 : 4));
106   }
GetEmit17(size_t,size_t emit)107   static inline uint64_t GetEmit17(size_t, size_t emit) {
108     return (emit < 1 ? (((void)emit, 92)) : ((emit - 1) ? 208 : 195));
109   }
GetOp18(size_t i)110   static inline uint64_t GetOp18(size_t i) {
111     return table18_0_inner_[table18_0_outer_[i]];
112   }
GetEmit18(size_t,size_t emit)113   static inline uint64_t GetEmit18(size_t, size_t emit) {
114     return table18_0_emit_[emit];
115   }
GetOp16(size_t i)116   static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; }
GetEmit16(size_t,size_t emit)117   static inline uint64_t GetEmit16(size_t, size_t emit) {
118     return table16_0_emit_[emit];
119   }
GetOp20(size_t i)120   static inline uint64_t GetOp20(size_t i) { return table20_0_ops_[i]; }
GetEmit20(size_t,size_t emit)121   static inline uint64_t GetEmit20(size_t, size_t emit) {
122     return table20_0_emit_[emit];
123   }
GetOp21(size_t i)124   static inline uint64_t GetOp21(size_t i) { return table21_0_ops_[i]; }
GetEmit21(size_t,size_t emit)125   static inline uint64_t GetEmit21(size_t, size_t emit) {
126     return table21_0_emit_[emit];
127   }
GetOp22(size_t i)128   static inline uint64_t GetOp22(size_t i) { return table22_0_ops_[i]; }
GetEmit22(size_t,size_t emit)129   static inline uint64_t GetEmit22(size_t, size_t emit) {
130     return table22_0_emit_[emit];
131   }
GetOp23(size_t i)132   static inline uint64_t GetOp23(size_t i) {
133     return table23_ops_[i >> 7][i & 0x7f];
134   }
GetEmit23(size_t i,size_t emit)135   static inline uint64_t GetEmit23(size_t i, size_t emit) {
136     return table23_emit_[i >> 7][emit];
137   }
GetOp24(size_t i)138   static inline uint64_t GetOp24(size_t i) {
139     return table24_ops_[i >> 8][i & 0xff];
140   }
GetEmit24(size_t i,size_t emit)141   static inline uint64_t GetEmit24(size_t i, size_t emit) {
142     return table24_emit_[i >> 8][emit];
143   }
GetOp25(size_t i)144   static inline uint64_t GetOp25(size_t i) {
145     return table25_ops_[i >> 6][i & 0x3f];
146   }
GetEmit25(size_t i,size_t emit)147   static inline uint64_t GetEmit25(size_t i, size_t emit) {
148     return table25_emit_[i >> 6][emit];
149   }
GetOp26(size_t i)150   static inline uint64_t GetOp26(size_t i) {
151     return table26_ops_[i >> 6][i & 0x3f];
152   }
GetEmit26(size_t i,size_t emit)153   static inline uint64_t GetEmit26(size_t i, size_t emit) {
154     return table26_emit_[i >> 6][emit];
155   }
GetOp27(size_t i)156   static inline uint64_t GetOp27(size_t i) {
157     return table27_ops_[i >> 7][i & 0x7f];
158   }
GetEmit27(size_t i,size_t emit)159   static inline uint64_t GetEmit27(size_t i, size_t emit) {
160     return table27_emit_[i >> 7][emit];
161   }
GetOp28(size_t i)162   static inline uint64_t GetOp28(size_t i) {
163     return table28_ops_[i >> 7][i & 0x7f];
164   }
GetEmit28(size_t i,size_t emit)165   static inline uint64_t GetEmit28(size_t i, size_t emit) {
166     return table28_emit_[i >> 7][emit];
167   }
GetOp19(size_t i)168   static inline uint64_t GetOp19(size_t i) {
169     return table19_ops_[i >> 8][i & 0xff];
170   }
GetEmit19(size_t i,size_t emit)171   static inline uint64_t GetEmit19(size_t i, size_t emit) {
172     return table19_emit_[i >> 8][emit];
173   }
174 
175  private:
176   static const uint8_t table2_0_emit_[10];
177   static const uint8_t table2_0_ops_[32];
178   static const uint8_t table3_0_emit_[36];
179   static const uint8_t table3_0_ops_[64];
180   static const uint8_t table4_0_emit_[22];
181   static const uint8_t table4_0_ops_[64];
182   static const uint8_t table4_1_emit_[46];
183   static const uint8_t table4_1_ops_[64];
184   static const uint8_t* const table4_emit_[2];
185   static const uint8_t* const table4_ops_[2];
186   static const uint8_t table5_0_ops_[128];
187   static const uint8_t table5_1_emit_[52];
188   static const uint8_t table5_1_ops_[128];
189   static const uint8_t* const table5_emit_[2];
190   static const uint8_t* const table5_ops_[2];
191   static const uint8_t table1_0_emit_[2];
192   static const uint16_t table1_0_ops_[32];
193   static const uint8_t table1_1_emit_[2];
194   static const uint8_t table1_2_emit_[2];
195   static const uint8_t table1_3_emit_[2];
196   static const uint8_t table1_4_emit_[2];
197   static const uint8_t table1_5_emit_[4];
198   static const uint16_t table1_5_ops_[32];
199   static const uint8_t table1_6_emit_[4];
200   static const uint8_t table1_7_emit_[4];
201   static const uint8_t table1_8_emit_[4];
202   static const uint8_t table1_9_emit_[4];
203   static const uint8_t table1_10_emit_[4];
204   static const uint8_t table1_11_emit_[6];
205   static const uint16_t table1_11_ops_[32];
206   static const uint8_t table1_12_emit_[8];
207   static const uint16_t table1_12_ops_[32];
208   static const uint8_t table1_13_emit_[8];
209   static const uint8_t table1_14_emit_[8];
210   static const uint8_t table1_15_emit_[10];
211   static const uint16_t table1_15_ops_[32];
212   static const uint8_t* const table1_emit_[16];
213   static const uint16_t* const table1_ops_[16];
214   static const uint8_t table12_0_inner_[5];
215   static const uint8_t table12_0_outer_[8];
216   static const uint8_t table13_0_emit_[9];
217   static const uint8_t table13_0_inner_[11];
218   static const uint8_t table13_0_outer_[16];
219   static const uint8_t table14_0_emit_[11];
220   static const uint8_t table14_0_ops_[32];
221   static const uint8_t table15_0_emit_[14];
222   static const uint8_t table15_0_ops_[64];
223   static const uint8_t table10_0_emit_[1];
224   static const uint8_t table10_0_ops_[32];
225   static const uint8_t table10_1_emit_[2];
226   static const uint8_t table10_1_ops_[32];
227   static const uint8_t table10_2_emit_[4];
228   static const uint8_t table10_2_ops_[32];
229   static const uint8_t table10_3_emit_[7];
230   static const uint8_t table10_3_ops_[32];
231   static const uint8_t* const table10_emit_[4];
232   static const uint8_t* const table10_ops_[4];
233   static const uint8_t table18_0_emit_[11];
234   static const uint8_t table18_0_inner_[12];
235   static const uint8_t table18_0_outer_[16];
236   static const uint8_t table16_0_emit_[15];
237   static const uint8_t table16_0_ops_[32];
238   static const uint8_t table20_0_emit_[9];
239   static const uint8_t table20_0_ops_[32];
240   static const uint8_t table21_0_emit_[35];
241   static const uint8_t table21_0_ops_[64];
242   static const uint8_t table22_0_emit_[64];
243   static const uint8_t table22_0_ops_[128];
244   static const uint8_t table23_0_emit_[23];
245   static const uint8_t table23_0_ops_[128];
246   static const uint8_t table23_1_emit_[53];
247   static const uint8_t table23_1_ops_[128];
248   static const uint8_t* const table23_emit_[2];
249   static const uint8_t* const table23_ops_[2];
250   static const uint8_t table24_0_ops_[256];
251   static const uint8_t table24_1_emit_[57];
252   static const uint8_t table24_1_ops_[256];
253   static const uint8_t* const table24_emit_[2];
254   static const uint8_t* const table24_ops_[2];
255   static const uint8_t table25_0_emit_[40];
256   static const uint8_t table25_0_ops_[64];
257   static const uint8_t table25_1_emit_[40];
258   static const uint8_t table25_2_emit_[40];
259   static const uint8_t table25_3_emit_[40];
260   static const uint8_t table25_4_emit_[22];
261   static const uint8_t table25_4_ops_[64];
262   static const uint8_t table25_5_emit_[4];
263   static const uint8_t table25_5_ops_[64];
264   static const uint8_t table25_6_emit_[4];
265   static const uint8_t table25_7_emit_[4];
266   static const uint8_t table25_8_emit_[4];
267   static const uint8_t table25_9_emit_[4];
268   static const uint8_t table25_10_emit_[4];
269   static const uint8_t table25_11_emit_[8];
270   static const uint8_t table25_11_ops_[64];
271   static const uint8_t table25_12_emit_[8];
272   static const uint8_t table25_13_emit_[8];
273   static const uint8_t table25_14_emit_[11];
274   static const uint8_t table25_14_ops_[64];
275   static const uint8_t table25_15_emit_[25];
276   static const uint8_t table25_15_ops_[64];
277   static const uint8_t* const table25_emit_[16];
278   static const uint8_t* const table25_ops_[16];
279   static const uint8_t table26_0_emit_[72];
280   static const uint16_t table26_0_ops_[64];
281   static const uint8_t table26_1_emit_[72];
282   static const uint8_t table26_2_emit_[72];
283   static const uint8_t table26_3_emit_[72];
284   static const uint8_t table26_4_emit_[72];
285   static const uint8_t table26_5_emit_[72];
286   static const uint8_t table26_6_emit_[72];
287   static const uint8_t table26_7_emit_[72];
288   static const uint8_t table26_8_emit_[72];
289   static const uint8_t table26_9_emit_[40];
290   static const uint16_t table26_9_ops_[64];
291   static const uint8_t table26_10_emit_[40];
292   static const uint8_t table26_11_emit_[40];
293   static const uint8_t table26_12_emit_[40];
294   static const uint8_t table26_13_emit_[40];
295   static const uint8_t table26_14_emit_[40];
296   static const uint8_t table26_15_emit_[40];
297   static const uint8_t table26_16_emit_[40];
298   static const uint8_t table26_17_emit_[40];
299   static const uint8_t table26_18_emit_[40];
300   static const uint8_t table26_19_emit_[40];
301   static const uint8_t table26_20_emit_[40];
302   static const uint8_t table26_21_emit_[40];
303   static const uint8_t table26_22_emit_[4];
304   static const uint16_t table26_22_ops_[64];
305   static const uint8_t table26_23_emit_[4];
306   static const uint8_t table26_24_emit_[4];
307   static const uint8_t table26_25_emit_[4];
308   static const uint8_t table26_26_emit_[4];
309   static const uint8_t table26_27_emit_[4];
310   static const uint8_t table26_28_emit_[4];
311   static const uint8_t table26_29_emit_[7];
312   static const uint16_t table26_29_ops_[64];
313   static const uint8_t table26_30_emit_[10];
314   static const uint16_t table26_30_ops_[64];
315   static const uint8_t table26_31_emit_[34];
316   static const uint16_t table26_31_ops_[64];
317   static const uint8_t* const table26_emit_[32];
318   static const uint16_t* const table26_ops_[32];
319   static const uint8_t table27_0_emit_[136];
320   static const uint16_t table27_0_ops_[128];
321   static const uint8_t table27_1_emit_[136];
322   static const uint8_t table27_2_emit_[136];
323   static const uint8_t table27_3_emit_[136];
324   static const uint8_t table27_4_emit_[136];
325   static const uint8_t table27_5_emit_[136];
326   static const uint8_t table27_6_emit_[136];
327   static const uint8_t table27_7_emit_[136];
328   static const uint8_t table27_8_emit_[136];
329   static const uint8_t table27_9_emit_[144];
330   static const uint16_t table27_9_ops_[128];
331   static const uint8_t table27_10_emit_[144];
332   static const uint8_t table27_11_emit_[144];
333   static const uint8_t table27_12_emit_[144];
334   static const uint8_t table27_13_emit_[144];
335   static const uint8_t table27_14_emit_[144];
336   static const uint8_t table27_15_emit_[144];
337   static const uint8_t table27_16_emit_[144];
338   static const uint8_t table27_17_emit_[144];
339   static const uint8_t table27_18_emit_[144];
340   static const uint8_t table27_19_emit_[144];
341   static const uint8_t table27_20_emit_[144];
342   static const uint8_t table27_21_emit_[144];
343   static const uint8_t table27_22_emit_[80];
344   static const uint16_t table27_22_ops_[128];
345   static const uint8_t table27_23_emit_[80];
346   static const uint8_t table27_24_emit_[80];
347   static const uint8_t table27_25_emit_[80];
348   static const uint8_t table27_26_emit_[80];
349   static const uint8_t table27_27_emit_[80];
350   static const uint8_t table27_28_emit_[80];
351   static const uint8_t table27_29_emit_[26];
352   static const uint16_t table27_29_ops_[128];
353   static const uint16_t table27_30_ops_[128];
354   static const uint8_t table27_31_emit_[63];
355   static const uint16_t table27_31_ops_[128];
356   static const uint8_t* const table27_emit_[32];
357   static const uint16_t* const table27_ops_[32];
358   static const uint8_t table28_0_emit_[44];
359   static const uint16_t table28_0_ops_[128];
360   static const uint8_t table28_1_emit_[104];
361   static const uint16_t table28_1_ops_[128];
362   static const uint8_t table28_2_emit_[44];
363   static const uint8_t table28_3_emit_[104];
364   static const uint8_t table28_4_emit_[44];
365   static const uint8_t table28_5_emit_[104];
366   static const uint8_t table28_6_emit_[44];
367   static const uint8_t table28_7_emit_[104];
368   static const uint8_t table28_8_emit_[44];
369   static const uint8_t table28_9_emit_[104];
370   static const uint8_t table28_10_emit_[44];
371   static const uint8_t table28_11_emit_[104];
372   static const uint8_t table28_12_emit_[44];
373   static const uint8_t table28_13_emit_[104];
374   static const uint8_t table28_14_emit_[44];
375   static const uint8_t table28_15_emit_[104];
376   static const uint8_t table28_16_emit_[44];
377   static const uint8_t table28_17_emit_[104];
378   static const uint8_t table28_18_emit_[136];
379   static const uint8_t table28_19_emit_[136];
380   static const uint8_t table28_20_emit_[136];
381   static const uint8_t table28_21_emit_[136];
382   static const uint8_t table28_22_emit_[136];
383   static const uint8_t table28_23_emit_[136];
384   static const uint8_t table28_24_emit_[136];
385   static const uint8_t table28_25_emit_[136];
386   static const uint8_t table28_26_emit_[136];
387   static const uint8_t table28_27_emit_[136];
388   static const uint8_t table28_28_emit_[136];
389   static const uint8_t table28_29_emit_[136];
390   static const uint8_t table28_30_emit_[136];
391   static const uint8_t table28_31_emit_[136];
392   static const uint8_t table28_32_emit_[136];
393   static const uint8_t table28_33_emit_[136];
394   static const uint8_t table28_34_emit_[136];
395   static const uint8_t table28_35_emit_[136];
396   static const uint8_t table28_36_emit_[136];
397   static const uint8_t table28_37_emit_[136];
398   static const uint8_t table28_38_emit_[136];
399   static const uint8_t table28_39_emit_[136];
400   static const uint8_t table28_40_emit_[136];
401   static const uint8_t table28_41_emit_[136];
402   static const uint8_t table28_42_emit_[136];
403   static const uint8_t table28_43_emit_[136];
404   static const uint8_t table28_44_emit_[144];
405   static const uint8_t table28_45_emit_[144];
406   static const uint8_t table28_46_emit_[144];
407   static const uint8_t table28_47_emit_[144];
408   static const uint8_t table28_48_emit_[144];
409   static const uint8_t table28_49_emit_[144];
410   static const uint8_t table28_50_emit_[144];
411   static const uint8_t table28_51_emit_[144];
412   static const uint8_t table28_52_emit_[144];
413   static const uint8_t table28_53_emit_[144];
414   static const uint8_t table28_54_emit_[144];
415   static const uint8_t table28_55_emit_[144];
416   static const uint8_t table28_56_emit_[144];
417   static const uint8_t table28_57_emit_[144];
418   static const uint8_t table28_58_emit_[112];
419   static const uint16_t table28_58_ops_[128];
420   static const uint8_t table28_59_emit_[80];
421   static const uint8_t table28_60_emit_[80];
422   static const uint8_t table28_61_emit_[44];
423   static const uint16_t table28_61_ops_[128];
424   static const uint8_t table28_62_emit_[17];
425   static const uint16_t table28_62_ops_[128];
426   static const uint8_t table28_63_emit_[46];
427   static const uint16_t table28_63_ops_[128];
428   static const uint8_t* const table28_emit_[64];
429   static const uint16_t* const table28_ops_[64];
430   static const uint8_t table19_0_emit_[1];
431   static const uint16_t table19_0_ops_[256];
432   static const uint8_t table19_2_emit_[1];
433   static const uint8_t table19_4_emit_[1];
434   static const uint8_t table19_6_emit_[1];
435   static const uint8_t table19_8_emit_[1];
436   static const uint8_t table19_10_emit_[1];
437   static const uint8_t table19_12_emit_[1];
438   static const uint8_t table19_14_emit_[1];
439   static const uint8_t table19_16_emit_[1];
440   static const uint8_t table19_18_emit_[1];
441   static const uint16_t table19_18_ops_[256];
442   static const uint8_t table19_19_emit_[1];
443   static const uint8_t table19_20_emit_[1];
444   static const uint8_t table19_21_emit_[1];
445   static const uint8_t table19_22_emit_[1];
446   static const uint8_t table19_23_emit_[1];
447   static const uint8_t table19_24_emit_[1];
448   static const uint8_t table19_25_emit_[1];
449   static const uint8_t table19_26_emit_[1];
450   static const uint8_t table19_27_emit_[1];
451   static const uint8_t table19_28_emit_[1];
452   static const uint8_t table19_29_emit_[1];
453   static const uint8_t table19_30_emit_[1];
454   static const uint8_t table19_31_emit_[1];
455   static const uint8_t table19_32_emit_[1];
456   static const uint8_t table19_33_emit_[1];
457   static const uint8_t table19_34_emit_[1];
458   static const uint8_t table19_35_emit_[1];
459   static const uint8_t table19_36_emit_[1];
460   static const uint8_t table19_37_emit_[1];
461   static const uint8_t table19_38_emit_[1];
462   static const uint8_t table19_39_emit_[1];
463   static const uint8_t table19_40_emit_[1];
464   static const uint8_t table19_41_emit_[1];
465   static const uint8_t table19_42_emit_[1];
466   static const uint8_t table19_43_emit_[1];
467   static const uint8_t table19_44_emit_[2];
468   static const uint16_t table19_44_ops_[256];
469   static const uint8_t table19_45_emit_[2];
470   static const uint8_t table19_46_emit_[2];
471   static const uint8_t table19_47_emit_[2];
472   static const uint8_t table19_48_emit_[2];
473   static const uint8_t table19_49_emit_[2];
474   static const uint8_t table19_50_emit_[2];
475   static const uint8_t table19_51_emit_[2];
476   static const uint8_t table19_52_emit_[2];
477   static const uint8_t table19_53_emit_[2];
478   static const uint8_t table19_54_emit_[2];
479   static const uint8_t table19_55_emit_[2];
480   static const uint8_t table19_56_emit_[2];
481   static const uint8_t table19_57_emit_[2];
482   static const uint8_t table19_58_emit_[3];
483   static const uint16_t table19_58_ops_[256];
484   static const uint8_t table19_59_emit_[4];
485   static const uint16_t table19_59_ops_[256];
486   static const uint8_t table19_60_emit_[4];
487   static const uint8_t table19_61_emit_[6];
488   static const uint16_t table19_61_ops_[256];
489   static const uint16_t table19_62_ops_[256];
490   static const uint8_t table19_63_emit_[49];
491   static const uint16_t table19_63_ops_[256];
492   static const uint8_t* const table19_emit_[64];
493   static const uint16_t* const table19_ops_[64];
494 };
495 template <typename F>
496 class HuffDecoder : public HuffDecoderCommon {
497  public:
HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)498   HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end)
499       : sink_(sink), begin_(begin), end_(end) {}
Run()500   bool Run() {
501     while (!done_) {
502       if (!RefillTo9()) {
503         Done0();
504         break;
505       }
506       const auto index = (buffer_ >> (buffer_len_ - 9)) & 0x1ff;
507       const auto op = GetOp1(index);
508       const int consumed = op & 15;
509       buffer_len_ -= consumed;
510       const auto emit_ofs = op >> 7;
511       switch ((op >> 4) & 7) {
512         case 0: {
513           sink_(GetEmit1(index, emit_ofs + 0));
514           break;
515         }
516         case 1: {
517           DecodeStep0();
518           break;
519         }
520         case 2: {
521           DecodeStep1();
522           break;
523         }
524         case 3: {
525           DecodeStep2();
526           break;
527         }
528         case 4: {
529           DecodeStep3();
530           break;
531         }
532       }
533     }
534     return ok_;
535   }
536 
537  private:
RefillTo9()538   bool RefillTo9() {
539     switch (buffer_len_) {
540       case 0: {
541         return Read2to8Bytes();
542       }
543       case 1:
544       case 2:
545       case 3:
546       case 4:
547       case 5:
548       case 6:
549       case 7:
550       case 8: {
551         return Read1to7Bytes();
552       }
553     }
554     return true;
555   }
Read2to8Bytes()556   bool Read2to8Bytes() {
557     switch (end_ - begin_) {
558       case 0:
559       case 1: {
560         return false;
561       }
562       case 2: {
563         Fill2();
564         return true;
565       }
566       case 3: {
567         Fill3();
568         return true;
569       }
570       case 4: {
571         Fill4();
572         return true;
573       }
574       case 5: {
575         Fill5();
576         return true;
577       }
578       case 6: {
579         Fill6();
580         return true;
581       }
582       case 7: {
583         Fill7();
584         return true;
585       }
586       default: {
587         Fill8();
588         return true;
589       }
590     }
591   }
Fill2()592   void Fill2() {
593     buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) |
594               (static_cast<uint64_t>(begin_[1]) << 0);
595     begin_ += 2;
596     buffer_len_ += 16;
597   }
Fill3()598   void Fill3() {
599     buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) |
600               (static_cast<uint64_t>(begin_[1]) << 8) |
601               (static_cast<uint64_t>(begin_[2]) << 0);
602     begin_ += 3;
603     buffer_len_ += 24;
604   }
Fill4()605   void Fill4() {
606     buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) |
607               (static_cast<uint64_t>(begin_[1]) << 16) |
608               (static_cast<uint64_t>(begin_[2]) << 8) |
609               (static_cast<uint64_t>(begin_[3]) << 0);
610     begin_ += 4;
611     buffer_len_ += 32;
612   }
Fill5()613   void Fill5() {
614     buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) |
615               (static_cast<uint64_t>(begin_[1]) << 24) |
616               (static_cast<uint64_t>(begin_[2]) << 16) |
617               (static_cast<uint64_t>(begin_[3]) << 8) |
618               (static_cast<uint64_t>(begin_[4]) << 0);
619     begin_ += 5;
620     buffer_len_ += 40;
621   }
Fill6()622   void Fill6() {
623     buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) |
624               (static_cast<uint64_t>(begin_[1]) << 32) |
625               (static_cast<uint64_t>(begin_[2]) << 24) |
626               (static_cast<uint64_t>(begin_[3]) << 16) |
627               (static_cast<uint64_t>(begin_[4]) << 8) |
628               (static_cast<uint64_t>(begin_[5]) << 0);
629     begin_ += 6;
630     buffer_len_ += 48;
631   }
Fill7()632   void Fill7() {
633     buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) |
634               (static_cast<uint64_t>(begin_[1]) << 40) |
635               (static_cast<uint64_t>(begin_[2]) << 32) |
636               (static_cast<uint64_t>(begin_[3]) << 24) |
637               (static_cast<uint64_t>(begin_[4]) << 16) |
638               (static_cast<uint64_t>(begin_[5]) << 8) |
639               (static_cast<uint64_t>(begin_[6]) << 0);
640     begin_ += 7;
641     buffer_len_ += 56;
642   }
Fill8()643   void Fill8() {
644     buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) |
645               (static_cast<uint64_t>(begin_[1]) << 48) |
646               (static_cast<uint64_t>(begin_[2]) << 40) |
647               (static_cast<uint64_t>(begin_[3]) << 32) |
648               (static_cast<uint64_t>(begin_[4]) << 24) |
649               (static_cast<uint64_t>(begin_[5]) << 16) |
650               (static_cast<uint64_t>(begin_[6]) << 8) |
651               (static_cast<uint64_t>(begin_[7]) << 0);
652     begin_ += 8;
653     buffer_len_ += 64;
654   }
Read1to7Bytes()655   bool Read1to7Bytes() {
656     switch (end_ - begin_) {
657       case 0: {
658         return false;
659       }
660       case 1: {
661         Fill1();
662         return true;
663       }
664       case 2: {
665         Fill2();
666         return true;
667       }
668       case 3: {
669         Fill3();
670         return true;
671       }
672       case 4: {
673         Fill4();
674         return true;
675       }
676       case 5: {
677         Fill5();
678         return true;
679       }
680       case 6: {
681         Fill6();
682         return true;
683       }
684       default: {
685         Fill7();
686         return true;
687       }
688     }
689   }
Fill1()690   void Fill1() {
691     buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0);
692     begin_ += 1;
693     buffer_len_ += 8;
694   }
Done0()695   void Done0() {
696     done_ = true;
697     switch (end_ - begin_) {
698       case 1: {
699         Fill1();
700         break;
701       }
702     }
703     switch (buffer_len_) {
704       case 1:
705       case 2:
706       case 3:
707       case 4: {
708         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
709         return;
710       }
711       case 5: {
712         const auto index = buffer_ & 31;
713         const auto op = GetOp2(index);
714         switch (op & 3) {
715           case 0: {
716             sink_(GetEmit2(index, (op >> 2) + 0));
717             break;
718           }
719           case 1: {
720             ok_ = false;
721             break;
722           }
723         }
724         return;
725       }
726       case 6: {
727         const auto index = buffer_ & 63;
728         const auto op = GetOp3(index);
729         switch (op & 3) {
730           case 0: {
731             ok_ = false;
732             break;
733           }
734           case 1: {
735             sink_(GetEmit3(index, (op >> 2) + 0));
736             break;
737           }
738         }
739         return;
740       }
741       case 7: {
742         const auto index = buffer_ & 127;
743         const auto op = GetOp4(index);
744         switch (op & 3) {
745           case 0: {
746             ok_ = false;
747             break;
748           }
749           case 1: {
750             sink_(GetEmit4(index, (op >> 2) + 0));
751             break;
752           }
753         }
754         return;
755       }
756       case 8: {
757         const auto index = buffer_ & 255;
758         const auto op = GetOp5(index);
759         switch (op & 3) {
760           case 0: {
761             ok_ = false;
762             break;
763           }
764           case 1: {
765             sink_(GetEmit5(index, (op >> 2) + 0));
766             break;
767           }
768         }
769         return;
770       }
771       case 0: {
772         return;
773       }
774     }
775   }
DecodeStep0()776   void DecodeStep0() {
777     if (!RefillTo1()) {
778       Done1();
779       return;
780     }
781     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
782     const auto op = GetOp6(index);
783     const int consumed = op & 1;
784     buffer_len_ -= consumed;
785     const auto emit_ofs = op >> 1;
786     sink_(GetEmit6(index, emit_ofs + 0));
787   }
RefillTo1()788   bool RefillTo1() {
789     switch (buffer_len_) {
790       case 0: {
791         return Read1to8Bytes();
792       }
793     }
794     return true;
795   }
Read1to8Bytes()796   bool Read1to8Bytes() {
797     switch (end_ - begin_) {
798       case 0: {
799         return false;
800       }
801       case 1: {
802         Fill1();
803         return true;
804       }
805       case 2: {
806         Fill2();
807         return true;
808       }
809       case 3: {
810         Fill3();
811         return true;
812       }
813       case 4: {
814         Fill4();
815         return true;
816       }
817       case 5: {
818         Fill5();
819         return true;
820       }
821       case 6: {
822         Fill6();
823         return true;
824       }
825       case 7: {
826         Fill7();
827         return true;
828       }
829       default: {
830         Fill8();
831         return true;
832       }
833     }
834   }
Done1()835   void Done1() {
836     done_ = true;
837     ok_ = false;
838   }
DecodeStep1()839   void DecodeStep1() {
840     if (!RefillTo1()) {
841       Done2();
842       return;
843     }
844     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
845     const auto op = GetOp7(index);
846     const int consumed = op & 1;
847     buffer_len_ -= consumed;
848     const auto emit_ofs = op >> 1;
849     sink_(GetEmit7(index, emit_ofs + 0));
850   }
Done2()851   void Done2() {
852     done_ = true;
853     ok_ = false;
854   }
DecodeStep2()855   void DecodeStep2() {
856     if (!RefillTo2()) {
857       Done3();
858       return;
859     }
860     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
861     const auto op = GetOp8(index);
862     const int consumed = op & 3;
863     buffer_len_ -= consumed;
864     const auto emit_ofs = op >> 2;
865     sink_(GetEmit8(index, emit_ofs + 0));
866   }
RefillTo2()867   bool RefillTo2() {
868     switch (buffer_len_) {
869       case 0: {
870         return Read1to8Bytes();
871       }
872       case 1: {
873         return Read1to7Bytes();
874       }
875     }
876     return true;
877   }
Done3()878   void Done3() {
879     done_ = true;
880     switch (buffer_len_) {
881       case 1: {
882         const auto index = buffer_ & 1;
883         const auto op = GetOp9(index);
884         switch (op & 1) {
885           case 0: {
886             sink_(GetEmit9(index, (op >> 1) + 0));
887             break;
888           }
889           case 1: {
890             ok_ = false;
891             break;
892           }
893         }
894         return;
895       }
896       case 0: {
897         ok_ = false;
898         return;
899       }
900     }
901   }
DecodeStep3()902   void DecodeStep3() {
903     if (!RefillTo7()) {
904       Done4();
905       return;
906     }
907     const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f;
908     const auto op = GetOp10(index);
909     const int consumed = op & 7;
910     buffer_len_ -= consumed;
911     const auto emit_ofs = op >> 5;
912     switch ((op >> 3) & 3) {
913       case 0: {
914         sink_(GetEmit10(index, emit_ofs + 0));
915         break;
916       }
917       case 1: {
918         DecodeStep4();
919         break;
920       }
921       case 2: {
922         DecodeStep5();
923         break;
924       }
925     }
926   }
RefillTo7()927   bool RefillTo7() {
928     switch (buffer_len_) {
929       case 0: {
930         return Read1to8Bytes();
931       }
932       case 1:
933       case 2:
934       case 3:
935       case 4:
936       case 5:
937       case 6: {
938         return Read1to7Bytes();
939       }
940     }
941     return true;
942   }
Done4()943   void Done4() {
944     done_ = true;
945     switch (buffer_len_) {
946       case 1: {
947         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
948         return;
949       }
950       case 2: {
951         const auto index = buffer_ & 3;
952         const auto op = GetOp11(index);
953         switch (op & 3) {
954           case 0: {
955             sink_(GetEmit11(index, (op >> 2) + 0));
956             break;
957           }
958           case 1: {
959             ok_ = false;
960             break;
961           }
962         }
963         return;
964       }
965       case 3: {
966         const auto index = buffer_ & 7;
967         const auto op = GetOp12(index);
968         switch (op & 3) {
969           case 0: {
970             ok_ = false;
971             break;
972           }
973           case 1: {
974             sink_(GetEmit12(index, (op >> 2) + 0));
975             break;
976           }
977         }
978         return;
979       }
980       case 4: {
981         const auto index = buffer_ & 15;
982         const auto op = GetOp13(index);
983         switch (op & 3) {
984           case 0: {
985             ok_ = false;
986             break;
987           }
988           case 1: {
989             sink_(GetEmit13(index, (op >> 2) + 0));
990             break;
991           }
992         }
993         return;
994       }
995       case 5: {
996         const auto index = buffer_ & 31;
997         const auto op = GetOp14(index);
998         switch (op & 3) {
999           case 0: {
1000             ok_ = false;
1001             break;
1002           }
1003           case 1: {
1004             sink_(GetEmit14(index, (op >> 2) + 0));
1005             break;
1006           }
1007         }
1008         return;
1009       }
1010       case 6: {
1011         const auto index = buffer_ & 63;
1012         const auto op = GetOp15(index);
1013         switch (op & 3) {
1014           case 0: {
1015             ok_ = false;
1016             break;
1017           }
1018           case 1: {
1019             sink_(GetEmit15(index, (op >> 2) + 0));
1020             break;
1021           }
1022         }
1023         return;
1024       }
1025       case 0: {
1026         return;
1027       }
1028     }
1029   }
DecodeStep4()1030   void DecodeStep4() {
1031     if (!RefillTo5()) {
1032       Done5();
1033       return;
1034     }
1035     const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f;
1036     const auto op = GetOp16(index);
1037     const int consumed = op & 7;
1038     buffer_len_ -= consumed;
1039     const auto emit_ofs = op >> 3;
1040     sink_(GetEmit16(index, emit_ofs + 0));
1041   }
RefillTo5()1042   bool RefillTo5() {
1043     switch (buffer_len_) {
1044       case 0: {
1045         return Read1to8Bytes();
1046       }
1047       case 1:
1048       case 2:
1049       case 3:
1050       case 4: {
1051         return Read1to7Bytes();
1052       }
1053     }
1054     return true;
1055   }
Done5()1056   void Done5() {
1057     done_ = true;
1058     switch (buffer_len_) {
1059       case 1:
1060       case 2:
1061       case 0: {
1062         ok_ = false;
1063         return;
1064       }
1065       case 3: {
1066         const auto index = buffer_ & 7;
1067         const auto op = GetOp17(index);
1068         switch (op & 1) {
1069           case 0: {
1070             sink_(GetEmit17(index, (op >> 1) + 0));
1071             break;
1072           }
1073           case 1: {
1074             ok_ = false;
1075             break;
1076           }
1077         }
1078         return;
1079       }
1080       case 4: {
1081         const auto index = buffer_ & 15;
1082         const auto op = GetOp18(index);
1083         switch (op & 1) {
1084           case 0: {
1085             ok_ = false;
1086             break;
1087           }
1088           case 1: {
1089             sink_(GetEmit18(index, (op >> 1) + 0));
1090             break;
1091           }
1092         }
1093         return;
1094       }
1095     }
1096   }
DecodeStep5()1097   void DecodeStep5() {
1098     if (!RefillTo14()) {
1099       Done6();
1100       return;
1101     }
1102     const auto index = (buffer_ >> (buffer_len_ - 14)) & 0x3fff;
1103     const auto op = GetOp19(index);
1104     const int consumed = op & 15;
1105     buffer_len_ -= consumed;
1106     const auto emit_ofs = op >> 5;
1107     switch ((op >> 4) & 1) {
1108       case 0: {
1109         sink_(GetEmit19(index, emit_ofs + 0));
1110         break;
1111       }
1112       case 1: {
1113         begin_ = end_;
1114         buffer_len_ = 0;
1115         break;
1116       }
1117     }
1118   }
RefillTo14()1119   bool RefillTo14() {
1120     switch (buffer_len_) {
1121       case 0: {
1122         return Read2to8Bytes();
1123       }
1124       case 1:
1125       case 2:
1126       case 3:
1127       case 4:
1128       case 5: {
1129         return Read2to7Bytes();
1130       }
1131       case 6:
1132       case 7:
1133       case 8: {
1134         return Read1to7Bytes();
1135       }
1136       case 9:
1137       case 10:
1138       case 11:
1139       case 12:
1140       case 13: {
1141         return Read1to6Bytes();
1142       }
1143     }
1144     return true;
1145   }
Read2to7Bytes()1146   bool Read2to7Bytes() {
1147     switch (end_ - begin_) {
1148       case 0:
1149       case 1: {
1150         return false;
1151       }
1152       case 2: {
1153         Fill2();
1154         return true;
1155       }
1156       case 3: {
1157         Fill3();
1158         return true;
1159       }
1160       case 4: {
1161         Fill4();
1162         return true;
1163       }
1164       case 5: {
1165         Fill5();
1166         return true;
1167       }
1168       case 6: {
1169         Fill6();
1170         return true;
1171       }
1172       default: {
1173         Fill7();
1174         return true;
1175       }
1176     }
1177   }
Read1to6Bytes()1178   bool Read1to6Bytes() {
1179     switch (end_ - begin_) {
1180       case 0: {
1181         return false;
1182       }
1183       case 1: {
1184         Fill1();
1185         return true;
1186       }
1187       case 2: {
1188         Fill2();
1189         return true;
1190       }
1191       case 3: {
1192         Fill3();
1193         return true;
1194       }
1195       case 4: {
1196         Fill4();
1197         return true;
1198       }
1199       case 5: {
1200         Fill5();
1201         return true;
1202       }
1203       default: {
1204         Fill6();
1205         return true;
1206       }
1207     }
1208   }
Done6()1209   void Done6() {
1210     done_ = true;
1211     switch (end_ - begin_) {
1212       case 1: {
1213         Fill1();
1214         break;
1215       }
1216     }
1217     switch (buffer_len_) {
1218       case 1:
1219       case 2:
1220       case 3:
1221       case 4: {
1222         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1223         return;
1224       }
1225       case 5: {
1226         const auto index = buffer_ & 31;
1227         const auto op = GetOp20(index);
1228         switch (op & 3) {
1229           case 0: {
1230             sink_(GetEmit20(index, (op >> 2) + 0));
1231             break;
1232           }
1233           case 1: {
1234             ok_ = false;
1235             break;
1236           }
1237         }
1238         return;
1239       }
1240       case 6: {
1241         const auto index = buffer_ & 63;
1242         const auto op = GetOp21(index);
1243         switch (op & 3) {
1244           case 0: {
1245             ok_ = false;
1246             break;
1247           }
1248           case 1: {
1249             sink_(GetEmit21(index, (op >> 2) + 0));
1250             break;
1251           }
1252         }
1253         return;
1254       }
1255       case 7: {
1256         const auto index = buffer_ & 127;
1257         const auto op = GetOp22(index);
1258         switch (op & 3) {
1259           case 0: {
1260             ok_ = false;
1261             break;
1262           }
1263           case 1: {
1264             sink_(GetEmit22(index, (op >> 2) + 0));
1265             break;
1266           }
1267         }
1268         return;
1269       }
1270       case 8: {
1271         const auto index = buffer_ & 255;
1272         const auto op = GetOp23(index);
1273         switch (op & 3) {
1274           case 0: {
1275             ok_ = false;
1276             break;
1277           }
1278           case 1: {
1279             sink_(GetEmit23(index, (op >> 2) + 0));
1280             break;
1281           }
1282         }
1283         return;
1284       }
1285       case 9: {
1286         const auto index = buffer_ & 511;
1287         const auto op = GetOp24(index);
1288         switch (op & 3) {
1289           case 0: {
1290             ok_ = false;
1291             break;
1292           }
1293           case 1: {
1294             sink_(GetEmit24(index, (op >> 2) + 0));
1295             break;
1296           }
1297         }
1298         return;
1299       }
1300       case 10: {
1301         const auto index = buffer_ & 1023;
1302         const auto op = GetOp25(index);
1303         switch (op & 3) {
1304           case 0: {
1305             sink_(GetEmit25(index, (op >> 2) + 0));
1306             sink_(GetEmit25(index, (op >> 2) + 1));
1307             break;
1308           }
1309           case 1: {
1310             ok_ = false;
1311             break;
1312           }
1313           case 2: {
1314             sink_(GetEmit25(index, (op >> 2) + 0));
1315             break;
1316           }
1317         }
1318         return;
1319       }
1320       case 11: {
1321         const auto index = buffer_ & 2047;
1322         const auto op = GetOp26(index);
1323         switch (op & 3) {
1324           case 0: {
1325             ok_ = false;
1326             break;
1327           }
1328           case 1: {
1329             sink_(GetEmit26(index, (op >> 2) + 0));
1330             sink_(GetEmit26(index, (op >> 2) + 1));
1331             break;
1332           }
1333           case 2: {
1334             sink_(GetEmit26(index, (op >> 2) + 0));
1335             break;
1336           }
1337         }
1338         return;
1339       }
1340       case 12: {
1341         const auto index = buffer_ & 4095;
1342         const auto op = GetOp27(index);
1343         switch (op & 3) {
1344           case 0: {
1345             ok_ = false;
1346             break;
1347           }
1348           case 1: {
1349             sink_(GetEmit27(index, (op >> 2) + 0));
1350             sink_(GetEmit27(index, (op >> 2) + 1));
1351             break;
1352           }
1353           case 2: {
1354             sink_(GetEmit27(index, (op >> 2) + 0));
1355             break;
1356           }
1357         }
1358         return;
1359       }
1360       case 13: {
1361         const auto index = buffer_ & 8191;
1362         const auto op = GetOp28(index);
1363         switch (op & 3) {
1364           case 0: {
1365             ok_ = false;
1366             break;
1367           }
1368           case 1: {
1369             sink_(GetEmit28(index, (op >> 2) + 0));
1370             sink_(GetEmit28(index, (op >> 2) + 1));
1371             break;
1372           }
1373           case 2: {
1374             sink_(GetEmit28(index, (op >> 2) + 0));
1375             break;
1376           }
1377         }
1378         return;
1379       }
1380       case 0: {
1381         return;
1382       }
1383     }
1384   }
1385   F sink_;
1386   const uint8_t* begin_;
1387   const uint8_t* const end_;
1388   uint64_t buffer_ = 0;
1389   int buffer_len_ = 0;
1390   bool ok_ = true;
1391   bool done_ = false;
1392 };
1393 }  // namespace geometry_9_7_14
1394 }  // namespace grpc_core
1395 #endif  // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_7_14_H
1396