Struct SIntVecBuilder

Source
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>

Source

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.

Source

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.

Source

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.

Source

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 to 0 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> 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> CastableFrom<T> for T

Source§

fn cast_from(value: T) -> T

Call Self as W
Source§

impl<T, U> CastableInto<U> for T
where U: CastableFrom<T>,

Source§

fn cast(self) -> U

Call W::cast_from(self)
Source§

impl<T> DowncastableFrom<T> for T

Source§

fn downcast_from(value: T) -> T

Truncate the current UnsignedInt to a possibly smaller size
Source§

impl<T, U> DowncastableInto<U> for T
where U: DowncastableFrom<T>,

Source§

fn downcast(self) -> U

Call W::downcast_from(self)
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Splat<T> for T

Source§

fn splat(value: T) -> T

Source§

impl<T> To<T> for T

Source§

fn to(self) -> T

Source§

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

Source§

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>,

Source§

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.
Source§

impl<T> UpcastableFrom<T> for T

Source§

fn upcast_from(value: T) -> T

Extend the current UnsignedInt to a possibly bigger size.
Source§

impl<T, U> UpcastableInto<U> for T
where U: UpcastableFrom<T>,

Source§

fn upcast(self) -> U

Call W::upcast_from(self)
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V