pub struct IntVecFromIterBuilder<E: Endianness, I: IntoIterator<Item = u64>> { /* private fields */ }
Expand description
A builder for creating an IntVec
from an iterator.
This builder is obtained by calling IntVec::from_iter_builder
. It is
designed for scenarios where data is too large to fit in memory as a
Vec<u64>
or is generated on-the-fly.
§Limitations
This builder does not support automatic parameter selection for codecs.
Because the data is processed in a stream, the builder cannot analyze it beforehand
to determine optimal parameters. You must provide a CodecSpec
with fixed,
pre-determined parameters.
Implementations§
Source§impl<E: Endianness, I: IntoIterator<Item = u64>> IntVecFromIterBuilder<E, I>
impl<E: Endianness, I: IntoIterator<Item = u64>> IntVecFromIterBuilder<E, I>
Sourcepub fn k(self, k: usize) -> Self
pub fn k(self, k: usize) -> Self
Sets the sampling rate k
for DSI-based codecs.
Refer to IntVecBuilder::k
for more details.
Sourcepub fn build(self) -> Result<IntVec<E>, IntVecError>where
BufBitWriter<E, MemWordWriterVec<u64, Vec<u64>>>: BitWrite<E, Error = Infallible> + CodesWrite<E>,
pub fn build(self) -> Result<IntVec<E>, IntVecError>where
BufBitWriter<E, MemWordWriterVec<u64, Vec<u64>>>: BitWrite<E, Error = Infallible> + CodesWrite<E>,
Builds the IntVec
by consuming the iterator.
This method iterates through the provided data, encodes it according to the
specified codec, and constructs the final IntVec
.
§Returns
A Result
containing the constructed IntVec
on success, or an
IntVecError
on failure. Errors can occur if:
- An automatic or parameter-less codec spec is provided (e.g.,
CodecSpec::Auto
). k=0
is used with a DSI-based codec.- A value from the iterator does not fit within the specified number of bits for
FixedLength
encoding.
§Example
use compressed_intvec::prelude::*;
// Create an IntVec from a range iterator.
let intvec = LEIntVec::from_iter_builder(0..1000u64)
.codec(CodecSpec::FixedLength{ num_bits: Some(10) }) // 1000 fits in 10 bits
.build()
.unwrap();
assert_eq!(intvec.len(), 1000);
assert_eq!(intvec.get(999), Some(999));
// Building fails if automatic parameter selection is attempted.
let result = LEIntVec::from_iter_builder(0..100u64)
.codec(CodecSpec::Auto)
.build();
assert!(matches!(result, Err(IntVecError::InvalidParameters(_))));
§Implementation Notes
Similar to the slice-based builder, this method calls shrink_to_fit
on the underlying storage vector to ensure minimal memory usage. This
brings an additional cost of reallocation and copying, but is necessary
for a compressed data structure. However, this is a one-time cost
and does not affect the overall performance of the IntVec
in typical use cases.
Trait Implementations§
Source§impl<E: Debug + Endianness, I: Debug + IntoIterator<Item = u64>> Debug for IntVecFromIterBuilder<E, I>
impl<E: Debug + Endianness, I: Debug + IntoIterator<Item = u64>> Debug for IntVecFromIterBuilder<E, I>
Auto Trait Implementations§
impl<E, I> Freeze for IntVecFromIterBuilder<E, I>where
I: Freeze,
impl<E, I> RefUnwindSafe for IntVecFromIterBuilder<E, I>where
I: RefUnwindSafe,
E: RefUnwindSafe,
impl<E, I> Send for IntVecFromIterBuilder<E, I>where
I: Send,
impl<E, I> Sync for IntVecFromIterBuilder<E, I>where
I: Sync,
impl<E, I> Unpin for IntVecFromIterBuilder<E, I>
impl<E, I> UnwindSafe for IntVecFromIterBuilder<E, I>where
I: UnwindSafe,
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