HandledVec

Struct HandledVec 

Source
pub struct HandledVec<T>
where T: Handled,
{ /* private fields */ }
Expand description

A collection of Handled instances with automatically-generated handles, supporting efficient handle-to-instance lookup.

This data structure accumulates instances of some Handled type T, while automatically generating handles to each of the contained instances, based on their order of insertion to the vector. It supports efficient handle-to-instance lookup.

This usually serves for generating handles to instances of complex data types.

§Example

struct LinkedListNode {
    num: u32,
    next: Option<Handle<LinkedListNode>>,
}
impl Handled for LinkedListNode { type HandleCoreType = u8; }

let mut nodes = HandledVec::new();
let tail_handle = nodes.insert(LinkedListNode { num: 1337, next: None });
let head_handle = nodes.insert(LinkedListNode { num: 42, next: Some(tail_handle) });

Implementations§

Source§

impl<T> HandledVec<T>
where T: Handled,

Source

pub fn new() -> Self

Creates a new, empty, HandledVec.

Source

pub fn insert(&mut self, item: T) -> Handle<T>

Adds a new item into the collection, and returns its newly generated handle.

Source

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

Lists the handles to all available items in the collection.

Source

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

Get an iterator of references to the items in the collection.

Source

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

Get an iterator of mutable references to the items in the collection.

Trait Implementations§

Source§

impl<T> Clone for HandledVec<T>
where T: Handled + Clone,

Source§

fn clone(&self) -> HandledVec<T>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T> Debug for HandledVec<T>
where T: Handled + Debug,

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'a, T> FromIterator<T> for HandledVec<T>
where T: Handled,

Source§

fn from_iter<U: IntoIterator<Item = T>>(iter: U) -> Self

Creates a value from an iterator. Read more
Source§

impl<T> Index<Handle<T>> for HandledVec<T>
where T: Handled,

Source§

fn index(&self, index: Handle<T>) -> &Self::Output

Get a reference to the collection’s item that’s associated with the given handle.

Source§

type Output = T

The returned type after indexing.
Source§

impl<T> IndexMut<Handle<T>> for HandledVec<T>
where T: Handled,

Source§

fn index_mut(&mut self, index: Handle<T>) -> &mut Self::Output

Get a mutable reference to the collection’s item that’s associated with the given handle.

Source§

impl<'a, T> IntoIterator for &'a HandledVec<T>
where T: Handled,

Source§

type Item = &'a T

The type of the elements being iterated over.
Source§

type IntoIter = Iter<'a, T>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<'a, T> IntoIterator for &'a mut HandledVec<T>
where T: Handled,

Source§

type Item = &'a mut T

The type of the elements being iterated over.
Source§

type IntoIter = IterMut<'a, T>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<T> PartialEq for HandledVec<T>
where T: Handled + PartialEq,

Source§

fn eq(&self, other: &HandledVec<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T> Eq for HandledVec<T>
where T: Handled + Eq,

Source§

impl<T> StructuralPartialEq for HandledVec<T>
where T: Handled,

Auto Trait Implementations§

§

impl<T> Freeze for HandledVec<T>

§

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

§

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

§

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

§

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

§

impl<T> UnwindSafe for HandledVec<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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.