pub struct Registry<T> { /* private fields */ }
Expand description
A container that can be used for registering values of a given type and retrieving references by handle.
A registry is a centralized container that values can be inserted into and borrowed from. A registry provides several guarantees:
- Arena-based allocated values using an
Arena
(all references are valid for the lifetime of the container). - Runtime-checked immutable and mutable borrow rules.
- Values can be borrowed completely independent of one another.
A single value can be moved into the registry using Registry::register
, and multiple values
can be moved in using Registry::register_extend
.
Implementations§
Source§impl<T> Registry<T>
impl<T> Registry<T>
Sourcepub fn with_capacity(size: usize) -> Self
pub fn with_capacity(size: usize) -> Self
Creates a new registry with the given capacity.
Sourcepub fn register(&self, value: T) -> Handle
pub fn register(&self, value: T) -> Handle
Registers a new value in the arena, returning a handle to that value.
Sourcepub fn register_extend<I>(&self, iterable: I) -> (Handle, Handle)where
I: IntoIterator<Item = T>,
pub fn register_extend<I>(&self, iterable: I) -> (Handle, Handle)where
I: IntoIterator<Item = T>,
Registers the contents of an iterator in the registry.
Returns a numeric range of handles [a, b)
, where a
is the handle of the first element
inserted and b
is the handle after the last element inserted.
Sourcepub fn reserve(&self, additional: usize)
pub fn reserve(&self, additional: usize)
Ensures there is enough continuous space for at least additional
values.
Sourcepub fn into_vec(self) -> Vec<T>
pub fn into_vec(self) -> Vec<T>
Converts the Registry<T>
into a Vec<T>
.
Items will maintain their handle as their vector index.
Sourcepub fn iter(
&self,
) -> impl Iterator<Item = Result<ElementRef<'_, T>, BorrowError>>
pub fn iter( &self, ) -> impl Iterator<Item = Result<ElementRef<'_, T>, BorrowError>>
Returns an iterator that provides immutable access to all elements in the registry, in order of registration.
Sourcepub fn iter_mut(
&mut self,
) -> impl Iterator<Item = Result<ElementRefMut<'_, T>, BorrowError>>
pub fn iter_mut( &mut self, ) -> impl Iterator<Item = Result<ElementRefMut<'_, T>, BorrowError>>
Returns an iterator that provides mutable access to all elements in the registry, in order of registration.
Sourcepub fn get_unchecked(&self, handle: Handle) -> ElementRef<'_, T>
pub fn get_unchecked(&self, handle: Handle) -> ElementRef<'_, T>
Returns a reference to a value previously registered in the registry.
Panics if there is a borrow error.
Sourcepub fn get(&self, handle: Handle) -> Result<ElementRef<'_, T>, BorrowError>
pub fn get(&self, handle: Handle) -> Result<ElementRef<'_, T>, BorrowError>
Tries to get a reference to a value previously registered in the registry.
Sourcepub fn get_mut_unchecked(&self, handle: Handle) -> ElementRefMut<'_, T>
pub fn get_mut_unchecked(&self, handle: Handle) -> ElementRefMut<'_, T>
Returns a mutable reference to a value previously registered in the registry.
Panics if there is a borrow error.
Sourcepub fn get_mut(
&self,
handle: Handle,
) -> Result<ElementRefMut<'_, T>, BorrowError>
pub fn get_mut( &self, handle: Handle, ) -> Result<ElementRefMut<'_, T>, BorrowError>
Tries to get a mutable reference to a value previously registered in the registry.
Sourcepub fn safe_to_drop(&mut self) -> bool
pub fn safe_to_drop(&mut self) -> bool
Checks if the registry is safe to drop.
A registry is safe to drop if all elements are not borrowed. This check is not thread safe.