CompressedVec

Struct CompressedVec 

Source
pub struct CompressedVec<I, T> { /* private fields */ }
Expand description

Compressed storage vector using Pcodec for lossless numerical compression.

Values are compressed in pages for better space efficiency. Best for sequential access patterns of numerical data. Random access is possible but less efficient than RawVec - prefer the latter for random access workloads.

Implementations§

Source§

impl<I, T> CompressedVec<I, T>

Source

pub fn forced_import( db: &Database, name: &str, version: Version, ) -> Result<Self>

Same as import but will reset the vec under certain errors, so be careful !

Source

pub fn forced_import_with(options: ImportOptions<'_>) -> Result<Self>

Same as import but will reset the vec under certain errors, so be careful !

Source

pub fn import(db: &Database, name: &str, version: Version) -> Result<Self>

Source

pub fn import_with(options: ImportOptions<'_>) -> Result<Self>

Source

pub fn iter(&self) -> Result<CompressedVecIterator<'_, I, T>>

Source

pub fn clean_iter(&self) -> Result<CleanCompressedVecIterator<'_, I, T>>

Source

pub fn dirty_iter(&self) -> Result<DirtyCompressedVecIterator<'_, I, T>>

Source

pub fn is_dirty(&self) -> bool

Trait Implementations§

Source§

impl<I: Allocative, T: Allocative> Allocative for CompressedVec<I, T>

Source§

fn visit<'allocative_a, 'allocative_b: 'allocative_a>( &self, visitor: &'allocative_a mut Visitor<'allocative_b>, )

Source§

impl<I, T> AnyCollectableVec for CompressedVec<I, T>

Source§

fn collect_range_json_bytes( &self, from: Option<usize>, to: Option<usize>, ) -> Vec<u8>

Source§

fn collect_range_string( &self, from: Option<usize>, to: Option<usize>, ) -> Vec<String>

Source§

fn range_count(&self, from: Option<i64>, to: Option<i64>) -> usize

Returns the number of items in the specified range.
Source§

fn range_weight(&self, from: Option<i64>, to: Option<i64>) -> usize

Returns the total size in bytes of items in the specified range.
Source§

impl<I, T> AnyIterableVec<I, T> for CompressedVec<I, T>

Source§

fn boxed_iter(&self) -> BoxedVecIterator<'_, I, T>

Source§

fn iter(&self) -> BoxedVecIterator<'_, I, T>
where I: StoredIndex, T: StoredRaw,

Source§

impl<I, T> AnyStoredVec for CompressedVec<I, T>

Source§

fn db_path(&self) -> PathBuf

Source§

fn region(&self) -> &Region

Source§

fn header(&self) -> &Header

Source§

fn mut_header(&mut self) -> &mut Header

Source§

fn saved_stamped_changes(&self) -> u16

Number of stamped change files to keep for rollback support.
Source§

fn stored_len(&self) -> usize

The effective stored length (may differ from real_stored_len during truncation).
Source§

fn real_stored_len(&self) -> usize

The actual length stored on disk.
Source§

fn flush(&mut self) -> Result<()>

Source§

fn serialize_changes(&self) -> Result<Vec<u8>>

Source§

fn safe_flush(&mut self, exit: &Exit) -> Result<()>

Flushes while holding the exit lock to ensure consistency during shutdown.
Source§

fn update_stamp(&mut self, stamp: Stamp)

Source§

fn stamp(&self) -> Stamp

Source§

fn stamped_flush(&mut self, stamp: Stamp) -> Result<()>

Source§

impl<I, T> AnyVec for CompressedVec<I, T>

Source§

fn version(&self) -> Version

Source§

fn name(&self) -> &str

Source§

fn len(&self) -> usize

Source§

fn index_type_to_string(&self) -> &'static str

Returns the string representation of the index type.
Source§

fn value_type_to_size_of(&self) -> usize

Returns the size in bytes of the value type.
Source§

fn region_names(&self) -> Vec<String>

Returns the list of region names used by this vector.
Source§

fn is_empty(&self) -> bool

Source§

fn index_to_name(&self) -> String

Returns the combined name of the vector.
Source§

fn etag(&self, stamp: Stamp, to: Option<i64>) -> String

Generates an ETag for this vector based on stamp and optional end index.
Source§

fn i64_to_usize(&self, i: i64) -> usize

Converts an i64 index to usize, supporting negative indexing (Python-style).
Source§

impl<I, T> Clone for CompressedVec<I, T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<I: Debug, T: Debug> Debug for CompressedVec<I, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<I, T> GenericStoredVec<I, T> for CompressedVec<I, T>

Source§

fn read_at(&self, index: usize, reader: &Reader<'_>) -> Result<T>

Reads value at usize index using provided reader.
Source§

fn pushed(&self) -> &[T]

Returns the current pushed (uncommitted) values.
Source§

fn mut_pushed(&mut self) -> &mut Vec<T>

Returns a mutable reference to the current pushed (uncommitted) values.
Source§

fn holes(&self) -> &BTreeSet<usize>

Returns the set of deleted indices (holes).
Source§

fn mut_holes(&mut self) -> &mut BTreeSet<usize>

Returns a mutable reference to the set of holes.
Source§

fn updated(&self) -> &BTreeMap<usize, T>

Returns the map of updated (uncommitted modifications to stored) values.
Source§

fn mut_updated(&mut self) -> &mut BTreeMap<usize, T>

Returns a mutable reference to the map of updated values.
Source§

fn reset(&mut self) -> Result<()>

Resets the vector state.
Source§

const SIZE_OF_T: usize = _

Source§

fn create_reader(&self) -> Reader<'_>

Creates a reader with lifetime tied to self. Be careful with deadlocks - drop the reader before mutable ops.
Source§

fn create_static_reader(&self) -> Reader<'static>

Creates a reader with ’static lifetime. Be careful with deadlocks - drop the reader before mutable ops.
Source§

fn read(&self, index: I, reader: &Reader<'_>) -> Result<T>

Reads value at index using provided reader.
Source§

fn read_once(&self, index: I) -> Result<T>

Reads value at index, creating a temporary reader. For multiple reads, prefer read() with a reused reader.
Source§

fn read_at_once(&self, index: usize) -> Result<T>

Reads value at usize index, creating a temporary reader. For multiple reads, prefer read_at() with a reused reader.
Source§

fn read_unwrap(&self, index: I, reader: &Reader<'_>) -> T

Reads value at index using provided reader. Panics if read fails.
Source§

fn read_unwrap_once(&self, index: I) -> T

Reads value at index, creating a temporary reader. Panics if read fails. For multiple reads, prefer read_unwrap() with a reused reader.
Source§

fn read_at_unwrap(&self, index: usize, reader: &Reader<'_>) -> T

Reads value at usize index using provided reader. Panics if read fails.
Source§

fn read_at_unwrap_once(&self, index: usize) -> T

Reads value at usize index, creating a temporary reader. Panics if read fails. For multiple reads, prefer read_at_unwrap() with a reused reader.
Source§

fn get_or_read(&self, index: I, reader: &Reader<'_>) -> Result<Option<T>>

Gets value from any layer (updated, pushed, or storage) using provided reader. Returns None if index is in holes or beyond available data.
Source§

fn get_or_read_once(&self, index: I) -> Result<Option<T>>

Gets value from any layer, creating a temporary reader if needed. For multiple reads, prefer get_or_read() with a reused reader.
Source§

fn get_or_read_at(&self, index: usize, reader: &Reader<'_>) -> Result<Option<T>>

Gets value from any layer at usize index using provided reader. Returns None if index is in holes or beyond available data.
Source§

fn get_or_read_at_once(&self, index: usize) -> Result<Option<T>>

Gets value from any layer at usize index, creating a temporary reader. For multiple reads, prefer get_or_read_at() with a reused reader.
Source§

fn get_or_read_unwrap(&self, index: I, reader: &Reader<'_>) -> T

Gets value from any layer using provided reader. Panics on error.
Source§

fn get_or_read_unwrap_once(&self, index: I) -> T

Gets value from any layer, creating a temporary reader. Panics on error.
Source§

fn get_pushed_or_read(&self, index: I, reader: &Reader<'_>) -> Result<Option<T>>

Gets value from pushed layer or storage using provided reader. Does not check the updated layer.
Source§

fn get_pushed_or_read_once(&self, index: I) -> Result<Option<T>>

Gets value from pushed layer or storage, creating a temporary reader. For multiple reads, prefer get_pushed_or_read() with a reused reader.
Source§

fn get_pushed_or_read_at( &self, index: usize, reader: &Reader<'_>, ) -> Result<Option<T>>

Gets value from pushed layer or storage at usize index using provided reader. Does not check the updated layer.
Source§

fn get_pushed_or_read_at_once(&self, index: usize) -> Result<Option<T>>

Gets value from pushed layer or storage at usize index, creating a temporary reader. For multiple reads, prefer get_pushed_or_read_at() with a reused reader.
Source§

fn get_pushed_at(&self, index: usize, stored_len: usize) -> Option<&T>

Gets value from pushed layer only (no disk reads).
Source§

fn len_(&self) -> usize

Returns the length including both stored and pushed (uncommitted) values. Named len_ to avoid conflict with AnyVec::len.
Source§

fn pushed_len(&self) -> usize

Returns the number of pushed (uncommitted) values.
Source§

fn is_pushed_empty(&self) -> bool

Returns true if there are no pushed (uncommitted) values.
Source§

fn has(&self, index: I) -> bool

Returns true if the index is within the length.
Source§

fn has_at(&self, index: usize) -> bool

Returns true if the usize index is within the length.
Source§

fn push(&mut self, value: T)

Pushes a new value to the end of the vector.
Source§

fn push_if_needed(&mut self, index: I, value: T) -> Result<()>

Pushes a value if the index equals the current length, otherwise does nothing if already exists. Returns an error if the index is too high.
Source§

fn forced_push(&mut self, index: I, value: T, exit: &Exit) -> Result<()>

Pushes a value at the given index, truncating if necessary, and flushes if cache is full.
Source§

fn forced_push_at(&mut self, index: usize, value: T, exit: &Exit) -> Result<()>

Pushes a value at the given usize index, truncating if necessary, and flushes if cache is full.
Source§

fn update(&mut self, index: I, value: T) -> Result<()>

Updates the value at the given index.
Source§

fn update_at(&mut self, index: usize, value: T) -> Result<()>

Updates the value at the given usize index.
Source§

fn update_or_push(&mut self, index: I, value: T) -> Result<()>

Updates the value at the given index if it exists, or pushes it if the index equals length.
Source§

fn get_first_empty_index(&self) -> I

Returns the first empty index (either the first hole or the length).
Source§

fn fill_first_hole_or_push(&mut self, value: T) -> Result<I>

Fills the first hole with the value, or pushes if there are no holes. Returns the index used.
Source§

fn take(&mut self, index: I, reader: &Reader<'_>) -> Result<Option<T>>

Takes (removes and returns) the value at the given index using provided reader.
Source§

fn take_at(&mut self, index: usize, reader: &Reader<'_>) -> Result<Option<T>>

Takes (removes and returns) the value at the given usize index using provided reader.
Source§

fn delete(&mut self, index: I)

Deletes the value at the given index (marks it as a hole).
Source§

fn delete_at(&mut self, index: usize)

Deletes the value at the given usize index (marks it as a hole).
Source§

fn truncate_if_needed(&mut self, index: I) -> Result<()>

Truncates the vector to the given index if the current length exceeds it.
Source§

fn truncate_if_needed_at(&mut self, index: usize) -> Result<()>

Truncates the vector to the given usize index if the current length exceeds it.
Source§

fn truncate_if_needed_with_stamp( &mut self, index: I, stamp: Stamp, ) -> Result<()>

Truncates the vector to the given index if needed, updating the stamp.
Source§

fn clear(&mut self) -> Result<()>

Clears all values from the vector.
Source§

fn reset_unsaved(&mut self)

Resets uncommitted changes (pushed, holes, and updated layers).
Source§

fn validate_computed_version_or_reset(&mut self, version: Version) -> Result<()>

Validates the computed version against the stored version, resetting if they don’t match.
Source§

fn collect_holed(&self) -> Result<Vec<Option<T>>>

Collects all values into a Vec, with None for holes.
Source§

fn collect_holed_range( &self, from: Option<usize>, to: Option<usize>, ) -> Result<Vec<Option<T>>>

Collects values in the given range into a Vec, with None for holes.
Source§

fn is_dirty(&mut self) -> bool

Returns true if there are uncommitted changes (pushed or updated values).
Source§

fn changes_path(&self) -> PathBuf

Returns the path to the changes directory for this vector.
Source§

fn stamped_flush_maybe_with_changes( &mut self, stamp: Stamp, with_changes: bool, ) -> Result<()>

Flushes with the given stamp, optionally saving changes for rollback.
Source§

fn stamped_flush_with_changes(&mut self, stamp: Stamp) -> Result<()>

Flushes with the given stamp, saving changes to enable rollback.
Source§

fn rollback_before(&mut self, stamp: Stamp) -> Result<Stamp>

Rolls back changes to before the given stamp.
Source§

fn rollback(&mut self) -> Result<()>

Rolls back the most recent change set.
Source§

fn deserialize_then_undo_changes(&mut self, bytes: &[u8]) -> Result<()>

Deserializes change data and undoes those changes.
Source§

fn vec_region_name(&self) -> String

Returns the region name for this vector.
Source§

fn vec_region_name_with(name: &str) -> String

Returns the region name for the given vector name. MUST BE in sync with AnyVec::index_to_name
Source§

fn holes_region_name(&self) -> String

Returns the region name for the holes of this vector.
Source§

fn holes_region_name_with(name: &str) -> String

Returns the region name for the holes of the given vector name.
Source§

impl<'a, I, T> IntoIterator for &'a CompressedVec<I, T>

Source§

type Item = T

The type of the elements being iterated over.
Source§

type IntoIter = CompressedVecIterator<'a, I, T>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more

Auto Trait Implementations§

§

impl<I, T> Freeze for CompressedVec<I, T>

§

impl<I, T> !RefUnwindSafe for CompressedVec<I, T>

§

impl<I, T> Send for CompressedVec<I, T>
where I: Send, T: Send,

§

impl<I, T> Sync for CompressedVec<I, T>
where I: Sync, T: Sync,

§

impl<I, T> Unpin for CompressedVec<I, T>
where I: Unpin, T: Unpin,

§

impl<I, T> !UnwindSafe for CompressedVec<I, T>

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<I, T, U> AnyCloneableIterableVec<I, T> for U
where U: 'static + AnyIterableVec<I, T> + Clone,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<I, T, V> CollectableVec<I, T> for V
where V: AnyVec + AnyIterableVec<I, T> + Clone, I: StoredIndex, T: StoredRaw + 'static,

Source§

fn iter_range( &self, from: Option<usize>, to: Option<usize>, ) -> impl Iterator<Item = T>

Returns an iterator over the specified range.
Source§

fn iter_signed_range( &self, from: Option<i64>, to: Option<i64>, ) -> impl Iterator<Item = T>

Returns an iterator over the specified range using signed indices (supports negative indexing).
Source§

fn collect(&self) -> Vec<T>

Collects all values into a Vec.
Source§

fn collect_range(&self, from: Option<usize>, to: Option<usize>) -> Vec<T>

Collects values in the specified range into a Vec.
Source§

fn collect_signed_range(&self, from: Option<i64>, to: Option<i64>) -> Vec<T>

Collects values in the specified range into a Vec using signed indices.
Source§

fn collect_range_json_bytes( &self, from: Option<usize>, to: Option<usize>, ) -> Vec<u8>

Collects values in the specified range as JSON bytes.
Source§

fn collect_range_string( &self, from: Option<usize>, to: Option<usize>, ) -> Vec<String>

Collects values in the specified range as strings.
Source§

fn i64_to_usize_(i: i64, len: usize) -> usize

Converts an i64 index to usize, supporting negative indexing.
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<I, T, U> AnyStoredIterableVec<I, T> for U
where U: 'static + AnyIterableVec<I, T> + AnyStoredVec,

Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,