#![allow(dead_code)]
const fn make_decode(widths: [usize; 4]) -> [[u8; 16]; 256] {
let mut table = [[0u8; 16]; 256];
let mut ctrl = 0usize;
while ctrl < 256 {
let mut src = 0u8;
let mut i = 0usize;
while i < 4 {
let tag = (ctrl >> (2 * i)) & 3;
let width = widths[tag];
let base = 4 * i;
let mut b = 0usize;
while b < 4 {
if b < width {
table[ctrl][base + b] = src + b as u8;
} else {
table[ctrl][base + b] = 0x80;
}
b += 1;
}
src += width as u8;
i += 1;
}
ctrl += 1;
}
table
}
pub(crate) static TABLE: [[u8; 16]; 256] = make_decode([1, 2, 3, 4]);
pub(super) static TABLE_0124: [[u8; 16]; 256] = make_decode([0, 1, 2, 4]);
const fn make_data_len(widths: [usize; 4]) -> [u8; 256] {
let mut table = [0u8; 256];
let mut ctrl = 0usize;
while ctrl < 256 {
let mut sum = 0u8;
let mut i = 0usize;
while i < 4 {
sum += widths[(ctrl >> (2 * i)) & 3] as u8;
i += 1;
}
table[ctrl] = sum;
ctrl += 1;
}
table
}
pub(crate) static DATA_LEN: [u8; 256] = make_data_len([1, 2, 3, 4]);
pub(super) static DATA_LEN_0124: [u8; 256] = make_data_len([0, 1, 2, 4]);
const fn make_encode(widths: [usize; 4]) -> [[u8; 16]; 256] {
let mut table = [[0u8; 16]; 256];
let mut ctrl = 0usize;
while ctrl < 256 {
let mut dst = 0usize;
let mut i = 0usize;
while i < 4 {
let tag = (ctrl >> (2 * i)) & 3;
let width = widths[tag];
let mut b = 0usize;
while b < width {
table[ctrl][dst] = (4 * i + b) as u8;
dst += 1;
b += 1;
}
i += 1;
}
ctrl += 1;
}
table
}
pub(crate) static ENCODE_TABLE_CLASSIC: [[u8; 16]; 256] = make_encode([1, 2, 3, 4]);
pub(super) static ENCODE_TABLE_0124: [[u8; 16]; 256] = make_encode([0, 1, 2, 4]);