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