Struct AppendOnlyVec
pub struct AppendOnlyVec<T, const AMOUNT_OF_BINS: usize = 32, const BIN_OFFSET: u32 = 3> { /* private fields */ }Expand description
Append only vec of items T.
This vec will never re-allocate and never remove items. This means that as long as this vec is around, we can have valid references to all the data it stores. This also means that we can add items to the vec without having a mutable reference to it.
AMOUNT_OF_BINS is total amount of item bins (=arrays). Each bin has double the capacity then the one before, so even with a low number here, we should be able to store a huge amount of items.
BIN_OFFSET calculates the offset of the first bin. Effectively this mean our first bin will have 2^BIN_OFFSET size.
Implementations§
§impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
pub fn new() -> AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
pub fn new() -> AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
Create a new AppendOnlyVec of T items
use rama_utils::collections::AppendOnlyVec;
// This should fail because this overflow INITIAL_BIN_SIZE
let _ = AppendOnlyVec::<usize, 300, 100>::new();use rama_utils::collections::AppendOnlyVec;
// This should fail because the total size exceeds isize::MAX
let _ = AppendOnlyVec::<u64, 60, 10>::new();pub fn push(&self, element: T) -> usize
pub fn get(&self, idx: usize) -> Option<&T>
pub fn is_empty(&self) -> bool
pub fn len(&self) -> usize
pub const fn capacity() -> usize
pub const fn capacity() -> usize
Returns the maximum number of elements this configuration can hold. Total capacity = initial_bin_size * (2^AMOUNT_OF_BINS - 1)
pub fn iter(&self) -> Iter<'_, T, AMOUNT_OF_BINS, BIN_OFFSET> ⓘ
pub fn iter(&self) -> Iter<'_, T, AMOUNT_OF_BINS, BIN_OFFSET> ⓘ
Returns an iterator over the elements currently in the vector. The iterator snapshots the length at creation time.
pub unsafe fn get_unchecked(&self, idx: usize) -> &T
pub unsafe fn get_unchecked(&self, idx: usize) -> &T
Trait Implementations§
§impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Debug for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>where
T: Debug,
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Debug for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>where
T: Debug,
§impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Default for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Default for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
§fn default() -> AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
fn default() -> AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
§impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Drop for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Drop for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
§impl<T, const BINS: usize, const OFFSET: u32> Extend<T> for &AppendOnlyVec<T, BINS, OFFSET>
impl<T, const BINS: usize, const OFFSET: u32> Extend<T> for &AppendOnlyVec<T, BINS, OFFSET>
§fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = T>,
fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = T>,
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)§impl<T, const BINS: usize, const OFFSET: u32> Extend<T> for AppendOnlyVec<T, BINS, OFFSET>
impl<T, const BINS: usize, const OFFSET: u32> Extend<T> for AppendOnlyVec<T, BINS, OFFSET>
§fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = T>,
fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = T>,
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)§impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> FromIterator<T> for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> FromIterator<T> for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
§fn from_iter<I>(iter: I) -> AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>where
I: IntoIterator<Item = T>,
fn from_iter<I>(iter: I) -> AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>where
I: IntoIterator<Item = T>,
§impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Index<usize> for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Index<usize> for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
§impl<'a, T, const BINS: usize, const OFFSET: u32> IntoIterator for &'a AppendOnlyVec<T, BINS, OFFSET>
impl<'a, T, const BINS: usize, const OFFSET: u32> IntoIterator for &'a AppendOnlyVec<T, BINS, OFFSET>
§impl<T, const BINS: usize, const OFFSET: u32> IntoIterator for AppendOnlyVec<T, BINS, OFFSET>
impl<T, const BINS: usize, const OFFSET: u32> IntoIterator for AppendOnlyVec<T, BINS, OFFSET>
§type IntoIter = IntoIterOwned<T, BINS, OFFSET>
type IntoIter = IntoIterOwned<T, BINS, OFFSET>
§fn into_iter(self) -> <AppendOnlyVec<T, BINS, OFFSET> as IntoIterator>::IntoIter
fn into_iter(self) -> <AppendOnlyVec<T, BINS, OFFSET> as IntoIterator>::IntoIter
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Send for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>where
T: Send,
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Sync for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
Auto Trait Implementations§
impl<T, const AMOUNT_OF_BINS: usize = 32, const BIN_OFFSET: u32 = 3> !Freeze for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> RefUnwindSafe for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Unpin for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>
impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> UnwindSafe for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>where
T: RefUnwindSafe,
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§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 more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more