pub struct SIntVecBuilder<'a, E: Endianness> { /* private fields */ }
Expand description
A builder for creating an SIntVec
from a slice of signed integers (&[i64]
).
This builder handles the conversion from signed to unsigned integers by applying
the ZigZag transformation to each element on the fly. The resulting stream of
u64
values is then passed to the underlying IntVec
iterator-based builder
for compression.
§Limitations
This builder does not support automatic parameter selection for codecs.
Because the data is transformed and consumed as a stream, the builder cannot
analyze the entire dataset beforehand to determine optimal parameters. You must
provide a CodecSpec
with fixed, pre-determined parameters.
Attempting to use CodecSpec::Auto
or variants with None
parameters (e.g.,
CodecSpec::FixedLength { num_bits: None }
) will result in an
IntVecError::InvalidParameters
.
§Example
use compressed_intvec::prelude::*;
let data: &[i64] = &[-10, 20, -30, -40, 50];
// We must specify a codec with fixed parameters.
let sintvec = LESIntVec::builder(data)
.codec(CodecSpec::Gamma)
.k(16)
.build()
.unwrap();
assert_eq!(sintvec.len(), 5);
assert_eq!(sintvec.get(2), Some(-30));
Implementations§
Source§impl<'a, E: Endianness> SIntVecBuilder<'a, E>
impl<'a, E: Endianness> SIntVecBuilder<'a, E>
Sourcepub fn new(input: &'a [i64]) -> Self
pub fn new(input: &'a [i64]) -> Self
Creates a new builder from a slice of i64
.
By default, it is configured with a sampling rate (k
) of 32 and uses
Gamma coding as a safe, parameter-free default.
Sourcepub fn k(self, k: usize) -> Self
pub fn k(self, k: usize) -> Self
Sets the sampling rate k
for the underlying IntVec
.
The sampling rate determines the trade-off between random access speed and
memory overhead for variable-length codes. It must be greater than 0.
This parameter is ignored when using FixedLength
encoding.
Sourcepub fn codec(self, codec_spec: CodecSpec) -> Self
pub fn codec(self, codec_spec: CodecSpec) -> Self
Sets the codec specification for compression.
The provided CodecSpec
must have fixed, user-specified parameters.
Automatic parameter selection (e.g., CodecSpec::Auto
) is not supported
and will cause the build
method to return an error.
Sourcepub fn build(self) -> Result<SIntVec<E>, IntVecError>where
for<'b> BufBitWriter<E, MemWordWriterVec<u64, Vec<u64>>>: BitWrite<E, Error = Infallible> + CodesWrite<E>,
pub fn build(self) -> Result<SIntVec<E>, IntVecError>where
for<'b> BufBitWriter<E, MemWordWriterVec<u64, Vec<u64>>>: BitWrite<E, Error = Infallible> + CodesWrite<E>,
Builds the SIntVec
by transforming and compressing the input data.
This method consumes the builder and returns a Result
. The underlying logic
uses the iterator-based builder of IntVec
to avoid materializing the
intermediate ZigZag-encoded u64
vector in memory.
§Errors
This method will return an IntVecError
if:
- A
CodecSpec
requiring automatic parameter selection is used. - A value in the input data (after ZigZag encoding) is too large to fit
within the specified number of bits for
FixedLength
encoding. - The sampling rate
k
is set to0
for a variable-length code.
Auto Trait Implementations§
impl<'a, E> Freeze for SIntVecBuilder<'a, E>
impl<'a, E> RefUnwindSafe for SIntVecBuilder<'a, E>where
E: RefUnwindSafe,
impl<'a, E> Send for SIntVecBuilder<'a, E>
impl<'a, E> Sync for SIntVecBuilder<'a, E>
impl<'a, E> Unpin for SIntVecBuilder<'a, E>where
E: Unpin,
impl<'a, E> UnwindSafe for SIntVecBuilder<'a, E>where
E: UnwindSafe,
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> 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<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