pub enum Codec {
}Expand description
Specifies the compression codec and its parameters for an VarVec.
This enum allows for either explicitly setting the parameters for codes
like Rice and Zeta, or requesting that the VarVecBuilder
automatically select suitable parameters by performing a full analysis of
the data distribution.
Variants§
Gamma
Elias γ-coding. A simple, universal code that is effective for integers with a distribution skewed towards small values. It is the default codec for the iterator-based builder, which cannot perform data analysis.
Delta
Elias δ-coding. A universal code that is generally more efficient than Gamma for larger integer values.
Unary
Unary coding. Encodes an integer n as n zeros followed by a one. It is
only efficient for extremely small values (e.g., 0, 1, 2).
Rice
Rice-coding with a parameter log2_b. This code is optimal for data with
a geometric distribution.
- If
log2_bisSome(val), the specified parameter is used. - If
log2_bisNone, an optimal parameter is estimated by analyzing the entire dataset.
Zeta
Boldi-Vigna ζ-coding with a parameter k. This code is effective for
data with a power-law distribution, common in web graphs and social networks.
- If
kisSome(val), the specified parameter is used (k > 0). - If
kisNone, an optimal parameter is estimated by analyzing the entire dataset.
Golomb
Golomb-coding with a parameter b. This is a generalization of Rice coding
and is also suitable for geometric distributions.
- If
bisSome(val), the specified parameter is used (b > 0). - If
bisNone, an optimal parameter is estimated by analyzing the entire dataset.
Omega
Elias-Fano ω-coding. A universal code.
Pi
Streamlined Apostolico–Drovandi π code with a parameter k.
- If
kisSome(val), the specified parameter is used (k > 0). - If
kisNone, an optimal parameter is estimated by analyzing the entire dataset.
ExpGolomb
Elias-Fano Exponential-Golomb coding with a parameter k.
- If
kisSome(val), the specified parameter is used. - If
kisNone, an optimal parameter is estimated by analyzing the entire dataset.
VByteLe
VByte encoding with Little-Endian byte order. This is often one of the fastest codecs for decoding, though it may not offer the best compression.
VByteBe
VByte encoding with Big-Endian byte order.
Auto
Automatically select the best variable-length code based on the data.
When this option is used, the builder performs a statistical analysis on the entire input dataset to determine which codec and parameterization provides the best compression ratio.
§Note
This option is not supported for the iterator-based builder, as it requires pre-analyzing the data.
Explicit(Codes)
Use an explicitly provided Codes variant from dsi-bitstream.
This is for advanced use cases where the user has already constructed
a Codes enum instance.
Trait Implementations§
impl Copy for Codec
impl Eq for Codec
impl StructuralPartialEq for Codec
Auto Trait Implementations§
impl Freeze for Codec
impl RefUnwindSafe for Codec
impl Send for Codec
impl Sync for Codec
impl Unpin for Codec
impl UnsafeUnpin for Codec
impl UnwindSafe for Codec
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, U> CastableInto<U> for Twhere
U: CastableFrom<T>,
impl<T, U> CastableInto<U> for Twhere
U: CastableFrom<T>,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DowncastableFrom<T> for T
impl<T> DowncastableFrom<T> for T
Source§fn downcast_from(value: T) -> T
fn downcast_from(value: T) -> T
Source§impl<T, U> DowncastableInto<U> for Twhere
U: DowncastableFrom<T>,
impl<T, U> DowncastableInto<U> for Twhere
U: DowncastableFrom<T>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more