group_varint_offset_encoding/
decoder.rs

1pub(crate) fn decode_block(v: u8, data: &[u8]) -> (u32, u32, u32, usize) {
2    match v & 0b11_11_11 {
3        // GEN TABLE HERE
4        0 => {
5            let v0 = data[0] as u32;
6            let v1 = data[1] as u32;
7            let v2 = data[2] as u32;
8            (v0, v1, v2, 3)
9        }
10        1 => {
11            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
12            let v1 = data[2] as u32;
13            let v2 = data[3] as u32;
14            (v0, v1, v2, 4)
15        }
16        2 => {
17            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
18            let v1 = data[3] as u32;
19            let v2 = data[4] as u32;
20            (v0, v1, v2, 5)
21        }
22        3 => {
23            let v0 = (data[0] as u32)
24                | (data[1] as u32) << 8
25                | (data[2] as u32) << 16
26                | (data[3] as u32) << 24;
27            let v1 = data[4] as u32;
28            let v2 = data[5] as u32;
29            (v0, v1, v2, 6)
30        }
31        4 => {
32            let v0 = data[0] as u32;
33            let v1 = (data[1] as u32) | (data[2] as u32) << 8;
34            let v2 = data[3] as u32;
35            (v0, v1, v2, 4)
36        }
37        5 => {
38            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
39            let v1 = (data[2] as u32) | (data[3] as u32) << 8;
40            let v2 = data[4] as u32;
41            (v0, v1, v2, 5)
42        }
43        6 => {
44            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
45            let v1 = (data[3] as u32) | (data[4] as u32) << 8;
46            let v2 = data[5] as u32;
47            (v0, v1, v2, 6)
48        }
49        7 => {
50            let v0 = (data[0] as u32)
51                | (data[1] as u32) << 8
52                | (data[2] as u32) << 16
53                | (data[3] as u32) << 24;
54            let v1 = (data[4] as u32) | (data[5] as u32) << 8;
55            let v2 = data[6] as u32;
56            (v0, v1, v2, 7)
57        }
58        8 => {
59            let v0 = data[0] as u32;
60            let v1 = (data[1] as u32) | (data[2] as u32) << 8 | (data[3] as u32) << 16;
61            let v2 = data[4] as u32;
62            (v0, v1, v2, 5)
63        }
64        9 => {
65            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
66            let v1 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
67            let v2 = data[5] as u32;
68            (v0, v1, v2, 6)
69        }
70        10 => {
71            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
72            let v1 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
73            let v2 = data[6] as u32;
74            (v0, v1, v2, 7)
75        }
76        11 => {
77            let v0 = (data[0] as u32)
78                | (data[1] as u32) << 8
79                | (data[2] as u32) << 16
80                | (data[3] as u32) << 24;
81            let v1 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
82            let v2 = data[7] as u32;
83            (v0, v1, v2, 8)
84        }
85        12 => {
86            let v0 = data[0] as u32;
87            let v1 = (data[1] as u32)
88                | (data[2] as u32) << 8
89                | (data[3] as u32) << 16
90                | (data[4] as u32) << 24;
91            let v2 = data[5] as u32;
92            (v0, v1, v2, 6)
93        }
94        13 => {
95            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
96            let v1 = (data[2] as u32)
97                | (data[3] as u32) << 8
98                | (data[4] as u32) << 16
99                | (data[5] as u32) << 24;
100            let v2 = data[6] as u32;
101            (v0, v1, v2, 7)
102        }
103        14 => {
104            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
105            let v1 = (data[3] as u32)
106                | (data[4] as u32) << 8
107                | (data[5] as u32) << 16
108                | (data[6] as u32) << 24;
109            let v2 = data[7] as u32;
110            (v0, v1, v2, 8)
111        }
112        15 => {
113            let v0 = (data[0] as u32)
114                | (data[1] as u32) << 8
115                | (data[2] as u32) << 16
116                | (data[3] as u32) << 24;
117            let v1 = (data[4] as u32)
118                | (data[5] as u32) << 8
119                | (data[6] as u32) << 16
120                | (data[7] as u32) << 24;
121            let v2 = data[8] as u32;
122            (v0, v1, v2, 9)
123        }
124        16 => {
125            let v0 = data[0] as u32;
126            let v1 = data[1] as u32;
127            let v2 = (data[2] as u32) | (data[3] as u32) << 8;
128            (v0, v1, v2, 4)
129        }
130        17 => {
131            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
132            let v1 = data[2] as u32;
133            let v2 = (data[3] as u32) | (data[4] as u32) << 8;
134            (v0, v1, v2, 5)
135        }
136        18 => {
137            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
138            let v1 = data[3] as u32;
139            let v2 = (data[4] as u32) | (data[5] as u32) << 8;
140            (v0, v1, v2, 6)
141        }
142        19 => {
143            let v0 = (data[0] as u32)
144                | (data[1] as u32) << 8
145                | (data[2] as u32) << 16
146                | (data[3] as u32) << 24;
147            let v1 = data[4] as u32;
148            let v2 = (data[5] as u32) | (data[6] as u32) << 8;
149            (v0, v1, v2, 7)
150        }
151        20 => {
152            let v0 = data[0] as u32;
153            let v1 = (data[1] as u32) | (data[2] as u32) << 8;
154            let v2 = (data[3] as u32) | (data[4] as u32) << 8;
155            (v0, v1, v2, 5)
156        }
157        21 => {
158            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
159            let v1 = (data[2] as u32) | (data[3] as u32) << 8;
160            let v2 = (data[4] as u32) | (data[5] as u32) << 8;
161            (v0, v1, v2, 6)
162        }
163        22 => {
164            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
165            let v1 = (data[3] as u32) | (data[4] as u32) << 8;
166            let v2 = (data[5] as u32) | (data[6] as u32) << 8;
167            (v0, v1, v2, 7)
168        }
169        23 => {
170            let v0 = (data[0] as u32)
171                | (data[1] as u32) << 8
172                | (data[2] as u32) << 16
173                | (data[3] as u32) << 24;
174            let v1 = (data[4] as u32) | (data[5] as u32) << 8;
175            let v2 = (data[6] as u32) | (data[7] as u32) << 8;
176            (v0, v1, v2, 8)
177        }
178        24 => {
179            let v0 = data[0] as u32;
180            let v1 = (data[1] as u32) | (data[2] as u32) << 8 | (data[3] as u32) << 16;
181            let v2 = (data[4] as u32) | (data[5] as u32) << 8;
182            (v0, v1, v2, 6)
183        }
184        25 => {
185            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
186            let v1 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
187            let v2 = (data[5] as u32) | (data[6] as u32) << 8;
188            (v0, v1, v2, 7)
189        }
190        26 => {
191            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
192            let v1 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
193            let v2 = (data[6] as u32) | (data[7] as u32) << 8;
194            (v0, v1, v2, 8)
195        }
196        27 => {
197            let v0 = (data[0] as u32)
198                | (data[1] as u32) << 8
199                | (data[2] as u32) << 16
200                | (data[3] as u32) << 24;
201            let v1 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
202            let v2 = (data[7] as u32) | (data[8] as u32) << 8;
203            (v0, v1, v2, 9)
204        }
205        28 => {
206            let v0 = data[0] as u32;
207            let v1 = (data[1] as u32)
208                | (data[2] as u32) << 8
209                | (data[3] as u32) << 16
210                | (data[4] as u32) << 24;
211            let v2 = (data[5] as u32) | (data[6] as u32) << 8;
212            (v0, v1, v2, 7)
213        }
214        29 => {
215            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
216            let v1 = (data[2] as u32)
217                | (data[3] as u32) << 8
218                | (data[4] as u32) << 16
219                | (data[5] as u32) << 24;
220            let v2 = (data[6] as u32) | (data[7] as u32) << 8;
221            (v0, v1, v2, 8)
222        }
223        30 => {
224            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
225            let v1 = (data[3] as u32)
226                | (data[4] as u32) << 8
227                | (data[5] as u32) << 16
228                | (data[6] as u32) << 24;
229            let v2 = (data[7] as u32) | (data[8] as u32) << 8;
230            (v0, v1, v2, 9)
231        }
232        31 => {
233            let v0 = (data[0] as u32)
234                | (data[1] as u32) << 8
235                | (data[2] as u32) << 16
236                | (data[3] as u32) << 24;
237            let v1 = (data[4] as u32)
238                | (data[5] as u32) << 8
239                | (data[6] as u32) << 16
240                | (data[7] as u32) << 24;
241            let v2 = (data[8] as u32) | (data[9] as u32) << 8;
242            (v0, v1, v2, 10)
243        }
244        32 => {
245            let v0 = data[0] as u32;
246            let v1 = data[1] as u32;
247            let v2 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
248            (v0, v1, v2, 5)
249        }
250        33 => {
251            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
252            let v1 = data[2] as u32;
253            let v2 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
254            (v0, v1, v2, 6)
255        }
256        34 => {
257            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
258            let v1 = data[3] as u32;
259            let v2 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
260            (v0, v1, v2, 7)
261        }
262        35 => {
263            let v0 = (data[0] as u32)
264                | (data[1] as u32) << 8
265                | (data[2] as u32) << 16
266                | (data[3] as u32) << 24;
267            let v1 = data[4] as u32;
268            let v2 = (data[5] as u32) | (data[6] as u32) << 8 | (data[7] as u32) << 16;
269            (v0, v1, v2, 8)
270        }
271        36 => {
272            let v0 = data[0] as u32;
273            let v1 = (data[1] as u32) | (data[2] as u32) << 8;
274            let v2 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
275            (v0, v1, v2, 6)
276        }
277        37 => {
278            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
279            let v1 = (data[2] as u32) | (data[3] as u32) << 8;
280            let v2 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
281            (v0, v1, v2, 7)
282        }
283        38 => {
284            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
285            let v1 = (data[3] as u32) | (data[4] as u32) << 8;
286            let v2 = (data[5] as u32) | (data[6] as u32) << 8 | (data[7] as u32) << 16;
287            (v0, v1, v2, 8)
288        }
289        39 => {
290            let v0 = (data[0] as u32)
291                | (data[1] as u32) << 8
292                | (data[2] as u32) << 16
293                | (data[3] as u32) << 24;
294            let v1 = (data[4] as u32) | (data[5] as u32) << 8;
295            let v2 = (data[6] as u32) | (data[7] as u32) << 8 | (data[8] as u32) << 16;
296            (v0, v1, v2, 9)
297        }
298        40 => {
299            let v0 = data[0] as u32;
300            let v1 = (data[1] as u32) | (data[2] as u32) << 8 | (data[3] as u32) << 16;
301            let v2 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
302            (v0, v1, v2, 7)
303        }
304        41 => {
305            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
306            let v1 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
307            let v2 = (data[5] as u32) | (data[6] as u32) << 8 | (data[7] as u32) << 16;
308            (v0, v1, v2, 8)
309        }
310        42 => {
311            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
312            let v1 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
313            let v2 = (data[6] as u32) | (data[7] as u32) << 8 | (data[8] as u32) << 16;
314            (v0, v1, v2, 9)
315        }
316        43 => {
317            let v0 = (data[0] as u32)
318                | (data[1] as u32) << 8
319                | (data[2] as u32) << 16
320                | (data[3] as u32) << 24;
321            let v1 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
322            let v2 = (data[7] as u32) | (data[8] as u32) << 8 | (data[9] as u32) << 16;
323            (v0, v1, v2, 10)
324        }
325        44 => {
326            let v0 = data[0] as u32;
327            let v1 = (data[1] as u32)
328                | (data[2] as u32) << 8
329                | (data[3] as u32) << 16
330                | (data[4] as u32) << 24;
331            let v2 = (data[5] as u32) | (data[6] as u32) << 8 | (data[7] as u32) << 16;
332            (v0, v1, v2, 8)
333        }
334        45 => {
335            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
336            let v1 = (data[2] as u32)
337                | (data[3] as u32) << 8
338                | (data[4] as u32) << 16
339                | (data[5] as u32) << 24;
340            let v2 = (data[6] as u32) | (data[7] as u32) << 8 | (data[8] as u32) << 16;
341            (v0, v1, v2, 9)
342        }
343        46 => {
344            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
345            let v1 = (data[3] as u32)
346                | (data[4] as u32) << 8
347                | (data[5] as u32) << 16
348                | (data[6] as u32) << 24;
349            let v2 = (data[7] as u32) | (data[8] as u32) << 8 | (data[9] as u32) << 16;
350            (v0, v1, v2, 10)
351        }
352        47 => {
353            let v0 = (data[0] as u32)
354                | (data[1] as u32) << 8
355                | (data[2] as u32) << 16
356                | (data[3] as u32) << 24;
357            let v1 = (data[4] as u32)
358                | (data[5] as u32) << 8
359                | (data[6] as u32) << 16
360                | (data[7] as u32) << 24;
361            let v2 = (data[8] as u32) | (data[9] as u32) << 8 | (data[10] as u32) << 16;
362            (v0, v1, v2, 11)
363        }
364        48 => {
365            let v0 = data[0] as u32;
366            let v1 = data[1] as u32;
367            let v2 = (data[2] as u32)
368                | (data[3] as u32) << 8
369                | (data[4] as u32) << 16
370                | (data[5] as u32) << 24;
371            (v0, v1, v2, 6)
372        }
373        49 => {
374            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
375            let v1 = data[2] as u32;
376            let v2 = (data[3] as u32)
377                | (data[4] as u32) << 8
378                | (data[5] as u32) << 16
379                | (data[6] as u32) << 24;
380            (v0, v1, v2, 7)
381        }
382        50 => {
383            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
384            let v1 = data[3] as u32;
385            let v2 = (data[4] as u32)
386                | (data[5] as u32) << 8
387                | (data[6] as u32) << 16
388                | (data[7] as u32) << 24;
389            (v0, v1, v2, 8)
390        }
391        51 => {
392            let v0 = (data[0] as u32)
393                | (data[1] as u32) << 8
394                | (data[2] as u32) << 16
395                | (data[3] as u32) << 24;
396            let v1 = data[4] as u32;
397            let v2 = (data[5] as u32)
398                | (data[6] as u32) << 8
399                | (data[7] as u32) << 16
400                | (data[8] as u32) << 24;
401            (v0, v1, v2, 9)
402        }
403        52 => {
404            let v0 = data[0] as u32;
405            let v1 = (data[1] as u32) | (data[2] as u32) << 8;
406            let v2 = (data[3] as u32)
407                | (data[4] as u32) << 8
408                | (data[5] as u32) << 16
409                | (data[6] as u32) << 24;
410            (v0, v1, v2, 7)
411        }
412        53 => {
413            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
414            let v1 = (data[2] as u32) | (data[3] as u32) << 8;
415            let v2 = (data[4] as u32)
416                | (data[5] as u32) << 8
417                | (data[6] as u32) << 16
418                | (data[7] as u32) << 24;
419            (v0, v1, v2, 8)
420        }
421        54 => {
422            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
423            let v1 = (data[3] as u32) | (data[4] as u32) << 8;
424            let v2 = (data[5] as u32)
425                | (data[6] as u32) << 8
426                | (data[7] as u32) << 16
427                | (data[8] as u32) << 24;
428            (v0, v1, v2, 9)
429        }
430        55 => {
431            let v0 = (data[0] as u32)
432                | (data[1] as u32) << 8
433                | (data[2] as u32) << 16
434                | (data[3] as u32) << 24;
435            let v1 = (data[4] as u32) | (data[5] as u32) << 8;
436            let v2 = (data[6] as u32)
437                | (data[7] as u32) << 8
438                | (data[8] as u32) << 16
439                | (data[9] as u32) << 24;
440            (v0, v1, v2, 10)
441        }
442        56 => {
443            let v0 = data[0] as u32;
444            let v1 = (data[1] as u32) | (data[2] as u32) << 8 | (data[3] as u32) << 16;
445            let v2 = (data[4] as u32)
446                | (data[5] as u32) << 8
447                | (data[6] as u32) << 16
448                | (data[7] as u32) << 24;
449            (v0, v1, v2, 8)
450        }
451        57 => {
452            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
453            let v1 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
454            let v2 = (data[5] as u32)
455                | (data[6] as u32) << 8
456                | (data[7] as u32) << 16
457                | (data[8] as u32) << 24;
458            (v0, v1, v2, 9)
459        }
460        58 => {
461            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
462            let v1 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
463            let v2 = (data[6] as u32)
464                | (data[7] as u32) << 8
465                | (data[8] as u32) << 16
466                | (data[9] as u32) << 24;
467            (v0, v1, v2, 10)
468        }
469        59 => {
470            let v0 = (data[0] as u32)
471                | (data[1] as u32) << 8
472                | (data[2] as u32) << 16
473                | (data[3] as u32) << 24;
474            let v1 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
475            let v2 = (data[7] as u32)
476                | (data[8] as u32) << 8
477                | (data[9] as u32) << 16
478                | (data[10] as u32) << 24;
479            (v0, v1, v2, 11)
480        }
481        60 => {
482            let v0 = data[0] as u32;
483            let v1 = (data[1] as u32)
484                | (data[2] as u32) << 8
485                | (data[3] as u32) << 16
486                | (data[4] as u32) << 24;
487            let v2 = (data[5] as u32)
488                | (data[6] as u32) << 8
489                | (data[7] as u32) << 16
490                | (data[8] as u32) << 24;
491            (v0, v1, v2, 9)
492        }
493        61 => {
494            let v0 = (data[0] as u32) | (data[1] as u32) << 8;
495            let v1 = (data[2] as u32)
496                | (data[3] as u32) << 8
497                | (data[4] as u32) << 16
498                | (data[5] as u32) << 24;
499            let v2 = (data[6] as u32)
500                | (data[7] as u32) << 8
501                | (data[8] as u32) << 16
502                | (data[9] as u32) << 24;
503            (v0, v1, v2, 10)
504        }
505        62 => {
506            let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
507            let v1 = (data[3] as u32)
508                | (data[4] as u32) << 8
509                | (data[5] as u32) << 16
510                | (data[6] as u32) << 24;
511            let v2 = (data[7] as u32)
512                | (data[8] as u32) << 8
513                | (data[9] as u32) << 16
514                | (data[10] as u32) << 24;
515            (v0, v1, v2, 11)
516        }
517        63 => {
518            let v0 = (data[0] as u32)
519                | (data[1] as u32) << 8
520                | (data[2] as u32) << 16
521                | (data[3] as u32) << 24;
522            let v1 = (data[4] as u32)
523                | (data[5] as u32) << 8
524                | (data[6] as u32) << 16
525                | (data[7] as u32) << 24;
526            let v2 = (data[8] as u32)
527                | (data[9] as u32) << 8
528                | (data[10] as u32) << 16
529                | (data[11] as u32) << 24;
530            (v0, v1, v2, 12)
531        } // END
532        _ => unreachable!(),
533    }
534}