pub mod build;
pub mod ctable;
pub mod dtable;
mod fast;
pub mod weights;
pub const MAX_BITS: u32 = 11;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct HufWeights {
pub w: [u8; 256],
pub symbols: usize,
pub max_bits: u32,
}
impl HufWeights {
pub fn from_lengths(lens: &[u8; 256]) -> HufWeights {
let max_bits = lens.iter().copied().max().unwrap_or(0) as u32;
let mut w = [0u8; 256];
let mut symbols = 0;
for (s, &l) in lens.iter().enumerate() {
if l > 0 {
w[s] = (max_bits + 1 - l as u32) as u8;
symbols = s + 1;
}
}
HufWeights { w, symbols, max_bits }
}
#[inline(always)]
pub fn len(&self, s: usize) -> u32 {
match self.w[s] {
0 => 0,
w => self.max_bits + 1 - w as u32,
}
}
}