Trait arithmetic_coding::one_shot::Model
source · [−]pub trait Model {
type Symbol;
type ValueError: Error;
type B: BitStore = u32;
fn probability(
&self,
symbol: &Self::Symbol
) -> Result<Range<Self::B>, Self::ValueError>;
fn max_denominator(&self) -> Self::B;
fn symbol(&self, value: Self::B) -> Self::Symbol;
}Expand description
A Model is used to calculate the probability of a given symbol occuring
in a sequence. The Model is used both for encoding and decoding. A
‘fixed-length’ model always expects an exact number of symbols, and so does
not need to encode an EOF symbol.
A fixed length model can be converted into a regular model using the
convenience Wrapper type.
The more accurately a Model is able to predict the next symbol, the
greater the compression ratio will be.
Example
#![feature(exclusive_range_pattern)]
#![feature(never_type)]
pub enum Symbol {
A,
B,
C,
}
pub struct MyModel;
impl one_shot::Model for MyModel {
type Symbol = Symbol;
type ValueError = !;
fn probability(&self, symbol: &Self::Symbol) -> Result<Range<u32>, !> {
Ok(match symbol {
Symbol::A => 0..1,
Symbol::B => 1..2,
Symbol::C => 2..3,
})
}
fn symbol(&self, value: Self::B) -> Self::Symbol {
match value {
0..1 => Symbol::A,
1..2 => Symbol::B,
2..3 => Symbol::C,
_ => unreachable!(),
}
}
fn max_denominator(&self) -> u32 {
3
}
}Required Associated Types
type ValueError: Error
type ValueError: Error
Invalid symbol error
Provided Associated Types
Required Methods
fn probability(
&self,
symbol: &Self::Symbol
) -> Result<Range<Self::B>, Self::ValueError>
fn probability(
&self,
symbol: &Self::Symbol
) -> Result<Range<Self::B>, Self::ValueError>
Given a symbol, return an interval representing the probability of that symbol occurring.
This is given as a range, over the denominator given by
[Model::denominator]. This range should in general include EOF,
which is denoted by None.
For example, from the set {heads, tails}, the interval representing
heads could be 0..1, and tails would be 1..2, and EOF could be
2..3 (with a denominator of 3).
This is the inverse of the Model::symbol method
Errors
This returns a custom error if the given symbol is not valid
fn max_denominator(&self) -> Self::B
fn max_denominator(&self) -> Self::B
The maximum denominator used for probability ranges. See
Model::probability.
This value is used to calculate an appropriate precision for the
encoding, therefore this value must not change, and
[Model::denominator] must never exceed it.
Given a value, return the symbol whose probability range it falls in.
None indicates EOF
This is the inverse of the Model::probability method