1pub mod mode {
2 pub use super::*;
3 use crate::{BitReader, Bits};
4 static PREFIX_LUT_0: [Entry<Mode>; 128usize] = [
5 Entry::Value(Mode::EOF, 12u8),
6 Entry::Value(Mode::Extension, 7u8),
7 Entry::Value(Mode::Vertical(-3), 7u8),
8 Entry::Value(Mode::Vertical(3), 7u8),
9 Entry::Value(Mode::Vertical(-2), 6u8),
10 Entry::Value(Mode::Vertical(-2), 6u8),
11 Entry::Value(Mode::Vertical(2), 6u8),
12 Entry::Value(Mode::Vertical(2), 6u8),
13 Entry::Value(Mode::Pass, 4u8),
14 Entry::Value(Mode::Pass, 4u8),
15 Entry::Value(Mode::Pass, 4u8),
16 Entry::Value(Mode::Pass, 4u8),
17 Entry::Value(Mode::Pass, 4u8),
18 Entry::Value(Mode::Pass, 4u8),
19 Entry::Value(Mode::Pass, 4u8),
20 Entry::Value(Mode::Pass, 4u8),
21 Entry::Value(Mode::Horizontal, 3u8),
22 Entry::Value(Mode::Horizontal, 3u8),
23 Entry::Value(Mode::Horizontal, 3u8),
24 Entry::Value(Mode::Horizontal, 3u8),
25 Entry::Value(Mode::Horizontal, 3u8),
26 Entry::Value(Mode::Horizontal, 3u8),
27 Entry::Value(Mode::Horizontal, 3u8),
28 Entry::Value(Mode::Horizontal, 3u8),
29 Entry::Value(Mode::Horizontal, 3u8),
30 Entry::Value(Mode::Horizontal, 3u8),
31 Entry::Value(Mode::Horizontal, 3u8),
32 Entry::Value(Mode::Horizontal, 3u8),
33 Entry::Value(Mode::Horizontal, 3u8),
34 Entry::Value(Mode::Horizontal, 3u8),
35 Entry::Value(Mode::Horizontal, 3u8),
36 Entry::Value(Mode::Horizontal, 3u8),
37 Entry::Value(Mode::Vertical(-1), 3u8),
38 Entry::Value(Mode::Vertical(-1), 3u8),
39 Entry::Value(Mode::Vertical(-1), 3u8),
40 Entry::Value(Mode::Vertical(-1), 3u8),
41 Entry::Value(Mode::Vertical(-1), 3u8),
42 Entry::Value(Mode::Vertical(-1), 3u8),
43 Entry::Value(Mode::Vertical(-1), 3u8),
44 Entry::Value(Mode::Vertical(-1), 3u8),
45 Entry::Value(Mode::Vertical(-1), 3u8),
46 Entry::Value(Mode::Vertical(-1), 3u8),
47 Entry::Value(Mode::Vertical(-1), 3u8),
48 Entry::Value(Mode::Vertical(-1), 3u8),
49 Entry::Value(Mode::Vertical(-1), 3u8),
50 Entry::Value(Mode::Vertical(-1), 3u8),
51 Entry::Value(Mode::Vertical(-1), 3u8),
52 Entry::Value(Mode::Vertical(-1), 3u8),
53 Entry::Value(Mode::Vertical(1), 3u8),
54 Entry::Value(Mode::Vertical(1), 3u8),
55 Entry::Value(Mode::Vertical(1), 3u8),
56 Entry::Value(Mode::Vertical(1), 3u8),
57 Entry::Value(Mode::Vertical(1), 3u8),
58 Entry::Value(Mode::Vertical(1), 3u8),
59 Entry::Value(Mode::Vertical(1), 3u8),
60 Entry::Value(Mode::Vertical(1), 3u8),
61 Entry::Value(Mode::Vertical(1), 3u8),
62 Entry::Value(Mode::Vertical(1), 3u8),
63 Entry::Value(Mode::Vertical(1), 3u8),
64 Entry::Value(Mode::Vertical(1), 3u8),
65 Entry::Value(Mode::Vertical(1), 3u8),
66 Entry::Value(Mode::Vertical(1), 3u8),
67 Entry::Value(Mode::Vertical(1), 3u8),
68 Entry::Value(Mode::Vertical(1), 3u8),
69 Entry::Value(Mode::Vertical(0), 1u8),
70 Entry::Value(Mode::Vertical(0), 1u8),
71 Entry::Value(Mode::Vertical(0), 1u8),
72 Entry::Value(Mode::Vertical(0), 1u8),
73 Entry::Value(Mode::Vertical(0), 1u8),
74 Entry::Value(Mode::Vertical(0), 1u8),
75 Entry::Value(Mode::Vertical(0), 1u8),
76 Entry::Value(Mode::Vertical(0), 1u8),
77 Entry::Value(Mode::Vertical(0), 1u8),
78 Entry::Value(Mode::Vertical(0), 1u8),
79 Entry::Value(Mode::Vertical(0), 1u8),
80 Entry::Value(Mode::Vertical(0), 1u8),
81 Entry::Value(Mode::Vertical(0), 1u8),
82 Entry::Value(Mode::Vertical(0), 1u8),
83 Entry::Value(Mode::Vertical(0), 1u8),
84 Entry::Value(Mode::Vertical(0), 1u8),
85 Entry::Value(Mode::Vertical(0), 1u8),
86 Entry::Value(Mode::Vertical(0), 1u8),
87 Entry::Value(Mode::Vertical(0), 1u8),
88 Entry::Value(Mode::Vertical(0), 1u8),
89 Entry::Value(Mode::Vertical(0), 1u8),
90 Entry::Value(Mode::Vertical(0), 1u8),
91 Entry::Value(Mode::Vertical(0), 1u8),
92 Entry::Value(Mode::Vertical(0), 1u8),
93 Entry::Value(Mode::Vertical(0), 1u8),
94 Entry::Value(Mode::Vertical(0), 1u8),
95 Entry::Value(Mode::Vertical(0), 1u8),
96 Entry::Value(Mode::Vertical(0), 1u8),
97 Entry::Value(Mode::Vertical(0), 1u8),
98 Entry::Value(Mode::Vertical(0), 1u8),
99 Entry::Value(Mode::Vertical(0), 1u8),
100 Entry::Value(Mode::Vertical(0), 1u8),
101 Entry::Value(Mode::Vertical(0), 1u8),
102 Entry::Value(Mode::Vertical(0), 1u8),
103 Entry::Value(Mode::Vertical(0), 1u8),
104 Entry::Value(Mode::Vertical(0), 1u8),
105 Entry::Value(Mode::Vertical(0), 1u8),
106 Entry::Value(Mode::Vertical(0), 1u8),
107 Entry::Value(Mode::Vertical(0), 1u8),
108 Entry::Value(Mode::Vertical(0), 1u8),
109 Entry::Value(Mode::Vertical(0), 1u8),
110 Entry::Value(Mode::Vertical(0), 1u8),
111 Entry::Value(Mode::Vertical(0), 1u8),
112 Entry::Value(Mode::Vertical(0), 1u8),
113 Entry::Value(Mode::Vertical(0), 1u8),
114 Entry::Value(Mode::Vertical(0), 1u8),
115 Entry::Value(Mode::Vertical(0), 1u8),
116 Entry::Value(Mode::Vertical(0), 1u8),
117 Entry::Value(Mode::Vertical(0), 1u8),
118 Entry::Value(Mode::Vertical(0), 1u8),
119 Entry::Value(Mode::Vertical(0), 1u8),
120 Entry::Value(Mode::Vertical(0), 1u8),
121 Entry::Value(Mode::Vertical(0), 1u8),
122 Entry::Value(Mode::Vertical(0), 1u8),
123 Entry::Value(Mode::Vertical(0), 1u8),
124 Entry::Value(Mode::Vertical(0), 1u8),
125 Entry::Value(Mode::Vertical(0), 1u8),
126 Entry::Value(Mode::Vertical(0), 1u8),
127 Entry::Value(Mode::Vertical(0), 1u8),
128 Entry::Value(Mode::Vertical(0), 1u8),
129 Entry::Value(Mode::Vertical(0), 1u8),
130 Entry::Value(Mode::Vertical(0), 1u8),
131 Entry::Value(Mode::Vertical(0), 1u8),
132 Entry::Value(Mode::Vertical(0), 1u8),
133 ];
134 pub fn decode(reader: &mut impl BitReader) -> Option<Mode> {
135 let root = Entry::Prefix(7u8, &PREFIX_LUT_0);
136 root.find(reader)
137 }
138 pub fn encode(val: Mode) -> Option<Bits> {
139 let bits = match val {
140 Mode::Pass => Bits { data: 1u16, len: 4u8 },
141 Mode::Horizontal => Bits { data: 1u16, len: 3u8 },
142 Mode::Vertical(0) => Bits { data: 1u16, len: 1u8 },
143 Mode::Vertical(1) => Bits { data: 3u16, len: 3u8 },
144 Mode::Vertical(2) => Bits { data: 3u16, len: 6u8 },
145 Mode::Vertical(3) => Bits { data: 3u16, len: 7u8 },
146 Mode::Vertical(-1) => Bits { data: 2u16, len: 3u8 },
147 Mode::Vertical(-2) => Bits { data: 2u16, len: 6u8 },
148 Mode::Vertical(-3) => Bits { data: 2u16, len: 7u8 },
149 Mode::Extension => Bits { data: 1u16, len: 7u8 },
150 Mode::EOF => Bits { data: 1u16, len: 12u8 },
151 _ => return None,
152 };
153 Some(bits)
154 }
155 pub static ENTRIES: [(Mode, Bits); 11usize] = [
156 (Mode::Pass, Bits { data: 1u16, len: 4u8 }),
157 (Mode::Horizontal, Bits { data: 1u16, len: 3u8 }),
158 (Mode::Vertical(0), Bits { data: 1u16, len: 1u8 }),
159 (Mode::Vertical(1), Bits { data: 3u16, len: 3u8 }),
160 (Mode::Vertical(2), Bits { data: 3u16, len: 6u8 }),
161 (Mode::Vertical(3), Bits { data: 3u16, len: 7u8 }),
162 (Mode::Vertical(-1), Bits { data: 2u16, len: 3u8 }),
163 (Mode::Vertical(-2), Bits { data: 2u16, len: 6u8 }),
164 (Mode::Vertical(-3), Bits { data: 2u16, len: 7u8 }),
165 (Mode::Extension, Bits { data: 1u16, len: 7u8 }),
166 (Mode::EOF, Bits { data: 1u16, len: 12u8 }),
167 ];
168}
169pub mod black {
170 pub use super::*;
171 use crate::{BitReader, Bits};
172 static LEAF_LUT_00000: [Option<(u16, u8)>; 256usize] = [
173 None,
174 None,
175 None,
176 None,
177 None,
178 None,
179 None,
180 None,
181 None,
182 None,
183 None,
184 None,
185 None,
186 None,
187 None,
188 None,
189 None,
190 None,
191 None,
192 None,
193 None,
194 None,
195 None,
196 None,
197 None,
198 None,
199 None,
200 None,
201 None,
202 None,
203 None,
204 None,
205 Some((1792, 6u8)),
206 Some((1792, 6u8)),
207 Some((1792, 6u8)),
208 Some((1792, 6u8)),
209 Some((1984, 7u8)),
210 Some((1984, 7u8)),
211 Some((2048, 7u8)),
212 Some((2048, 7u8)),
213 Some((2112, 7u8)),
214 Some((2112, 7u8)),
215 Some((2176, 7u8)),
216 Some((2176, 7u8)),
217 Some((2240, 7u8)),
218 Some((2240, 7u8)),
219 Some((2304, 7u8)),
220 Some((2304, 7u8)),
221 Some((1856, 6u8)),
222 Some((1856, 6u8)),
223 Some((1856, 6u8)),
224 Some((1856, 6u8)),
225 Some((1920, 6u8)),
226 Some((1920, 6u8)),
227 Some((1920, 6u8)),
228 Some((1920, 6u8)),
229 Some((2368, 7u8)),
230 Some((2368, 7u8)),
231 Some((2432, 7u8)),
232 Some((2432, 7u8)),
233 Some((2496, 7u8)),
234 Some((2496, 7u8)),
235 Some((2560, 7u8)),
236 Some((2560, 7u8)),
237 Some((18, 5u8)),
238 Some((18, 5u8)),
239 Some((18, 5u8)),
240 Some((18, 5u8)),
241 Some((18, 5u8)),
242 Some((18, 5u8)),
243 Some((18, 5u8)),
244 Some((18, 5u8)),
245 Some((52, 7u8)),
246 Some((52, 7u8)),
247 Some((640, 8u8)),
248 Some((704, 8u8)),
249 Some((768, 8u8)),
250 Some((832, 8u8)),
251 Some((55, 7u8)),
252 Some((55, 7u8)),
253 Some((56, 7u8)),
254 Some((56, 7u8)),
255 Some((1280, 8u8)),
256 Some((1344, 8u8)),
257 Some((1408, 8u8)),
258 Some((1472, 8u8)),
259 Some((59, 7u8)),
260 Some((59, 7u8)),
261 Some((60, 7u8)),
262 Some((60, 7u8)),
263 Some((1536, 8u8)),
264 Some((1600, 8u8)),
265 Some((24, 6u8)),
266 Some((24, 6u8)),
267 Some((24, 6u8)),
268 Some((24, 6u8)),
269 Some((25, 6u8)),
270 Some((25, 6u8)),
271 Some((25, 6u8)),
272 Some((25, 6u8)),
273 Some((1664, 8u8)),
274 Some((1728, 8u8)),
275 Some((320, 7u8)),
276 Some((320, 7u8)),
277 Some((384, 7u8)),
278 Some((384, 7u8)),
279 Some((448, 7u8)),
280 Some((448, 7u8)),
281 Some((512, 8u8)),
282 Some((576, 8u8)),
283 Some((53, 7u8)),
284 Some((53, 7u8)),
285 Some((54, 7u8)),
286 Some((54, 7u8)),
287 Some((896, 8u8)),
288 Some((960, 8u8)),
289 Some((1024, 8u8)),
290 Some((1088, 8u8)),
291 Some((1152, 8u8)),
292 Some((1216, 8u8)),
293 Some((64, 5u8)),
294 Some((64, 5u8)),
295 Some((64, 5u8)),
296 Some((64, 5u8)),
297 Some((64, 5u8)),
298 Some((64, 5u8)),
299 Some((64, 5u8)),
300 Some((64, 5u8)),
301 Some((13, 3u8)),
302 Some((13, 3u8)),
303 Some((13, 3u8)),
304 Some((13, 3u8)),
305 Some((13, 3u8)),
306 Some((13, 3u8)),
307 Some((13, 3u8)),
308 Some((13, 3u8)),
309 Some((13, 3u8)),
310 Some((13, 3u8)),
311 Some((13, 3u8)),
312 Some((13, 3u8)),
313 Some((13, 3u8)),
314 Some((13, 3u8)),
315 Some((13, 3u8)),
316 Some((13, 3u8)),
317 Some((13, 3u8)),
318 Some((13, 3u8)),
319 Some((13, 3u8)),
320 Some((13, 3u8)),
321 Some((13, 3u8)),
322 Some((13, 3u8)),
323 Some((13, 3u8)),
324 Some((13, 3u8)),
325 Some((13, 3u8)),
326 Some((13, 3u8)),
327 Some((13, 3u8)),
328 Some((13, 3u8)),
329 Some((13, 3u8)),
330 Some((13, 3u8)),
331 Some((13, 3u8)),
332 Some((13, 3u8)),
333 Some((23, 6u8)),
334 Some((23, 6u8)),
335 Some((23, 6u8)),
336 Some((23, 6u8)),
337 Some((50, 7u8)),
338 Some((50, 7u8)),
339 Some((51, 7u8)),
340 Some((51, 7u8)),
341 Some((44, 7u8)),
342 Some((44, 7u8)),
343 Some((45, 7u8)),
344 Some((45, 7u8)),
345 Some((46, 7u8)),
346 Some((46, 7u8)),
347 Some((47, 7u8)),
348 Some((47, 7u8)),
349 Some((57, 7u8)),
350 Some((57, 7u8)),
351 Some((58, 7u8)),
352 Some((58, 7u8)),
353 Some((61, 7u8)),
354 Some((61, 7u8)),
355 Some((256, 7u8)),
356 Some((256, 7u8)),
357 Some((16, 5u8)),
358 Some((16, 5u8)),
359 Some((16, 5u8)),
360 Some((16, 5u8)),
361 Some((16, 5u8)),
362 Some((16, 5u8)),
363 Some((16, 5u8)),
364 Some((16, 5u8)),
365 Some((17, 5u8)),
366 Some((17, 5u8)),
367 Some((17, 5u8)),
368 Some((17, 5u8)),
369 Some((17, 5u8)),
370 Some((17, 5u8)),
371 Some((17, 5u8)),
372 Some((17, 5u8)),
373 Some((48, 7u8)),
374 Some((48, 7u8)),
375 Some((49, 7u8)),
376 Some((49, 7u8)),
377 Some((62, 7u8)),
378 Some((62, 7u8)),
379 Some((63, 7u8)),
380 Some((63, 7u8)),
381 Some((30, 7u8)),
382 Some((30, 7u8)),
383 Some((31, 7u8)),
384 Some((31, 7u8)),
385 Some((32, 7u8)),
386 Some((32, 7u8)),
387 Some((33, 7u8)),
388 Some((33, 7u8)),
389 Some((40, 7u8)),
390 Some((40, 7u8)),
391 Some((41, 7u8)),
392 Some((41, 7u8)),
393 Some((22, 6u8)),
394 Some((22, 6u8)),
395 Some((22, 6u8)),
396 Some((22, 6u8)),
397 Some((14, 3u8)),
398 Some((14, 3u8)),
399 Some((14, 3u8)),
400 Some((14, 3u8)),
401 Some((14, 3u8)),
402 Some((14, 3u8)),
403 Some((14, 3u8)),
404 Some((14, 3u8)),
405 Some((14, 3u8)),
406 Some((14, 3u8)),
407 Some((14, 3u8)),
408 Some((14, 3u8)),
409 Some((14, 3u8)),
410 Some((14, 3u8)),
411 Some((14, 3u8)),
412 Some((14, 3u8)),
413 Some((14, 3u8)),
414 Some((14, 3u8)),
415 Some((14, 3u8)),
416 Some((14, 3u8)),
417 Some((14, 3u8)),
418 Some((14, 3u8)),
419 Some((14, 3u8)),
420 Some((14, 3u8)),
421 Some((14, 3u8)),
422 Some((14, 3u8)),
423 Some((14, 3u8)),
424 Some((14, 3u8)),
425 Some((14, 3u8)),
426 Some((14, 3u8)),
427 Some((14, 3u8)),
428 Some((14, 3u8)),
429 ];
430 static LEAF_LUT_00001: [Option<(u16, u8)>; 128usize] = [
431 Some((10, 2u8)),
432 Some((10, 2u8)),
433 Some((10, 2u8)),
434 Some((10, 2u8)),
435 Some((10, 2u8)),
436 Some((10, 2u8)),
437 Some((10, 2u8)),
438 Some((10, 2u8)),
439 Some((10, 2u8)),
440 Some((10, 2u8)),
441 Some((10, 2u8)),
442 Some((10, 2u8)),
443 Some((10, 2u8)),
444 Some((10, 2u8)),
445 Some((10, 2u8)),
446 Some((10, 2u8)),
447 Some((10, 2u8)),
448 Some((10, 2u8)),
449 Some((10, 2u8)),
450 Some((10, 2u8)),
451 Some((10, 2u8)),
452 Some((10, 2u8)),
453 Some((10, 2u8)),
454 Some((10, 2u8)),
455 Some((10, 2u8)),
456 Some((10, 2u8)),
457 Some((10, 2u8)),
458 Some((10, 2u8)),
459 Some((10, 2u8)),
460 Some((10, 2u8)),
461 Some((10, 2u8)),
462 Some((10, 2u8)),
463 Some((11, 2u8)),
464 Some((11, 2u8)),
465 Some((11, 2u8)),
466 Some((11, 2u8)),
467 Some((11, 2u8)),
468 Some((11, 2u8)),
469 Some((11, 2u8)),
470 Some((11, 2u8)),
471 Some((11, 2u8)),
472 Some((11, 2u8)),
473 Some((11, 2u8)),
474 Some((11, 2u8)),
475 Some((11, 2u8)),
476 Some((11, 2u8)),
477 Some((11, 2u8)),
478 Some((11, 2u8)),
479 Some((11, 2u8)),
480 Some((11, 2u8)),
481 Some((11, 2u8)),
482 Some((11, 2u8)),
483 Some((11, 2u8)),
484 Some((11, 2u8)),
485 Some((11, 2u8)),
486 Some((11, 2u8)),
487 Some((11, 2u8)),
488 Some((11, 2u8)),
489 Some((11, 2u8)),
490 Some((11, 2u8)),
491 Some((11, 2u8)),
492 Some((11, 2u8)),
493 Some((11, 2u8)),
494 Some((11, 2u8)),
495 Some((15, 4u8)),
496 Some((15, 4u8)),
497 Some((15, 4u8)),
498 Some((15, 4u8)),
499 Some((15, 4u8)),
500 Some((15, 4u8)),
501 Some((15, 4u8)),
502 Some((15, 4u8)),
503 Some((128, 7u8)),
504 Some((192, 7u8)),
505 Some((26, 7u8)),
506 Some((27, 7u8)),
507 Some((28, 7u8)),
508 Some((29, 7u8)),
509 Some((19, 6u8)),
510 Some((19, 6u8)),
511 Some((20, 6u8)),
512 Some((20, 6u8)),
513 Some((34, 7u8)),
514 Some((35, 7u8)),
515 Some((36, 7u8)),
516 Some((37, 7u8)),
517 Some((38, 7u8)),
518 Some((39, 7u8)),
519 Some((21, 6u8)),
520 Some((21, 6u8)),
521 Some((42, 7u8)),
522 Some((43, 7u8)),
523 Some((0, 5u8)),
524 Some((0, 5u8)),
525 Some((0, 5u8)),
526 Some((0, 5u8)),
527 Some((12, 2u8)),
528 Some((12, 2u8)),
529 Some((12, 2u8)),
530 Some((12, 2u8)),
531 Some((12, 2u8)),
532 Some((12, 2u8)),
533 Some((12, 2u8)),
534 Some((12, 2u8)),
535 Some((12, 2u8)),
536 Some((12, 2u8)),
537 Some((12, 2u8)),
538 Some((12, 2u8)),
539 Some((12, 2u8)),
540 Some((12, 2u8)),
541 Some((12, 2u8)),
542 Some((12, 2u8)),
543 Some((12, 2u8)),
544 Some((12, 2u8)),
545 Some((12, 2u8)),
546 Some((12, 2u8)),
547 Some((12, 2u8)),
548 Some((12, 2u8)),
549 Some((12, 2u8)),
550 Some((12, 2u8)),
551 Some((12, 2u8)),
552 Some((12, 2u8)),
553 Some((12, 2u8)),
554 Some((12, 2u8)),
555 Some((12, 2u8)),
556 Some((12, 2u8)),
557 Some((12, 2u8)),
558 Some((12, 2u8)),
559 ];
560 static LEAF_LUT_00010: [Option<(u16, u8)>; 2usize] = [Some((9, 1u8)), Some((8, 1u8))];
561 static PREFIX_LUT_0: [Entry<u16>; 32usize] = [
562 Entry::Leaf(8u8, &LEAF_LUT_00000),
563 Entry::Leaf(7u8, &LEAF_LUT_00001),
564 Entry::Leaf(1u8, &LEAF_LUT_00010),
565 Entry::Value(7, 5u8),
566 Entry::Value(6, 4u8),
567 Entry::Value(6, 4u8),
568 Entry::Value(5, 4u8),
569 Entry::Value(5, 4u8),
570 Entry::Value(1, 3u8),
571 Entry::Value(1, 3u8),
572 Entry::Value(1, 3u8),
573 Entry::Value(1, 3u8),
574 Entry::Value(4, 3u8),
575 Entry::Value(4, 3u8),
576 Entry::Value(4, 3u8),
577 Entry::Value(4, 3u8),
578 Entry::Value(3, 2u8),
579 Entry::Value(3, 2u8),
580 Entry::Value(3, 2u8),
581 Entry::Value(3, 2u8),
582 Entry::Value(3, 2u8),
583 Entry::Value(3, 2u8),
584 Entry::Value(3, 2u8),
585 Entry::Value(3, 2u8),
586 Entry::Value(2, 2u8),
587 Entry::Value(2, 2u8),
588 Entry::Value(2, 2u8),
589 Entry::Value(2, 2u8),
590 Entry::Value(2, 2u8),
591 Entry::Value(2, 2u8),
592 Entry::Value(2, 2u8),
593 Entry::Value(2, 2u8),
594 ];
595 pub fn decode(reader: &mut impl BitReader) -> Option<u16> {
596 let root = Entry::Prefix(5u8, &PREFIX_LUT_0);
597 root.find(reader)
598 }
599 pub fn encode(val: u16) -> Option<Bits> {
600 let bits = match val {
601 0 => Bits { data: 55u16, len: 10u8 },
602 1 => Bits { data: 2u16, len: 3u8 },
603 2 => Bits { data: 3u16, len: 2u8 },
604 3 => Bits { data: 2u16, len: 2u8 },
605 4 => Bits { data: 3u16, len: 3u8 },
606 5 => Bits { data: 3u16, len: 4u8 },
607 6 => Bits { data: 2u16, len: 4u8 },
608 7 => Bits { data: 3u16, len: 5u8 },
609 8 => Bits { data: 5u16, len: 6u8 },
610 9 => Bits { data: 4u16, len: 6u8 },
611 10 => Bits { data: 4u16, len: 7u8 },
612 11 => Bits { data: 5u16, len: 7u8 },
613 12 => Bits { data: 7u16, len: 7u8 },
614 13 => Bits { data: 4u16, len: 8u8 },
615 14 => Bits { data: 7u16, len: 8u8 },
616 15 => Bits { data: 24u16, len: 9u8 },
617 16 => Bits { data: 23u16, len: 10u8 },
618 17 => Bits { data: 24u16, len: 10u8 },
619 18 => Bits { data: 8u16, len: 10u8 },
620 19 => Bits { data: 103u16, len: 11u8 },
621 20 => Bits { data: 104u16, len: 11u8 },
622 21 => Bits { data: 108u16, len: 11u8 },
623 22 => Bits { data: 55u16, len: 11u8 },
624 23 => Bits { data: 40u16, len: 11u8 },
625 24 => Bits { data: 23u16, len: 11u8 },
626 25 => Bits { data: 24u16, len: 11u8 },
627 26 => Bits { data: 202u16, len: 12u8 },
628 27 => Bits { data: 203u16, len: 12u8 },
629 28 => Bits { data: 204u16, len: 12u8 },
630 29 => Bits { data: 205u16, len: 12u8 },
631 30 => Bits { data: 104u16, len: 12u8 },
632 31 => Bits { data: 105u16, len: 12u8 },
633 32 => Bits { data: 106u16, len: 12u8 },
634 33 => Bits { data: 107u16, len: 12u8 },
635 34 => Bits { data: 210u16, len: 12u8 },
636 35 => Bits { data: 211u16, len: 12u8 },
637 36 => Bits { data: 212u16, len: 12u8 },
638 37 => Bits { data: 213u16, len: 12u8 },
639 38 => Bits { data: 214u16, len: 12u8 },
640 39 => Bits { data: 215u16, len: 12u8 },
641 40 => Bits { data: 108u16, len: 12u8 },
642 41 => Bits { data: 109u16, len: 12u8 },
643 42 => Bits { data: 218u16, len: 12u8 },
644 43 => Bits { data: 219u16, len: 12u8 },
645 44 => Bits { data: 84u16, len: 12u8 },
646 45 => Bits { data: 85u16, len: 12u8 },
647 46 => Bits { data: 86u16, len: 12u8 },
648 47 => Bits { data: 87u16, len: 12u8 },
649 48 => Bits { data: 100u16, len: 12u8 },
650 49 => Bits { data: 101u16, len: 12u8 },
651 50 => Bits { data: 82u16, len: 12u8 },
652 51 => Bits { data: 83u16, len: 12u8 },
653 52 => Bits { data: 36u16, len: 12u8 },
654 53 => Bits { data: 55u16, len: 12u8 },
655 54 => Bits { data: 56u16, len: 12u8 },
656 55 => Bits { data: 39u16, len: 12u8 },
657 56 => Bits { data: 40u16, len: 12u8 },
658 57 => Bits { data: 88u16, len: 12u8 },
659 58 => Bits { data: 89u16, len: 12u8 },
660 59 => Bits { data: 43u16, len: 12u8 },
661 60 => Bits { data: 44u16, len: 12u8 },
662 61 => Bits { data: 90u16, len: 12u8 },
663 62 => Bits { data: 102u16, len: 12u8 },
664 63 => Bits { data: 103u16, len: 12u8 },
665 64 => Bits { data: 15u16, len: 10u8 },
666 128 => Bits { data: 200u16, len: 12u8 },
667 192 => Bits { data: 201u16, len: 12u8 },
668 256 => Bits { data: 91u16, len: 12u8 },
669 320 => Bits { data: 51u16, len: 12u8 },
670 384 => Bits { data: 52u16, len: 12u8 },
671 448 => Bits { data: 53u16, len: 12u8 },
672 512 => Bits { data: 108u16, len: 13u8 },
673 576 => Bits { data: 109u16, len: 13u8 },
674 640 => Bits { data: 74u16, len: 13u8 },
675 704 => Bits { data: 75u16, len: 13u8 },
676 768 => Bits { data: 76u16, len: 13u8 },
677 832 => Bits { data: 77u16, len: 13u8 },
678 896 => Bits { data: 114u16, len: 13u8 },
679 960 => Bits { data: 115u16, len: 13u8 },
680 1024 => Bits { data: 116u16, len: 13u8 },
681 1088 => Bits { data: 117u16, len: 13u8 },
682 1152 => Bits { data: 118u16, len: 13u8 },
683 1216 => Bits { data: 119u16, len: 13u8 },
684 1280 => Bits { data: 82u16, len: 13u8 },
685 1344 => Bits { data: 83u16, len: 13u8 },
686 1408 => Bits { data: 84u16, len: 13u8 },
687 1472 => Bits { data: 85u16, len: 13u8 },
688 1536 => Bits { data: 90u16, len: 13u8 },
689 1600 => Bits { data: 91u16, len: 13u8 },
690 1664 => Bits { data: 100u16, len: 13u8 },
691 1728 => Bits { data: 101u16, len: 13u8 },
692 1792 => Bits { data: 8u16, len: 11u8 },
693 1856 => Bits { data: 12u16, len: 11u8 },
694 1920 => Bits { data: 13u16, len: 11u8 },
695 1984 => Bits { data: 18u16, len: 12u8 },
696 2048 => Bits { data: 19u16, len: 12u8 },
697 2112 => Bits { data: 20u16, len: 12u8 },
698 2176 => Bits { data: 21u16, len: 12u8 },
699 2240 => Bits { data: 22u16, len: 12u8 },
700 2304 => Bits { data: 23u16, len: 12u8 },
701 2368 => Bits { data: 28u16, len: 12u8 },
702 2432 => Bits { data: 29u16, len: 12u8 },
703 2496 => Bits { data: 30u16, len: 12u8 },
704 2560 => Bits { data: 31u16, len: 12u8 },
705 _ => return None,
706 };
707 Some(bits)
708 }
709 pub static ENTRIES: [(u16, Bits); 104usize] = [
710 (0, Bits { data: 55u16, len: 10u8 }),
711 (1, Bits { data: 2u16, len: 3u8 }),
712 (2, Bits { data: 3u16, len: 2u8 }),
713 (3, Bits { data: 2u16, len: 2u8 }),
714 (4, Bits { data: 3u16, len: 3u8 }),
715 (5, Bits { data: 3u16, len: 4u8 }),
716 (6, Bits { data: 2u16, len: 4u8 }),
717 (7, Bits { data: 3u16, len: 5u8 }),
718 (8, Bits { data: 5u16, len: 6u8 }),
719 (9, Bits { data: 4u16, len: 6u8 }),
720 (10, Bits { data: 4u16, len: 7u8 }),
721 (11, Bits { data: 5u16, len: 7u8 }),
722 (12, Bits { data: 7u16, len: 7u8 }),
723 (13, Bits { data: 4u16, len: 8u8 }),
724 (14, Bits { data: 7u16, len: 8u8 }),
725 (15, Bits { data: 24u16, len: 9u8 }),
726 (16, Bits { data: 23u16, len: 10u8 }),
727 (17, Bits { data: 24u16, len: 10u8 }),
728 (18, Bits { data: 8u16, len: 10u8 }),
729 (19, Bits { data: 103u16, len: 11u8 }),
730 (20, Bits { data: 104u16, len: 11u8 }),
731 (21, Bits { data: 108u16, len: 11u8 }),
732 (22, Bits { data: 55u16, len: 11u8 }),
733 (23, Bits { data: 40u16, len: 11u8 }),
734 (24, Bits { data: 23u16, len: 11u8 }),
735 (25, Bits { data: 24u16, len: 11u8 }),
736 (26, Bits { data: 202u16, len: 12u8 }),
737 (27, Bits { data: 203u16, len: 12u8 }),
738 (28, Bits { data: 204u16, len: 12u8 }),
739 (29, Bits { data: 205u16, len: 12u8 }),
740 (30, Bits { data: 104u16, len: 12u8 }),
741 (31, Bits { data: 105u16, len: 12u8 }),
742 (32, Bits { data: 106u16, len: 12u8 }),
743 (33, Bits { data: 107u16, len: 12u8 }),
744 (34, Bits { data: 210u16, len: 12u8 }),
745 (35, Bits { data: 211u16, len: 12u8 }),
746 (36, Bits { data: 212u16, len: 12u8 }),
747 (37, Bits { data: 213u16, len: 12u8 }),
748 (38, Bits { data: 214u16, len: 12u8 }),
749 (39, Bits { data: 215u16, len: 12u8 }),
750 (40, Bits { data: 108u16, len: 12u8 }),
751 (41, Bits { data: 109u16, len: 12u8 }),
752 (42, Bits { data: 218u16, len: 12u8 }),
753 (43, Bits { data: 219u16, len: 12u8 }),
754 (44, Bits { data: 84u16, len: 12u8 }),
755 (45, Bits { data: 85u16, len: 12u8 }),
756 (46, Bits { data: 86u16, len: 12u8 }),
757 (47, Bits { data: 87u16, len: 12u8 }),
758 (48, Bits { data: 100u16, len: 12u8 }),
759 (49, Bits { data: 101u16, len: 12u8 }),
760 (50, Bits { data: 82u16, len: 12u8 }),
761 (51, Bits { data: 83u16, len: 12u8 }),
762 (52, Bits { data: 36u16, len: 12u8 }),
763 (53, Bits { data: 55u16, len: 12u8 }),
764 (54, Bits { data: 56u16, len: 12u8 }),
765 (55, Bits { data: 39u16, len: 12u8 }),
766 (56, Bits { data: 40u16, len: 12u8 }),
767 (57, Bits { data: 88u16, len: 12u8 }),
768 (58, Bits { data: 89u16, len: 12u8 }),
769 (59, Bits { data: 43u16, len: 12u8 }),
770 (60, Bits { data: 44u16, len: 12u8 }),
771 (61, Bits { data: 90u16, len: 12u8 }),
772 (62, Bits { data: 102u16, len: 12u8 }),
773 (63, Bits { data: 103u16, len: 12u8 }),
774 (64, Bits { data: 15u16, len: 10u8 }),
775 (128, Bits { data: 200u16, len: 12u8 }),
776 (192, Bits { data: 201u16, len: 12u8 }),
777 (256, Bits { data: 91u16, len: 12u8 }),
778 (320, Bits { data: 51u16, len: 12u8 }),
779 (384, Bits { data: 52u16, len: 12u8 }),
780 (448, Bits { data: 53u16, len: 12u8 }),
781 (512, Bits { data: 108u16, len: 13u8 }),
782 (576, Bits { data: 109u16, len: 13u8 }),
783 (640, Bits { data: 74u16, len: 13u8 }),
784 (704, Bits { data: 75u16, len: 13u8 }),
785 (768, Bits { data: 76u16, len: 13u8 }),
786 (832, Bits { data: 77u16, len: 13u8 }),
787 (896, Bits { data: 114u16, len: 13u8 }),
788 (960, Bits { data: 115u16, len: 13u8 }),
789 (1024, Bits { data: 116u16, len: 13u8 }),
790 (1088, Bits { data: 117u16, len: 13u8 }),
791 (1152, Bits { data: 118u16, len: 13u8 }),
792 (1216, Bits { data: 119u16, len: 13u8 }),
793 (1280, Bits { data: 82u16, len: 13u8 }),
794 (1344, Bits { data: 83u16, len: 13u8 }),
795 (1408, Bits { data: 84u16, len: 13u8 }),
796 (1472, Bits { data: 85u16, len: 13u8 }),
797 (1536, Bits { data: 90u16, len: 13u8 }),
798 (1600, Bits { data: 91u16, len: 13u8 }),
799 (1664, Bits { data: 100u16, len: 13u8 }),
800 (1728, Bits { data: 101u16, len: 13u8 }),
801 (1792, Bits { data: 8u16, len: 11u8 }),
802 (1856, Bits { data: 12u16, len: 11u8 }),
803 (1920, Bits { data: 13u16, len: 11u8 }),
804 (1984, Bits { data: 18u16, len: 12u8 }),
805 (2048, Bits { data: 19u16, len: 12u8 }),
806 (2112, Bits { data: 20u16, len: 12u8 }),
807 (2176, Bits { data: 21u16, len: 12u8 }),
808 (2240, Bits { data: 22u16, len: 12u8 }),
809 (2304, Bits { data: 23u16, len: 12u8 }),
810 (2368, Bits { data: 28u16, len: 12u8 }),
811 (2432, Bits { data: 29u16, len: 12u8 }),
812 (2496, Bits { data: 30u16, len: 12u8 }),
813 (2560, Bits { data: 31u16, len: 12u8 }),
814 ];
815}
816pub mod white {
817 pub use super::*;
818 use crate::{BitReader, Bits};
819 static LEAF_LUT_0000: [Option<(u16, u8)>; 256usize] = [
820 None,
821 None,
822 None,
823 None,
824 None,
825 None,
826 None,
827 None,
828 None,
829 None,
830 None,
831 None,
832 None,
833 None,
834 None,
835 None,
836 Some((1792, 7u8)),
837 Some((1792, 7u8)),
838 Some((1984, 8u8)),
839 Some((2048, 8u8)),
840 Some((2112, 8u8)),
841 Some((2176, 8u8)),
842 Some((2240, 8u8)),
843 Some((2304, 8u8)),
844 Some((1856, 7u8)),
845 Some((1856, 7u8)),
846 Some((1920, 7u8)),
847 Some((1920, 7u8)),
848 Some((2368, 8u8)),
849 Some((2432, 8u8)),
850 Some((2496, 8u8)),
851 Some((2560, 8u8)),
852 Some((29, 4u8)),
853 Some((29, 4u8)),
854 Some((29, 4u8)),
855 Some((29, 4u8)),
856 Some((29, 4u8)),
857 Some((29, 4u8)),
858 Some((29, 4u8)),
859 Some((29, 4u8)),
860 Some((29, 4u8)),
861 Some((29, 4u8)),
862 Some((29, 4u8)),
863 Some((29, 4u8)),
864 Some((29, 4u8)),
865 Some((29, 4u8)),
866 Some((29, 4u8)),
867 Some((29, 4u8)),
868 Some((30, 4u8)),
869 Some((30, 4u8)),
870 Some((30, 4u8)),
871 Some((30, 4u8)),
872 Some((30, 4u8)),
873 Some((30, 4u8)),
874 Some((30, 4u8)),
875 Some((30, 4u8)),
876 Some((30, 4u8)),
877 Some((30, 4u8)),
878 Some((30, 4u8)),
879 Some((30, 4u8)),
880 Some((30, 4u8)),
881 Some((30, 4u8)),
882 Some((30, 4u8)),
883 Some((30, 4u8)),
884 Some((45, 4u8)),
885 Some((45, 4u8)),
886 Some((45, 4u8)),
887 Some((45, 4u8)),
888 Some((45, 4u8)),
889 Some((45, 4u8)),
890 Some((45, 4u8)),
891 Some((45, 4u8)),
892 Some((45, 4u8)),
893 Some((45, 4u8)),
894 Some((45, 4u8)),
895 Some((45, 4u8)),
896 Some((45, 4u8)),
897 Some((45, 4u8)),
898 Some((45, 4u8)),
899 Some((45, 4u8)),
900 Some((46, 4u8)),
901 Some((46, 4u8)),
902 Some((46, 4u8)),
903 Some((46, 4u8)),
904 Some((46, 4u8)),
905 Some((46, 4u8)),
906 Some((46, 4u8)),
907 Some((46, 4u8)),
908 Some((46, 4u8)),
909 Some((46, 4u8)),
910 Some((46, 4u8)),
911 Some((46, 4u8)),
912 Some((46, 4u8)),
913 Some((46, 4u8)),
914 Some((46, 4u8)),
915 Some((46, 4u8)),
916 Some((22, 3u8)),
917 Some((22, 3u8)),
918 Some((22, 3u8)),
919 Some((22, 3u8)),
920 Some((22, 3u8)),
921 Some((22, 3u8)),
922 Some((22, 3u8)),
923 Some((22, 3u8)),
924 Some((22, 3u8)),
925 Some((22, 3u8)),
926 Some((22, 3u8)),
927 Some((22, 3u8)),
928 Some((22, 3u8)),
929 Some((22, 3u8)),
930 Some((22, 3u8)),
931 Some((22, 3u8)),
932 Some((22, 3u8)),
933 Some((22, 3u8)),
934 Some((22, 3u8)),
935 Some((22, 3u8)),
936 Some((22, 3u8)),
937 Some((22, 3u8)),
938 Some((22, 3u8)),
939 Some((22, 3u8)),
940 Some((22, 3u8)),
941 Some((22, 3u8)),
942 Some((22, 3u8)),
943 Some((22, 3u8)),
944 Some((22, 3u8)),
945 Some((22, 3u8)),
946 Some((22, 3u8)),
947 Some((22, 3u8)),
948 Some((23, 3u8)),
949 Some((23, 3u8)),
950 Some((23, 3u8)),
951 Some((23, 3u8)),
952 Some((23, 3u8)),
953 Some((23, 3u8)),
954 Some((23, 3u8)),
955 Some((23, 3u8)),
956 Some((23, 3u8)),
957 Some((23, 3u8)),
958 Some((23, 3u8)),
959 Some((23, 3u8)),
960 Some((23, 3u8)),
961 Some((23, 3u8)),
962 Some((23, 3u8)),
963 Some((23, 3u8)),
964 Some((23, 3u8)),
965 Some((23, 3u8)),
966 Some((23, 3u8)),
967 Some((23, 3u8)),
968 Some((23, 3u8)),
969 Some((23, 3u8)),
970 Some((23, 3u8)),
971 Some((23, 3u8)),
972 Some((23, 3u8)),
973 Some((23, 3u8)),
974 Some((23, 3u8)),
975 Some((23, 3u8)),
976 Some((23, 3u8)),
977 Some((23, 3u8)),
978 Some((23, 3u8)),
979 Some((23, 3u8)),
980 Some((47, 4u8)),
981 Some((47, 4u8)),
982 Some((47, 4u8)),
983 Some((47, 4u8)),
984 Some((47, 4u8)),
985 Some((47, 4u8)),
986 Some((47, 4u8)),
987 Some((47, 4u8)),
988 Some((47, 4u8)),
989 Some((47, 4u8)),
990 Some((47, 4u8)),
991 Some((47, 4u8)),
992 Some((47, 4u8)),
993 Some((47, 4u8)),
994 Some((47, 4u8)),
995 Some((47, 4u8)),
996 Some((48, 4u8)),
997 Some((48, 4u8)),
998 Some((48, 4u8)),
999 Some((48, 4u8)),
1000 Some((48, 4u8)),
1001 Some((48, 4u8)),
1002 Some((48, 4u8)),
1003 Some((48, 4u8)),
1004 Some((48, 4u8)),
1005 Some((48, 4u8)),
1006 Some((48, 4u8)),
1007 Some((48, 4u8)),
1008 Some((48, 4u8)),
1009 Some((48, 4u8)),
1010 Some((48, 4u8)),
1011 Some((48, 4u8)),
1012 Some((13, 2u8)),
1013 Some((13, 2u8)),
1014 Some((13, 2u8)),
1015 Some((13, 2u8)),
1016 Some((13, 2u8)),
1017 Some((13, 2u8)),
1018 Some((13, 2u8)),
1019 Some((13, 2u8)),
1020 Some((13, 2u8)),
1021 Some((13, 2u8)),
1022 Some((13, 2u8)),
1023 Some((13, 2u8)),
1024 Some((13, 2u8)),
1025 Some((13, 2u8)),
1026 Some((13, 2u8)),
1027 Some((13, 2u8)),
1028 Some((13, 2u8)),
1029 Some((13, 2u8)),
1030 Some((13, 2u8)),
1031 Some((13, 2u8)),
1032 Some((13, 2u8)),
1033 Some((13, 2u8)),
1034 Some((13, 2u8)),
1035 Some((13, 2u8)),
1036 Some((13, 2u8)),
1037 Some((13, 2u8)),
1038 Some((13, 2u8)),
1039 Some((13, 2u8)),
1040 Some((13, 2u8)),
1041 Some((13, 2u8)),
1042 Some((13, 2u8)),
1043 Some((13, 2u8)),
1044 Some((13, 2u8)),
1045 Some((13, 2u8)),
1046 Some((13, 2u8)),
1047 Some((13, 2u8)),
1048 Some((13, 2u8)),
1049 Some((13, 2u8)),
1050 Some((13, 2u8)),
1051 Some((13, 2u8)),
1052 Some((13, 2u8)),
1053 Some((13, 2u8)),
1054 Some((13, 2u8)),
1055 Some((13, 2u8)),
1056 Some((13, 2u8)),
1057 Some((13, 2u8)),
1058 Some((13, 2u8)),
1059 Some((13, 2u8)),
1060 Some((13, 2u8)),
1061 Some((13, 2u8)),
1062 Some((13, 2u8)),
1063 Some((13, 2u8)),
1064 Some((13, 2u8)),
1065 Some((13, 2u8)),
1066 Some((13, 2u8)),
1067 Some((13, 2u8)),
1068 Some((13, 2u8)),
1069 Some((13, 2u8)),
1070 Some((13, 2u8)),
1071 Some((13, 2u8)),
1072 Some((13, 2u8)),
1073 Some((13, 2u8)),
1074 Some((13, 2u8)),
1075 Some((13, 2u8)),
1076 ];
1077 static LEAF_LUT_0001: [Option<(u16, u8)>; 16usize] = [
1078 Some((20, 3u8)),
1079 Some((20, 3u8)),
1080 Some((33, 4u8)),
1081 Some((34, 4u8)),
1082 Some((35, 4u8)),
1083 Some((36, 4u8)),
1084 Some((37, 4u8)),
1085 Some((38, 4u8)),
1086 Some((19, 3u8)),
1087 Some((19, 3u8)),
1088 Some((31, 4u8)),
1089 Some((32, 4u8)),
1090 Some((1, 2u8)),
1091 Some((1, 2u8)),
1092 Some((1, 2u8)),
1093 Some((1, 2u8)),
1094 ];
1095 static LEAF_LUT_0010: [Option<(u16, u8)>; 16usize] = [
1096 Some((12, 2u8)),
1097 Some((12, 2u8)),
1098 Some((12, 2u8)),
1099 Some((12, 2u8)),
1100 Some((53, 4u8)),
1101 Some((54, 4u8)),
1102 Some((26, 3u8)),
1103 Some((26, 3u8)),
1104 Some((39, 4u8)),
1105 Some((40, 4u8)),
1106 Some((41, 4u8)),
1107 Some((42, 4u8)),
1108 Some((43, 4u8)),
1109 Some((44, 4u8)),
1110 Some((21, 3u8)),
1111 Some((21, 3u8)),
1112 ];
1113 static LEAF_LUT_0011: [Option<(u16, u8)>; 16usize] = [
1114 Some((28, 3u8)),
1115 Some((28, 3u8)),
1116 Some((61, 4u8)),
1117 Some((62, 4u8)),
1118 Some((63, 4u8)),
1119 Some((0, 4u8)),
1120 Some((320, 4u8)),
1121 Some((384, 4u8)),
1122 Some((10, 1u8)),
1123 Some((10, 1u8)),
1124 Some((10, 1u8)),
1125 Some((10, 1u8)),
1126 Some((10, 1u8)),
1127 Some((10, 1u8)),
1128 Some((10, 1u8)),
1129 Some((10, 1u8)),
1130 ];
1131 static LEAF_LUT_0100: [Option<(u16, u8)>; 32usize] = [
1132 Some((11, 1u8)),
1133 Some((11, 1u8)),
1134 Some((11, 1u8)),
1135 Some((11, 1u8)),
1136 Some((11, 1u8)),
1137 Some((11, 1u8)),
1138 Some((11, 1u8)),
1139 Some((11, 1u8)),
1140 Some((11, 1u8)),
1141 Some((11, 1u8)),
1142 Some((11, 1u8)),
1143 Some((11, 1u8)),
1144 Some((11, 1u8)),
1145 Some((11, 1u8)),
1146 Some((11, 1u8)),
1147 Some((11, 1u8)),
1148 Some((27, 3u8)),
1149 Some((27, 3u8)),
1150 Some((27, 3u8)),
1151 Some((27, 3u8)),
1152 Some((59, 4u8)),
1153 Some((59, 4u8)),
1154 Some((60, 4u8)),
1155 Some((60, 4u8)),
1156 Some((1472, 5u8)),
1157 Some((1536, 5u8)),
1158 Some((1600, 5u8)),
1159 Some((1728, 5u8)),
1160 Some((18, 3u8)),
1161 Some((18, 3u8)),
1162 Some((18, 3u8)),
1163 Some((18, 3u8)),
1164 ];
1165 static LEAF_LUT_0101: [Option<(u16, u8)>; 16usize] = [
1166 Some((24, 3u8)),
1167 Some((24, 3u8)),
1168 Some((49, 4u8)),
1169 Some((50, 4u8)),
1170 Some((51, 4u8)),
1171 Some((52, 4u8)),
1172 Some((25, 3u8)),
1173 Some((25, 3u8)),
1174 Some((55, 4u8)),
1175 Some((56, 4u8)),
1176 Some((57, 4u8)),
1177 Some((58, 4u8)),
1178 Some((192, 2u8)),
1179 Some((192, 2u8)),
1180 Some((192, 2u8)),
1181 Some((192, 2u8)),
1182 ];
1183 static LEAF_LUT_0110: [Option<(u16, u8)>; 32usize] = [
1184 Some((1664, 2u8)),
1185 Some((1664, 2u8)),
1186 Some((1664, 2u8)),
1187 Some((1664, 2u8)),
1188 Some((1664, 2u8)),
1189 Some((1664, 2u8)),
1190 Some((1664, 2u8)),
1191 Some((1664, 2u8)),
1192 Some((448, 4u8)),
1193 Some((448, 4u8)),
1194 Some((512, 4u8)),
1195 Some((512, 4u8)),
1196 Some((704, 5u8)),
1197 Some((768, 5u8)),
1198 Some((640, 4u8)),
1199 Some((640, 4u8)),
1200 Some((576, 4u8)),
1201 Some((576, 4u8)),
1202 Some((832, 5u8)),
1203 Some((896, 5u8)),
1204 Some((960, 5u8)),
1205 Some((1024, 5u8)),
1206 Some((1088, 5u8)),
1207 Some((1152, 5u8)),
1208 Some((1216, 5u8)),
1209 Some((1280, 5u8)),
1210 Some((1344, 5u8)),
1211 Some((1408, 5u8)),
1212 Some((256, 3u8)),
1213 Some((256, 3u8)),
1214 Some((256, 3u8)),
1215 Some((256, 3u8)),
1216 ];
1217 static LEAF_LUT_1001: [Option<(u16, u8)>; 2usize] = [Some((128, 1u8)), Some((8, 1u8))];
1218 static LEAF_LUT_1010: [Option<(u16, u8)>; 4usize] = [Some((9, 1u8)), Some((9, 1u8)), Some((16, 2u8)), Some((17, 2u8))];
1219 static LEAF_LUT_1101: [Option<(u16, u8)>; 4usize] = [Some((14, 2u8)), Some((15, 2u8)), Some((64, 1u8)), Some((64, 1u8))];
1220 static PREFIX_LUT_0: [Entry<u16>; 16usize] = [
1221 Entry::Leaf(8u8, &LEAF_LUT_0000),
1222 Entry::Leaf(4u8, &LEAF_LUT_0001),
1223 Entry::Leaf(4u8, &LEAF_LUT_0010),
1224 Entry::Leaf(4u8, &LEAF_LUT_0011),
1225 Entry::Leaf(5u8, &LEAF_LUT_0100),
1226 Entry::Leaf(4u8, &LEAF_LUT_0101),
1227 Entry::Leaf(5u8, &LEAF_LUT_0110),
1228 Entry::Value(2, 4u8),
1229 Entry::Value(3, 4u8),
1230 Entry::Leaf(1u8, &LEAF_LUT_1001),
1231 Entry::Leaf(2u8, &LEAF_LUT_1010),
1232 Entry::Value(4, 4u8),
1233 Entry::Value(5, 4u8),
1234 Entry::Leaf(2u8, &LEAF_LUT_1101),
1235 Entry::Value(6, 4u8),
1236 Entry::Value(7, 4u8),
1237 ];
1238 pub fn decode(reader: &mut impl BitReader) -> Option<u16> {
1239 let root = Entry::Prefix(4u8, &PREFIX_LUT_0);
1240 root.find(reader)
1241 }
1242 pub fn encode(val: u16) -> Option<Bits> {
1243 let bits = match val {
1244 0 => Bits { data: 53u16, len: 8u8 },
1245 1 => Bits { data: 7u16, len: 6u8 },
1246 2 => Bits { data: 7u16, len: 4u8 },
1247 3 => Bits { data: 8u16, len: 4u8 },
1248 4 => Bits { data: 11u16, len: 4u8 },
1249 5 => Bits { data: 12u16, len: 4u8 },
1250 6 => Bits { data: 14u16, len: 4u8 },
1251 7 => Bits { data: 15u16, len: 4u8 },
1252 8 => Bits { data: 19u16, len: 5u8 },
1253 9 => Bits { data: 20u16, len: 5u8 },
1254 10 => Bits { data: 7u16, len: 5u8 },
1255 11 => Bits { data: 8u16, len: 5u8 },
1256 12 => Bits { data: 8u16, len: 6u8 },
1257 13 => Bits { data: 3u16, len: 6u8 },
1258 14 => Bits { data: 52u16, len: 6u8 },
1259 15 => Bits { data: 53u16, len: 6u8 },
1260 16 => Bits { data: 42u16, len: 6u8 },
1261 17 => Bits { data: 43u16, len: 6u8 },
1262 18 => Bits { data: 39u16, len: 7u8 },
1263 19 => Bits { data: 12u16, len: 7u8 },
1264 20 => Bits { data: 8u16, len: 7u8 },
1265 21 => Bits { data: 23u16, len: 7u8 },
1266 22 => Bits { data: 3u16, len: 7u8 },
1267 23 => Bits { data: 4u16, len: 7u8 },
1268 24 => Bits { data: 40u16, len: 7u8 },
1269 25 => Bits { data: 43u16, len: 7u8 },
1270 26 => Bits { data: 19u16, len: 7u8 },
1271 27 => Bits { data: 36u16, len: 7u8 },
1272 28 => Bits { data: 24u16, len: 7u8 },
1273 29 => Bits { data: 2u16, len: 8u8 },
1274 30 => Bits { data: 3u16, len: 8u8 },
1275 31 => Bits { data: 26u16, len: 8u8 },
1276 32 => Bits { data: 27u16, len: 8u8 },
1277 33 => Bits { data: 18u16, len: 8u8 },
1278 34 => Bits { data: 19u16, len: 8u8 },
1279 35 => Bits { data: 20u16, len: 8u8 },
1280 36 => Bits { data: 21u16, len: 8u8 },
1281 37 => Bits { data: 22u16, len: 8u8 },
1282 38 => Bits { data: 23u16, len: 8u8 },
1283 39 => Bits { data: 40u16, len: 8u8 },
1284 40 => Bits { data: 41u16, len: 8u8 },
1285 41 => Bits { data: 42u16, len: 8u8 },
1286 42 => Bits { data: 43u16, len: 8u8 },
1287 43 => Bits { data: 44u16, len: 8u8 },
1288 44 => Bits { data: 45u16, len: 8u8 },
1289 45 => Bits { data: 4u16, len: 8u8 },
1290 46 => Bits { data: 5u16, len: 8u8 },
1291 47 => Bits { data: 10u16, len: 8u8 },
1292 48 => Bits { data: 11u16, len: 8u8 },
1293 49 => Bits { data: 82u16, len: 8u8 },
1294 50 => Bits { data: 83u16, len: 8u8 },
1295 51 => Bits { data: 84u16, len: 8u8 },
1296 52 => Bits { data: 85u16, len: 8u8 },
1297 53 => Bits { data: 36u16, len: 8u8 },
1298 54 => Bits { data: 37u16, len: 8u8 },
1299 55 => Bits { data: 88u16, len: 8u8 },
1300 56 => Bits { data: 89u16, len: 8u8 },
1301 57 => Bits { data: 90u16, len: 8u8 },
1302 58 => Bits { data: 91u16, len: 8u8 },
1303 59 => Bits { data: 74u16, len: 8u8 },
1304 60 => Bits { data: 75u16, len: 8u8 },
1305 61 => Bits { data: 50u16, len: 8u8 },
1306 62 => Bits { data: 51u16, len: 8u8 },
1307 63 => Bits { data: 52u16, len: 8u8 },
1308 64 => Bits { data: 27u16, len: 5u8 },
1309 128 => Bits { data: 18u16, len: 5u8 },
1310 192 => Bits { data: 23u16, len: 6u8 },
1311 256 => Bits { data: 55u16, len: 7u8 },
1312 320 => Bits { data: 54u16, len: 8u8 },
1313 384 => Bits { data: 55u16, len: 8u8 },
1314 448 => Bits { data: 100u16, len: 8u8 },
1315 512 => Bits { data: 101u16, len: 8u8 },
1316 576 => Bits { data: 104u16, len: 8u8 },
1317 640 => Bits { data: 103u16, len: 8u8 },
1318 704 => Bits { data: 204u16, len: 9u8 },
1319 768 => Bits { data: 205u16, len: 9u8 },
1320 832 => Bits { data: 210u16, len: 9u8 },
1321 896 => Bits { data: 211u16, len: 9u8 },
1322 960 => Bits { data: 212u16, len: 9u8 },
1323 1024 => Bits { data: 213u16, len: 9u8 },
1324 1088 => Bits { data: 214u16, len: 9u8 },
1325 1152 => Bits { data: 215u16, len: 9u8 },
1326 1216 => Bits { data: 216u16, len: 9u8 },
1327 1280 => Bits { data: 217u16, len: 9u8 },
1328 1344 => Bits { data: 218u16, len: 9u8 },
1329 1408 => Bits { data: 219u16, len: 9u8 },
1330 1472 => Bits { data: 152u16, len: 9u8 },
1331 1536 => Bits { data: 153u16, len: 9u8 },
1332 1600 => Bits { data: 154u16, len: 9u8 },
1333 1664 => Bits { data: 24u16, len: 6u8 },
1334 1728 => Bits { data: 155u16, len: 9u8 },
1335 1792 => Bits { data: 8u16, len: 11u8 },
1336 1856 => Bits { data: 12u16, len: 11u8 },
1337 1920 => Bits { data: 13u16, len: 11u8 },
1338 1984 => Bits { data: 18u16, len: 12u8 },
1339 2048 => Bits { data: 19u16, len: 12u8 },
1340 2112 => Bits { data: 20u16, len: 12u8 },
1341 2176 => Bits { data: 21u16, len: 12u8 },
1342 2240 => Bits { data: 22u16, len: 12u8 },
1343 2304 => Bits { data: 23u16, len: 12u8 },
1344 2368 => Bits { data: 28u16, len: 12u8 },
1345 2432 => Bits { data: 29u16, len: 12u8 },
1346 2496 => Bits { data: 30u16, len: 12u8 },
1347 2560 => Bits { data: 31u16, len: 12u8 },
1348 _ => return None,
1349 };
1350 Some(bits)
1351 }
1352 pub static ENTRIES: [(u16, Bits); 104usize] = [
1353 (0, Bits { data: 53u16, len: 8u8 }),
1354 (1, Bits { data: 7u16, len: 6u8 }),
1355 (2, Bits { data: 7u16, len: 4u8 }),
1356 (3, Bits { data: 8u16, len: 4u8 }),
1357 (4, Bits { data: 11u16, len: 4u8 }),
1358 (5, Bits { data: 12u16, len: 4u8 }),
1359 (6, Bits { data: 14u16, len: 4u8 }),
1360 (7, Bits { data: 15u16, len: 4u8 }),
1361 (8, Bits { data: 19u16, len: 5u8 }),
1362 (9, Bits { data: 20u16, len: 5u8 }),
1363 (10, Bits { data: 7u16, len: 5u8 }),
1364 (11, Bits { data: 8u16, len: 5u8 }),
1365 (12, Bits { data: 8u16, len: 6u8 }),
1366 (13, Bits { data: 3u16, len: 6u8 }),
1367 (14, Bits { data: 52u16, len: 6u8 }),
1368 (15, Bits { data: 53u16, len: 6u8 }),
1369 (16, Bits { data: 42u16, len: 6u8 }),
1370 (17, Bits { data: 43u16, len: 6u8 }),
1371 (18, Bits { data: 39u16, len: 7u8 }),
1372 (19, Bits { data: 12u16, len: 7u8 }),
1373 (20, Bits { data: 8u16, len: 7u8 }),
1374 (21, Bits { data: 23u16, len: 7u8 }),
1375 (22, Bits { data: 3u16, len: 7u8 }),
1376 (23, Bits { data: 4u16, len: 7u8 }),
1377 (24, Bits { data: 40u16, len: 7u8 }),
1378 (25, Bits { data: 43u16, len: 7u8 }),
1379 (26, Bits { data: 19u16, len: 7u8 }),
1380 (27, Bits { data: 36u16, len: 7u8 }),
1381 (28, Bits { data: 24u16, len: 7u8 }),
1382 (29, Bits { data: 2u16, len: 8u8 }),
1383 (30, Bits { data: 3u16, len: 8u8 }),
1384 (31, Bits { data: 26u16, len: 8u8 }),
1385 (32, Bits { data: 27u16, len: 8u8 }),
1386 (33, Bits { data: 18u16, len: 8u8 }),
1387 (34, Bits { data: 19u16, len: 8u8 }),
1388 (35, Bits { data: 20u16, len: 8u8 }),
1389 (36, Bits { data: 21u16, len: 8u8 }),
1390 (37, Bits { data: 22u16, len: 8u8 }),
1391 (38, Bits { data: 23u16, len: 8u8 }),
1392 (39, Bits { data: 40u16, len: 8u8 }),
1393 (40, Bits { data: 41u16, len: 8u8 }),
1394 (41, Bits { data: 42u16, len: 8u8 }),
1395 (42, Bits { data: 43u16, len: 8u8 }),
1396 (43, Bits { data: 44u16, len: 8u8 }),
1397 (44, Bits { data: 45u16, len: 8u8 }),
1398 (45, Bits { data: 4u16, len: 8u8 }),
1399 (46, Bits { data: 5u16, len: 8u8 }),
1400 (47, Bits { data: 10u16, len: 8u8 }),
1401 (48, Bits { data: 11u16, len: 8u8 }),
1402 (49, Bits { data: 82u16, len: 8u8 }),
1403 (50, Bits { data: 83u16, len: 8u8 }),
1404 (51, Bits { data: 84u16, len: 8u8 }),
1405 (52, Bits { data: 85u16, len: 8u8 }),
1406 (53, Bits { data: 36u16, len: 8u8 }),
1407 (54, Bits { data: 37u16, len: 8u8 }),
1408 (55, Bits { data: 88u16, len: 8u8 }),
1409 (56, Bits { data: 89u16, len: 8u8 }),
1410 (57, Bits { data: 90u16, len: 8u8 }),
1411 (58, Bits { data: 91u16, len: 8u8 }),
1412 (59, Bits { data: 74u16, len: 8u8 }),
1413 (60, Bits { data: 75u16, len: 8u8 }),
1414 (61, Bits { data: 50u16, len: 8u8 }),
1415 (62, Bits { data: 51u16, len: 8u8 }),
1416 (63, Bits { data: 52u16, len: 8u8 }),
1417 (64, Bits { data: 27u16, len: 5u8 }),
1418 (128, Bits { data: 18u16, len: 5u8 }),
1419 (192, Bits { data: 23u16, len: 6u8 }),
1420 (256, Bits { data: 55u16, len: 7u8 }),
1421 (320, Bits { data: 54u16, len: 8u8 }),
1422 (384, Bits { data: 55u16, len: 8u8 }),
1423 (448, Bits { data: 100u16, len: 8u8 }),
1424 (512, Bits { data: 101u16, len: 8u8 }),
1425 (576, Bits { data: 104u16, len: 8u8 }),
1426 (640, Bits { data: 103u16, len: 8u8 }),
1427 (704, Bits { data: 204u16, len: 9u8 }),
1428 (768, Bits { data: 205u16, len: 9u8 }),
1429 (832, Bits { data: 210u16, len: 9u8 }),
1430 (896, Bits { data: 211u16, len: 9u8 }),
1431 (960, Bits { data: 212u16, len: 9u8 }),
1432 (1024, Bits { data: 213u16, len: 9u8 }),
1433 (1088, Bits { data: 214u16, len: 9u8 }),
1434 (1152, Bits { data: 215u16, len: 9u8 }),
1435 (1216, Bits { data: 216u16, len: 9u8 }),
1436 (1280, Bits { data: 217u16, len: 9u8 }),
1437 (1344, Bits { data: 218u16, len: 9u8 }),
1438 (1408, Bits { data: 219u16, len: 9u8 }),
1439 (1472, Bits { data: 152u16, len: 9u8 }),
1440 (1536, Bits { data: 153u16, len: 9u8 }),
1441 (1600, Bits { data: 154u16, len: 9u8 }),
1442 (1664, Bits { data: 24u16, len: 6u8 }),
1443 (1728, Bits { data: 155u16, len: 9u8 }),
1444 (1792, Bits { data: 8u16, len: 11u8 }),
1445 (1856, Bits { data: 12u16, len: 11u8 }),
1446 (1920, Bits { data: 13u16, len: 11u8 }),
1447 (1984, Bits { data: 18u16, len: 12u8 }),
1448 (2048, Bits { data: 19u16, len: 12u8 }),
1449 (2112, Bits { data: 20u16, len: 12u8 }),
1450 (2176, Bits { data: 21u16, len: 12u8 }),
1451 (2240, Bits { data: 22u16, len: 12u8 }),
1452 (2304, Bits { data: 23u16, len: 12u8 }),
1453 (2368, Bits { data: 28u16, len: 12u8 }),
1454 (2432, Bits { data: 29u16, len: 12u8 }),
1455 (2496, Bits { data: 30u16, len: 12u8 }),
1456 (2560, Bits { data: 31u16, len: 12u8 }),
1457 ];
1458}