Struct Arena

Source
pub struct Arena<Idx, T> { /* private fields */ }
Expand description

An arena allocator with a given index and entity type.

For performance reasons the arena cannot deallocate single entities.

Implementations§

Source§

impl<Idx, T> Arena<Idx, T>

Source

pub fn new() -> Self

Creates a new empty entity arena.

Source

pub fn len(&self) -> usize

Returns the allocated number of entities.

Source

pub fn is_empty(&self) -> bool

Returns true if the arena has not yet allocated entities.

Source

pub fn clear(&mut self)

Clears all entities from the arena.

Source

pub fn iter(&self) -> Iter<'_, Idx, T>

Returns an iterator over the shared reference of the arena entities.

Source

pub fn iter_mut(&mut self) -> IterMut<'_, Idx, T>

Returns an iterator over the exclusive reference of the arena entities.

Source§

impl<Idx, T> Arena<Idx, T>
where Idx: ArenaIndex,

Source

pub fn alloc(&mut self, entity: T) -> Idx

Allocates a new entity and returns its index.

Source

pub fn get(&self, index: Idx) -> Option<&T>

Returns a shared reference to the entity at the given index if any.

Source

pub fn get_mut(&mut self, index: Idx) -> Option<&mut T>

Returns an exclusive reference to the entity at the given index if any.

Source

pub fn get_pair_mut(&mut self, fst: Idx, snd: Idx) -> Option<(&mut T, &mut T)>

Returns an exclusive reference to the pair of entities at the given indices if any.

Returns None if fst and snd refer to the same entity. Returns None if either fst or snd is invalid for this Arena.

Trait Implementations§

Source§

impl<Idx: Debug, T: Debug> Debug for Arena<Idx, T>

Source§

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

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

impl<Idx, T> Default for Arena<Idx, T>

Source§

fn default() -> Self

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

impl<Idx, T> FromIterator<T> for Arena<Idx, T>

Source§

fn from_iter<I>(iter: I) -> Self
where I: IntoIterator<Item = T>,

Creates a value from an iterator. Read more
Source§

impl<Idx, T> Index<Idx> for Arena<Idx, T>
where Idx: ArenaIndex,

Source§

type Output = T

The returned type after indexing.
Source§

fn index(&self, index: Idx) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<Idx, T> IndexMut<Idx> for Arena<Idx, T>
where Idx: ArenaIndex,

Source§

fn index_mut(&mut self, index: Idx) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<'a, Idx, T> IntoIterator for &'a Arena<Idx, T>
where Idx: ArenaIndex,

Source§

type Item = (Idx, &'a T)

The type of the elements being iterated over.
Source§

type IntoIter = Iter<'a, Idx, 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, Idx, T> IntoIterator for &'a mut Arena<Idx, T>
where Idx: ArenaIndex,

Source§

type Item = (Idx, &'a mut T)

The type of the elements being iterated over.
Source§

type IntoIter = IterMut<'a, Idx, 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<Idx, T> PartialEq for Arena<Idx, T>
where T: PartialEq,

Source§

fn eq(&self, other: &Self) -> 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<Idx, T> Eq for Arena<Idx, T>
where T: Eq,

Source§

impl<Idx, T> Send for Arena<Idx, T>
where T: Send,

Arena does not store Idx therefore it is Send without its bound.

Source§

impl<Idx, T> Sync for Arena<Idx, T>
where T: Send,

Arena does not store Idx therefore it is Sync without its bound.

Auto Trait Implementations§

§

impl<Idx, T> Freeze for Arena<Idx, T>

§

impl<Idx, T> RefUnwindSafe for Arena<Idx, T>

§

impl<Idx, T> Unpin for Arena<Idx, T>
where Idx: Unpin, T: Unpin,

§

impl<Idx, T> UnwindSafe for Arena<Idx, T>
where Idx: UnwindSafe, 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.