Struct GenerationalBuffer

Source
pub struct GenerationalBuffer<T> { /* private fields */ }
Expand description

A generic append-only circular buffer with generational IDs

Inserting returns a Handle that can be used to access the value later, checking the item hasn’t been replaced in the meantime.

Items can’t be individually removed, but the entire buffer can be cleared, which invalidates all existing handles.

Implementations§

Source§

impl<T> GenerationalBuffer<T>

Source

pub fn new(max_capacity: usize) -> Self

Creates a new generational buffer with the specified capacity

Source

pub fn capacity(&self) -> usize

Returns the maximum capacity of the buffer

Source

pub fn len(&self) -> usize

Returns the current number of entries in the buffer

Source

pub fn is_empty(&self) -> bool

Returns true if the buffer is empty

Source

pub fn clear(&mut self)

Clear the buffer, removing all entries and rendering all existing handles invalid.

Source

pub fn is_full(&self) -> bool

Returns true if the buffer has reached its maximum capacity

Source

pub fn push(&mut self, value: T) -> Handle<T>

Inserts a value into the buffer and returns a handle to it.

This removes the oldest entry if the buffer is full.

Source

pub fn get(&self, handle: Handle<T>) -> Option<&T>

Gets a reference to the value associated with the handle

Source

pub fn get_mut(&mut self, handle: Handle<T>) -> Option<&mut T>

Gets a mutable reference to the value associated with the handle

Source

pub fn is_valid(&self, handle: Handle<T>) -> bool

Checks if a handle is still valid (points to existing data)

Source

pub fn iter(&self) -> impl Iterator<Item = (Handle<T>, &T)>

Returns an iterator over all entries with their handles, in no particular order

Source

pub fn values(&self) -> impl Iterator<Item = &T>

Returns an iterator over all entries, in no particular order

Source

pub fn handles(&self) -> impl Iterator<Item = Handle<T>> + '_

Returns an iterator over all valid handles, in no particular order

Trait Implementations§

Source§

impl<T: Debug> Debug for GenerationalBuffer<T>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> Freeze for GenerationalBuffer<T>

§

impl<T> RefUnwindSafe for GenerationalBuffer<T>
where T: RefUnwindSafe,

§

impl<T> Send for GenerationalBuffer<T>
where T: Send,

§

impl<T> Sync for GenerationalBuffer<T>
where T: Sync,

§

impl<T> Unpin for GenerationalBuffer<T>
where T: Unpin,

§

impl<T> UnwindSafe for GenerationalBuffer<T>
where T: UnwindSafe,

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<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> 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, 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.