Struct miniz_oxide::inflate::core::HuffmanTable

source ·
struct HuffmanTable {
    pub code_size: [u8; 288],
    pub look_up: [i16; 1024],
    pub tree: [i16; 576],
}
Expand description

A struct containing huffman code lengths and the huffman code tree used by the decompressor.

Fields§

§code_size: [u8; 288]

Length of the code at each index.

§look_up: [i16; 1024]

Fast lookup table for shorter huffman codes.

See HuffmanTable::fast_lookup.

§tree: [i16; 576]

Full huffman tree.

Positive values are edge nodes/symbols, negative values are parent nodes/references to other nodes.

Implementations§

source§

impl HuffmanTable

source

const fn new() -> HuffmanTable

source

fn fast_lookup(&self, bit_buf: u64) -> i16

Look for a symbol in the fast lookup table. The symbol is stored in the lower 9 bits, the length in the next 6. If the returned value is negative, the code wasn’t found in the fast lookup table and the full tree has to be traversed to find the code.

source

fn tree_lookup( &self, fast_symbol: i32, bit_buf: u64, code_len: u32, ) -> (i32, u32)

Get the symbol and the code length from the huffman tree.

source

fn lookup(&self, bit_buf: u64) -> Option<(i32, u32)>

Look up a symbol and code length from the bits in the provided bit buffer.

Returns Some(symbol, length) on success, None if the length is 0.

It’s possible we could avoid checking for 0 if we can guarantee a sane table. TODO: Check if a smaller type for code_len helps performance.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.