spirt

Struct EntityDefs

source
pub struct EntityDefs<E: Entity> {
    complete_chunk_start_to_flattened_base: FxHashMap<E, usize>,
    incomplete_chunk_start_and_flattened_base: Option<(E, usize)>,
    flattened: Vec<E::Def>,
}
Expand description

Collection holding the actual definitions for Context-allocated entities.

By design there is no way to iterate the contents of an EntityDefs, or generate entity indices without defining the entity in an EntityDefs.

Fields§

§complete_chunk_start_to_flattened_base: FxHashMap<E, usize>

Entities are grouped into chunks, with per-entity-type chunk sizes (powers of 2) specified via entities! below. This allows different EntityDefss to independently define more entities, without losing compactness (until a whole chunk is filled).

§incomplete_chunk_start_and_flattened_base: Option<(E, usize)>

Similar to a single entry in complete_chunk_start_to_flattened_base, but kept outside of the map for efficiency. Also, this is the only chunk that doesn’t have its full size already (and therefore allows defining more entities into it, without allocating new chunks).

§flattened: Vec<E::Def>

All chunks’ definitions are flattened into one contiguous Vec, where the start of each chunk’s definitions in flattened is indicated by either complete_chunk_start_to_flattened_base (for completed chunks) or incomplete_chunk_start_and_flattened_base.

Implementations§

source§

impl<E: Entity> EntityDefs<E>

source

pub fn new() -> Self

source

pub fn define(&mut self, cx: &Context, def: E::Def) -> E

source

fn entity_to_flattened(&self, entity: E) -> Option<usize>

Trait Implementations§

source§

impl<E: Clone + Entity> Clone for EntityDefs<E>
where E::Def: Clone,

source§

fn clone(&self) -> EntityDefs<E>

Returns a copy 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<E: Entity> Default for EntityDefs<E>

source§

fn default() -> Self

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

impl<E: Entity> Index<E> for EntityDefs<E>

source§

type Output = <E as Entity>::Def

The returned type after indexing.
source§

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

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

impl<E: Entity> IndexMut<E> for EntityDefs<E>

source§

fn index_mut(&mut self, entity: E) -> &mut Self::Output

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

Auto Trait Implementations§

§

impl<E> Freeze for EntityDefs<E>
where E: Freeze,

§

impl<E> RefUnwindSafe for EntityDefs<E>

§

impl<E> Send for EntityDefs<E>
where E: Send, <E as Entity>::Def: Send,

§

impl<E> Sync for EntityDefs<E>
where E: Sync, <E as Entity>::Def: Sync,

§

impl<E> Unpin for EntityDefs<E>
where E: Unpin, <E as Entity>::Def: Unpin,

§

impl<E> UnwindSafe for EntityDefs<E>
where E: UnwindSafe, <E as Entity>::Def: 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, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
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.