Struct specs::Storage
[−]
[src]
pub struct Storage<'e, T, D> { /* fields omitted */ }
A wrapper around the masked storage and the generations vector.
Can be used for safe lookup of components, insertions and removes.
This is what World::read/write
fetches for the user.
Methods
impl<'e, T, D> Storage<'e, T, D> where
T: Component,
D: Deref<Target = MaskedStorage<T>>,
[src]
T: Component,
D: Deref<Target = MaskedStorage<T>>,
pub fn check(&self) -> CheckStorage<'e, T, D>
[src]
Returns a struct that can iterate over the entities that have it but does not return the contents of the storage.
Useful if you want to check if an entity has a component and then possibly get the component later on in the loop.
pub fn get_unchecked<'a>(&'a self, entry: &'a Entry<'a, 'e, T, D>) -> &'a T
[src]
Reads the data associated with the entry.
Entry
s are returned from a CheckStorage
to remove unnecessary checks.
Panics
Panics if the entry was retrieved from another storage.
impl<'e, T, D> Storage<'e, T, D> where
T: Component,
D: DerefMut<Target = MaskedStorage<T>>,
[src]
T: Component,
D: DerefMut<Target = MaskedStorage<T>>,
pub fn get_mut_unchecked<'a>(
&'a mut self,
entry: &'a mut Entry<'a, 'e, T, D>
) -> &'a mut T
[src]
&'a mut self,
entry: &'a mut Entry<'a, 'e, T, D>
) -> &'a mut T
Tries to mutate the data associated with an entry.
Entry
s are returned from a CheckStorage
to remove unnecessary checks.
impl<'e, T, D> Storage<'e, T, D> where
T: Component + Deserialize<'e>,
D: DerefMut<Target = MaskedStorage<T>>,
[src]
T: Component + Deserialize<'e>,
D: DerefMut<Target = MaskedStorage<T>>,
pub fn merge<'a>(
&'a mut self,
entities: &'a [Entity],
packed: PackedData<T>
) -> Result<(), MergeError>
[src]
&'a mut self,
entities: &'a [Entity],
packed: PackedData<T>
) -> Result<(), MergeError>
Merges a list of components into the storage.
The list of entities will be used as the base for the offsets of the packed data.
e.g.
rust,ignore let list = vec![Entity(0, 1), Entity(1, 1), Entity(2, 1)]; let packed = PackedData { offsets: [0, 2], components: [ ... ] }; storage.merge(&list, packed);
Would merge the components at offset 0 and 2, which would be Entity(0, 1)
and
Entity(2, 1)
while ignoring
Entity(1, 1)
.
Note:
The entity list should be at least the same size as the packed data. To make sure,
you can call packed.pair_truncate(&entities)
.
If the entity list is larger than the packed data then those entities are ignored.
Packed data should also be sorted in ascending order of offsets. If this is deserialized from data received from serializing a storage it will be in ascending order.
impl<'e, T, D> Storage<'e, T, D>
[src]
pub fn new(entities: Fetch<'e, EntitiesRes>, data: D) -> Storage<'e, T, D>
[src]
Create a new Storage
impl<'e, T, D> Storage<'e, T, D> where
T: Component,
D: Deref<Target = MaskedStorage<T>>,
[src]
T: Component,
D: Deref<Target = MaskedStorage<T>>,
impl<'e, T, D> Storage<'e, T, D> where
T: Component,
D: DerefMut<Target = MaskedStorage<T>>,
[src]
T: Component,
D: DerefMut<Target = MaskedStorage<T>>,
pub fn get_mut(&mut self, e: Entity) -> Option<&mut T>
[src]
Tries to mutate the data associated with an Entity
.
pub fn insert(&mut self, e: Entity, v: T) -> InsertResult<T>
[src]
Inserts new data for a given Entity
.
Returns the result of the operation as a InsertResult<T>
pub fn remove(&mut self, e: Entity) -> Option<T>
[src]
Removes the data associated with an Entity
.
pub fn clear(&mut self)
[src]
Clears the contents of the storage.
Trait Implementations
impl<'e, T, D> Serialize for Storage<'e, T, D> where
T: Component + Serialize,
D: Deref<Target = MaskedStorage<T>>,
[src]
T: Component + Serialize,
D: Deref<Target = MaskedStorage<T>>,
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>
[src]
Serialize this value into the given Serde serializer. Read more
impl<'a, T: Component, D> DistinctStorage for Storage<'a, T, D> where
T::Storage: DistinctStorage,
[src]
T::Storage: DistinctStorage,
impl<'a, 'e, T, D> Join for &'a Storage<'e, T, D> where
T: Component,
D: Deref<Target = MaskedStorage<T>>,
[src]
T: Component,
D: Deref<Target = MaskedStorage<T>>,
type Type = &'a T
Type of joined components.
type Value = &'a T::Storage
Type of joined storages.
type Mask = &'a BitSet
Type of joined bit mask.
fn open(self) -> (Self::Mask, Self::Value)
[src]
Open this join by returning the mask and the storages.
unsafe fn get(v: &mut Self::Value, i: Index) -> &'a T
[src]
Get a joined component value by a given index.
fn join(self) -> JoinIter<Self> where
Self: Sized,
[src]
Self: Sized,
Create a joined iterator over the contents.
impl<'a, 'e, T, D> Not for &'a Storage<'e, T, D> where
T: Component,
D: Deref<Target = MaskedStorage<T>>,
[src]
T: Component,
D: Deref<Target = MaskedStorage<T>>,
type Output = AntiStorage<'a>
The resulting type after applying the !
operator.
fn not(self) -> Self::Output
[src]
Performs the unary !
operation.
impl<'a, 'e, T, D> ParJoin for &'a Storage<'e, T, D> where
T: Component,
D: Deref<Target = MaskedStorage<T>>,
T::Storage: Sync,
[src]
T: Component,
D: Deref<Target = MaskedStorage<T>>,
T::Storage: Sync,
fn par_join(self) -> JoinParIter<Self> where
Self: Sized,
[src]
Self: Sized,
Create a joined parallel iterator over the contents.
impl<'a, 'e, T, D> Join for &'a mut Storage<'e, T, D> where
T: Component,
D: DerefMut<Target = MaskedStorage<T>>,
[src]
T: Component,
D: DerefMut<Target = MaskedStorage<T>>,
type Type = &'a mut T
Type of joined components.
type Value = &'a mut T::Storage
Type of joined storages.
type Mask = &'a BitSet
Type of joined bit mask.
fn open(self) -> (Self::Mask, Self::Value)
[src]
Open this join by returning the mask and the storages.
unsafe fn get(v: &mut Self::Value, i: Index) -> &'a mut T
[src]
Get a joined component value by a given index.
fn join(self) -> JoinIter<Self> where
Self: Sized,
[src]
Self: Sized,
Create a joined iterator over the contents.
impl<'a, 'e, T, D> ParJoin for &'a mut Storage<'e, T, D> where
T: Component,
D: DerefMut<Target = MaskedStorage<T>>,
T::Storage: Sync + DistinctStorage,
[src]
T: Component,
D: DerefMut<Target = MaskedStorage<T>>,
T::Storage: Sync + DistinctStorage,
fn par_join(self) -> JoinParIter<Self> where
Self: Sized,
[src]
Self: Sized,
Create a joined parallel iterator over the contents.