[][src]Type Definition specs::prelude::WriteStorage

type WriteStorage<'a, T> = Storage<'a, T, FetchMut<'a, MaskedStorage<T>>>;

A storage with read and write access.

Additionally to what ReadStorage can do a storage with mutable access allows:

Aliasing

It is strictly disallowed to fetch both a ReadStorage and a WriteStorage of the same component. Because Specs uses interior mutability for its resources, we can't check this at compile time. If you try to do this, you will get a panic.

It is also disallowed to fetch multiple WriteStorages for the same component.

Retrieve components mutably

This works just like Storage::get, but returns a mutable reference:

let entity = world.create_entity()
    .with(Pos(2.0))
    .build();

assert_eq!(pos_storage.get_mut(entity), Some(&mut Pos(2.0)));
if let Some(pos) = pos_storage.get_mut(entity) {
    *pos = Pos(4.5);
}

assert_eq!(pos_storage.get(entity), Some(&Pos(4.5)));

Inserting and removing components

You can insert components using Storage::insert and remove them again with Storage::remove.

let entity = world.create_entity()
    .with(Pos(0.1))
    .build();

if let Ok(Some(p)) = pos_storage.insert(entity, Pos(4.0)) {
    println!("Overwrote {:?} with a new position", p);
}

There's also an Entry-API similar to the one provided by std::collections::HashMap.

Trait Implementations

impl<'a, T> GenericReadStorage for WriteStorage<'a, T> where
    T: Component
[src]

type Component = T

The component type of the storage

impl<'a: 'b, 'b, T> GenericReadStorage for &'b WriteStorage<'a, T> where
    T: Component
[src]

type Component = T

The component type of the storage

impl<'a, T> GenericWriteStorage for WriteStorage<'a, T> where
    T: Component
[src]

type Component = T

The component type of the storage

impl<'a: 'b, 'b, T> GenericWriteStorage for &'b mut WriteStorage<'a, T> where
    T: Component
[src]

type Component = T

The component type of the storage

impl<'a, T> SystemData<'a> for WriteStorage<'a, T> where
    T: Component
[src]