Struct constriction::stream::model::LookupDecoderModel
source · pub struct LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, const PRECISION: usize>where
Probability: BitArray,{ /* private fields */ }
Expand description
A tabularized DecoderModel
that is optimized for fast decoding of i.i.d. symbols
You will usually want to use this type through one of the type aliases
SmallContiguousLookupDecoderModel
or SmallNonContiguousLookupDecoderModel
. See
these types for extended documentation and examples.
Implementations§
source§impl<Symbol, Probability, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Vec<(Probability, Symbol)>>, Box<[Probability]>, PRECISION>
impl<Symbol, Probability, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Vec<(Probability, Symbol)>>, Box<[Probability]>, PRECISION>
sourcepub fn from_symbols_and_floating_point_probabilities<F>(
symbols: &[Symbol],
probabilities: &[F]
) -> Result<Self, ()>where
F: FloatCore + Sum<F> + Into<f64>,
Probability: Into<f64> + AsPrimitive<usize>,
f64: AsPrimitive<Probability>,
usize: AsPrimitive<Probability>,
pub fn from_symbols_and_floating_point_probabilities<F>(
symbols: &[Symbol],
probabilities: &[F]
) -> Result<Self, ()>where
F: FloatCore + Sum<F> + Into<f64>,
Probability: Into<f64> + AsPrimitive<usize>,
f64: AsPrimitive<Probability>,
usize: AsPrimitive<Probability>,
Create a LookupDecoderModel
over arbitrary symbols.
TODO: example
sourcepub fn from_symbols_and_nonzero_fixed_point_probabilities<S, P>(
symbols: S,
probabilities: P,
infer_last_probability: bool
) -> Result<Self, ()>
pub fn from_symbols_and_nonzero_fixed_point_probabilities<S, P>( symbols: S, probabilities: P, infer_last_probability: bool ) -> Result<Self, ()>
Create a LookupDecoderModel
over arbitrary symbols.
TODO: example
sourcepub fn from_iterable_entropy_model<'m, M>(model: &'m M) -> Selfwhere
M: IterableEntropyModel<'m, PRECISION, Symbol = Symbol, Probability = Probability> + ?Sized,
pub fn from_iterable_entropy_model<'m, M>(model: &'m M) -> Selfwhere
M: IterableEntropyModel<'m, PRECISION, Symbol = Symbol, Probability = Probability> + ?Sized,
TODO: test
source§impl<Symbol, Probability, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, ContiguousSymbolTable<Vec<Probability>>, Box<[Probability]>, PRECISION>
impl<Symbol, Probability, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, ContiguousSymbolTable<Vec<Probability>>, Box<[Probability]>, PRECISION>
sourcepub fn from_floating_point_probabilities_contiguous<F>(
probabilities: &[F]
) -> Result<Self, ()>where
F: FloatCore + Sum<F> + Into<f64>,
Probability: Into<f64> + AsPrimitive<usize>,
f64: AsPrimitive<Probability>,
usize: AsPrimitive<Probability>,
pub fn from_floating_point_probabilities_contiguous<F>(
probabilities: &[F]
) -> Result<Self, ()>where
F: FloatCore + Sum<F> + Into<f64>,
Probability: Into<f64> + AsPrimitive<usize>,
f64: AsPrimitive<Probability>,
usize: AsPrimitive<Probability>,
Create a LookupDecoderModel
over a contiguous range of symbols.
TODO: example
source§impl<Probability, Table, LookupTable, const PRECISION: usize> LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
LookupTable: AsRef<[Probability]>,
impl<Probability, Table, LookupTable, const PRECISION: usize> LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
LookupTable: AsRef<[Probability]>,
sourcepub fn as_view(
&self
) -> LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<&[Probability]>, &[Probability], PRECISION>
pub fn as_view( &self ) -> LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<&[Probability]>, &[Probability], PRECISION>
Makes a very cheap shallow copy of the model that can be used much like a shared reference.
The returned LookupDecoderModel
implements Copy
, which is a requirement for some
methods, such as Decode::decode_iid_symbols
. These methods could also accept a
shared reference to a NonContiguousCategoricalDecoderModel
(since all references
to entropy models are also entropy models, and all shared references implement
Copy
), but passing a view instead may be slightly more efficient because it
avoids one level of dereferencing.
sourcepub fn as_contiguous_categorical(
&self
) -> ContiguousCategoricalEntropyModel<Probability, &[Probability], PRECISION>
pub fn as_contiguous_categorical( &self ) -> ContiguousCategoricalEntropyModel<Probability, &[Probability], PRECISION>
TODO: documentation
sourcepub fn into_contiguous_categorical(
self
) -> ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>
pub fn into_contiguous_categorical( self ) -> ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>
TODO: documentation
source§impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[(Probability, Symbol)]>,
LookupTable: AsRef<[Probability]>,
impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[(Probability, Symbol)]>,
LookupTable: AsRef<[Probability]>,
sourcepub fn as_view(
&self
) -> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<&[(Probability, Symbol)]>, &[Probability], PRECISION>
pub fn as_view( &self ) -> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<&[(Probability, Symbol)]>, &[Probability], PRECISION>
Makes a very cheap shallow copy of the model that can be used much like a shared reference.
The returned LookupDecoderModel
implements Copy
, which is a requirement for some
methods, such as Decode::decode_iid_symbols
. These methods could also accept a
shared reference to a NonContiguousCategoricalDecoderModel
(since all references
to entropy models are also entropy models, and all shared references implement
Copy
), but passing a view instead may be slightly more efficient because it
avoids one level of dereferencing.
Trait Implementations§
source§impl<Symbol: Clone, Probability, SymbolTable: Clone, LookupTable: Clone, const PRECISION: usize> Clone for LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>
impl<Symbol: Clone, Probability, SymbolTable: Clone, LookupTable: Clone, const PRECISION: usize> Clone for LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>
source§fn clone(
&self
) -> LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>
fn clone( &self ) -> LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<Symbol: Debug, Probability, SymbolTable: Debug, LookupTable: Debug, const PRECISION: usize> Debug for LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>
impl<Symbol: Debug, Probability, SymbolTable: Debug, LookupTable: Debug, const PRECISION: usize> Debug for LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>
source§impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> DecoderModel<PRECISION> for LookupDecoderModel<Symbol, Probability, Table, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
Table: SymbolTable<Symbol, Probability>,
LookupTable: AsRef<[Probability]>,
Symbol: Clone,
impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> DecoderModel<PRECISION> for LookupDecoderModel<Symbol, Probability, Table, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
Table: SymbolTable<Symbol, Probability>,
LookupTable: AsRef<[Probability]>,
Symbol: Clone,
source§fn quantile_function(
&self,
quantile: Probability
) -> (Symbol, Probability, Probability::NonZero)
fn quantile_function( &self, quantile: Probability ) -> (Symbol, Probability, Probability::NonZero)
source§impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> EntropyModel<PRECISION> for LookupDecoderModel<Symbol, Probability, Table, LookupTable, PRECISION>
impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> EntropyModel<PRECISION> for LookupDecoderModel<Symbol, Probability, Table, LookupTable, PRECISION>
source§impl<'m, Probability, Table, const PRECISION: usize> From<&'m ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>> for LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Vec<Probability>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
impl<'m, Probability, Table, const PRECISION: usize> From<&'m ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>> for LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Vec<Probability>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
source§fn from(
model: &'m ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>
) -> Self
fn from( model: &'m ContiguousCategoricalEntropyModel<Probability, Table, PRECISION> ) -> Self
source§impl<'m, Symbol, Probability, M, const PRECISION: usize> From<&'m M> for LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Vec<(Probability, Symbol)>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
Symbol: Copy + Default,
usize: AsPrimitive<Probability>,
M: IterableEntropyModel<'m, PRECISION, Symbol = Symbol, Probability = Probability> + ?Sized,
impl<'m, Symbol, Probability, M, const PRECISION: usize> From<&'m M> for LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Vec<(Probability, Symbol)>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
Symbol: Copy + Default,
usize: AsPrimitive<Probability>,
M: IterableEntropyModel<'m, PRECISION, Symbol = Symbol, Probability = Probability> + ?Sized,
source§impl<'m, Probability, Table, LookupTable, const PRECISION: usize> IterableEntropyModel<'m, PRECISION> for LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
LookupTable: AsRef<[Probability]>,
impl<'m, Probability, Table, LookupTable, const PRECISION: usize> IterableEntropyModel<'m, PRECISION> for LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
LookupTable: AsRef<[Probability]>,
§type Iter = SymbolTableIter<Probability, Probability, ContiguousSymbolTable<&'m [Probability]>>
type Iter = SymbolTableIter<Probability, Probability, ContiguousSymbolTable<&'m [Probability]>>
symbol_table
. Read moresource§fn symbol_table(&'m self) -> Self::Iter
fn symbol_table(&'m self) -> Self::Iter
source§fn floating_point_symbol_table<F>(
&'m self
) -> FloatingPointSymbolTable<F, Self::Iter, PRECISION> ⓘwhere
F: From<Self::Probability>,
fn floating_point_symbol_table<F>(
&'m self
) -> FloatingPointSymbolTable<F, Self::Iter, PRECISION> ⓘwhere
F: From<Self::Probability>,
symbol_table
, but yields both cumulatives and probabilities in
floating point representation. Read moresource§fn entropy_base2<F>(&'m self) -> F
fn entropy_base2<F>(&'m self) -> F
source§impl<'m, Symbol, Probability, Table, LookupTable, const PRECISION: usize> IterableEntropyModel<'m, PRECISION> for LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Symbol: Clone + 'm,
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[(Probability, Symbol)]>,
LookupTable: AsRef<[Probability]>,
impl<'m, Symbol, Probability, Table, LookupTable, const PRECISION: usize> IterableEntropyModel<'m, PRECISION> for LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Symbol: Clone + 'm,
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[(Probability, Symbol)]>,
LookupTable: AsRef<[Probability]>,
§type Iter = SymbolTableIter<Symbol, Probability, NonContiguousSymbolTable<&'m [(Probability, Symbol)]>>
type Iter = SymbolTableIter<Symbol, Probability, NonContiguousSymbolTable<&'m [(Probability, Symbol)]>>
symbol_table
. Read moresource§fn symbol_table(&'m self) -> Self::Iter
fn symbol_table(&'m self) -> Self::Iter
source§fn floating_point_symbol_table<F>(
&'m self
) -> FloatingPointSymbolTable<F, Self::Iter, PRECISION> ⓘwhere
F: From<Self::Probability>,
fn floating_point_symbol_table<F>(
&'m self
) -> FloatingPointSymbolTable<F, Self::Iter, PRECISION> ⓘwhere
F: From<Self::Probability>,
symbol_table
, but yields both cumulatives and probabilities in
floating point representation. Read more