pub struct ContiguousVectors { /* private fields */ }Expand description
Contiguous memory layout for vectors (cache-friendly).
Stores all vectors in a single contiguous buffer to maximize cache locality and enable SIMD prefetching.
§Memory Layout
[v0_d0, v0_d1, ..., v0_dn, v1_d0, v1_d1, ..., v1_dn, ...]§Safety Invariants (EPIC-032/US-002)
datais always non-null (enforced byNonNull)datapoints to memory allocated with 64-byte alignmentcapacity * dimension * sizeof(f32)bytes are always allocatedcount <= capacityis always maintained
Implementations§
Source§impl ContiguousVectors
impl ContiguousVectors
Sourcepub fn reorder(&mut self, new_order: &[usize]) -> Result<()>
pub fn reorder(&mut self, new_order: &[usize]) -> Result<()>
Reorders vectors according to the given permutation.
new_order[i] contains the old index of the vector that should occupy
position i after reordering. The permutation must have exactly
self.len() elements and every index must be < self.len().
§Errors
Returns an error if:
new_order.len() != self.len()- Any index in
new_orderis out of bounds - The new buffer allocation fails
Source§impl ContiguousVectors
impl ContiguousVectors
Sourcepub fn ensure_capacity(&mut self, required_capacity: usize) -> Result<()>
pub fn ensure_capacity(&mut self, required_capacity: usize) -> Result<()>
Ensures the storage has capacity for at least required_capacity vectors.
§Errors
Returns Error::AllocationFailed if reallocation fails.
Sourcepub fn reserve_additional(&mut self, additional: usize) -> Result<()>
pub fn reserve_additional(&mut self, additional: usize) -> Result<()>
Pre-allocates capacity for additional more vectors beyond the current length.
Analogous to Vec::reserve: ensures the buffer can hold
self.len() + additional vectors without reallocating. No-op if
sufficient capacity already exists.
Call before a batch push to guarantee push_batch won’t resize.
§Errors
Returns Error::AllocationFailed if reallocation fails.
Source§impl ContiguousVectors
impl ContiguousVectors
Sourcepub fn new(dimension: usize, capacity: usize) -> Result<Self>
pub fn new(dimension: usize, capacity: usize) -> Result<Self>
Creates a new ContiguousVectors with the given dimension and initial capacity.
§Arguments
dimension- Vector dimension (must be > 0)capacity- Initial capacity (number of vectors)
§Errors
Returns Error::InvalidDimension if dimension is 0 or exceeds
MAX_DIMENSION.
Returns Error::AllocationFailed if memory allocation fails or exceeds
the AllocGuard ceiling.
Sourcepub fn as_flat_slice(&self) -> &[f32]
pub fn as_flat_slice(&self) -> &[f32]
Returns the raw contiguous buffer as a flat slice.
The slice contains all vectors packed sequentially:
[v0_d0, v0_d1, ..., v1_d0, ...].
Useful for GPU upload without copying.
Sourcepub fn gather_flat(&self, indices: &[usize]) -> Vec<f32>
pub fn gather_flat(&self, indices: &[usize]) -> Vec<f32>
Gathers vectors at the specified indices into a contiguous flat buffer.
Returns a new Vec<f32> containing the selected vectors packed sequentially.
Useful for GPU upload when only a subset of vectors is needed (e.g., reranking).
§Important
Out-of-bounds indices are silently skipped — the result may contain fewer
vectors than indices.len(). Callers must validate
result.len() == indices.len() * dimension before using the result in
positional operations (e.g., zip with an ID map), otherwise scores
will be misattributed to wrong IDs.
Sourcepub const fn memory_bytes(&self) -> usize
pub const fn memory_bytes(&self) -> usize
Returns total memory usage in bytes.
Saturates instead of overflowing; capacity * dimension * 4 was validated
to fit in usize at allocation time, so saturation is unreachable for a
live buffer and exists purely as a defensive backstop (#899).
Sourcepub fn insert_at(&mut self, index: usize, vector: &[f32]) -> Result<()>
pub fn insert_at(&mut self, index: usize, vector: &[f32]) -> Result<()>
Inserts a vector at a specific index.
Automatically grows capacity if needed. Note: This allows sparse population. Uninitialized slots contain undefined data (or 0.0 if alloc gave zeroed memory).
§Errors
Returns crate::error::Error::DimensionMismatch if vector.len() != self.dimension.
Returns Error::AllocationFailed if capacity growth fails.
Sourcepub fn push(&mut self, vector: &[f32]) -> Result<()>
pub fn push(&mut self, vector: &[f32]) -> Result<()>
Adds a vector to the storage.
§Errors
Returns crate::error::Error::DimensionMismatch if vector.len() != self.dimension.
Returns Error::AllocationFailed if capacity growth fails.
Sourcepub fn push_batch(&mut self, vectors: &[&[f32]]) -> Result<usize>
pub fn push_batch(&mut self, vectors: &[&[f32]]) -> Result<usize>
Adds multiple vectors in batch (optimized).
§Arguments
vectors- Iterator of vectors to add
§Returns
Number of vectors added.
§Errors
Returns crate::error::Error::DimensionMismatch or Error::AllocationFailed on the
first vector that fails. Vectors added before the failure remain in storage.
Sourcepub unsafe fn get_unchecked(&self, index: usize) -> &[f32]
pub unsafe fn get_unchecked(&self, index: usize) -> &[f32]
Trait Implementations§
Source§impl Debug for ContiguousVectors
impl Debug for ContiguousVectors
Source§impl Drop for ContiguousVectors
impl Drop for ContiguousVectors
impl Send for ContiguousVectors
impl Sync for ContiguousVectors
Auto Trait Implementations§
impl Freeze for ContiguousVectors
impl RefUnwindSafe for ContiguousVectors
impl Unpin for ContiguousVectors
impl UnsafeUnpin for ContiguousVectors
impl UnwindSafe for ContiguousVectors
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);