Struct KeyedRegistry

Source
pub struct KeyedRegistry<K, V> { /* private fields */ }
Expand description

A container that can be used for registering values of a given type and retrieving references by a caller-specified key.

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 KeyedRegistry::register, and multiple values can be moved in using KeyedRegistry::register_extend.

Implementations§

Source§

impl<K, V> KeyedRegistry<K, V>
where K: Key,

Source

pub fn new() -> Self

Creates a new registry.

Source

pub fn with_capacity(size: usize) -> Self

Creates a new registry with the given capacity.

Source

pub fn is_empty(&self) -> bool

Checks if the registry is empty.

Source

pub fn len(&self) -> usize

Returns the number of elements owned by the registry.

Source

pub fn register(&self, key: K, value: V) -> bool

Registers a new value in the arena.

Returns whether or not the value was registered in the registry. If there is already a value associated with the given key, no insertion occurs.

Source

pub fn register_extend<I>(&self, iterable: I)
where I: IntoIterator<Item = (K, V)>,

Registers the contents of an iterator in the registry.

Source

pub fn reserve(&self, additional: usize)

Ensures there is enough continuous space for at least additional values.

Source

pub fn into_vec(self) -> Vec<V>

Converts the KeyedRegistry<K, V> into a Vec<V>.

Keys are completely lost.

Source

pub fn iter( &self, ) -> impl Iterator<Item = (&K, Result<ElementRef<'_, V>, BorrowError>)>

Returns an iterator that provides immutable access to all key-value pairs in the registry.

Source

pub fn iter_mut( &mut self, ) -> impl Iterator<Item = (&K, Result<ElementRefMut<'_, V>, BorrowError>)>

Returns an iterator that provides mutable access to all key-value pairs in the registry.

Source

pub fn keys(&self) -> impl Iterator<Item = &K>

Returns an iterator over all keys in the registry.

Source

pub fn values( &self, ) -> impl Iterator<Item = Result<ElementRef<'_, V>, BorrowError>>

Returns an iterator that provides immutable access to all elements in the registry.

Source

pub fn values_mut( &mut self, ) -> impl Iterator<Item = Result<ElementRefMut<'_, V>, BorrowError>>

Returns an iterator that provides mutable access to all elements in the registry.

Source

pub fn get_unchecked<R>(&self, key: &R) -> ElementRef<'_, V>
where K: Borrow<R>, R: Key + ?Sized,

Returns a reference to a value previously registered in the registry.

Panics if there is a borrow error.

Source

pub fn get<R>(&self, key: &R) -> Result<ElementRef<'_, V>, BorrowError>
where K: Borrow<R>, R: Key + ?Sized,

Tries to get a reference to a value previously registered in the registry.

Source

pub fn get_mut_unchecked<R>(&self, key: &R) -> ElementRefMut<'_, V>
where K: Borrow<R>, R: Key + ?Sized,

Returns a mutable reference to a value previously registered in the registry.

Panics if there is a borrow error.

Source

pub fn get_mut<R>(&self, key: &R) -> Result<ElementRefMut<'_, V>, BorrowError>
where K: Borrow<R>, R: Key + ?Sized,

Tries to get a mutable reference to a value previously registered in the registry.

Source

pub fn contains_key<R>(&self, key: &R) -> bool
where K: Borrow<R>, R: Key + ?Sized,

Checks if the registry contains an item associated with the given key.

Source

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.

Trait Implementations§

Source§

impl<K, V> Default for KeyedRegistry<K, V>
where K: Key,

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<K, V> !Freeze for KeyedRegistry<K, V>

§

impl<K, V> !RefUnwindSafe for KeyedRegistry<K, V>

§

impl<K, V> Send for KeyedRegistry<K, V>
where K: Send, V: Send,

§

impl<K, V> !Sync for KeyedRegistry<K, V>

§

impl<K, V> Unpin for KeyedRegistry<K, V>
where K: Unpin, V: Unpin,

§

impl<K, V> !UnwindSafe for KeyedRegistry<K, V>

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.