pub struct IntVecReader<'a, T: Storable, E: Endianness, B: AsRef<[u64]>>where
for<'b> BufBitReader<E, MemWordReader<u64, &'b [u64]>, DefaultReadParams>: BitRead<E, Error = Infallible> + CodesRead<E> + BitSeek<Error = Infallible>,{ /* private fields */ }
Expand description
A stateful reader for an IntVec
that provides fast random access.
This reader is created by the IntVec::reader
method. It maintains an internal, reusable bitstream reader, making it highly
efficient for performing multiple random lookups where the access pattern is
not known ahead of time.
§Examples
use compressed_intvec::variable::{IntVec, UIntVec};
let data: Vec<u32> = (0..100).rev().collect(); // Data is not sequential
let vec: UIntVec<u32> = IntVec::from_slice(&data).unwrap();
// Create a reusable reader
let mut reader = vec.reader();
// Perform multiple random reads efficiently
assert_eq!(reader.get(99).unwrap(), Some(0));
assert_eq!(reader.get(0).unwrap(), Some(99));
assert_eq!(reader.get(50).unwrap(), Some(49));
Implementations§
Source§impl<'a, T: Storable, E: Endianness, B: AsRef<[u64]>> IntVecReader<'a, T, E, B>where
for<'b> BufBitReader<E, MemWordReader<u64, &'b [u64]>, DefaultReadParams>: BitRead<E, Error = Infallible> + CodesRead<E> + BitSeek<Error = Infallible>,
impl<'a, T: Storable, E: Endianness, B: AsRef<[u64]>> IntVecReader<'a, T, E, B>where
for<'b> BufBitReader<E, MemWordReader<u64, &'b [u64]>, DefaultReadParams>: BitRead<E, Error = Infallible> + CodesRead<E> + BitSeek<Error = Infallible>,
Sourcepub fn get(&mut self, index: usize) -> Result<Option<T>, IntVecError>
pub fn get(&mut self, index: usize) -> Result<Option<T>, IntVecError>
Retrieves the element at index
, or None
if out of bounds.
This method leverages the stateful nature of the reader to perform efficient random access by seeking to the nearest preceding sample point and decoding sequentially from there.
Sourcepub unsafe fn get_unchecked(&mut self, index: usize) -> T
pub unsafe fn get_unchecked(&mut self, index: usize) -> T
Retrieves the element at index
without bounds checking.
§Safety
Calling this method with an out-of-bounds index
is undefined behavior.
The caller must ensure that index < self.intvec.len()
.
Auto Trait Implementations§
impl<'a, T, E, B> Freeze for IntVecReader<'a, T, E, B>
impl<'a, T, E, B> RefUnwindSafe for IntVecReader<'a, T, E, B>
impl<'a, T, E, B> Send for IntVecReader<'a, T, E, B>
impl<'a, T, E, B> Sync for IntVecReader<'a, T, E, B>
impl<'a, T, E, B> Unpin for IntVecReader<'a, T, E, B>
impl<'a, T, E, B> UnwindSafe for IntVecReader<'a, T, E, B>
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
Mutably borrows from an owned value. Read more
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
Truncate the current UnsignedInt to a possibly smaller size
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>
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 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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> UpcastableFrom<T> for T
impl<T> UpcastableFrom<T> for T
Source§fn upcast_from(value: T) -> T
fn upcast_from(value: T) -> T
Extend the current UnsignedInt to a possibly bigger size.