pub trait IntoFastIter {
    type IntoIter: Iterator;
    type IntoParIter;

    fn fast_iter(self) -> Self::IntoIter;
    fn fast_iter_by<D>(self) -> Self::IntoIter
    where
        D: 'static
; fn fast_par_iter(self) -> Self::IntoParIter; }
Expand description

Trait used to create iterators.
Yields &mut T for mutable components. Does not work with storage tracking modification.

std::iter::IntoIterator can’t be used directly because of conflicting implementation.
This trait serves as substitute.

Required Associated Types

Required Methods

Returns an iterator over SparseSet.
Panics if one of the storage is tracking modification.
You can check if a SparseSet is tracking modification with SparseSet::is_tracking_modification.

iter can be used for storage tracking modification.

Example
use shipyard::{EntitiesViewMut, IntoFastIter, ViewMut, World};

let world = World::new();

let (mut entities, mut usizes, mut u32s) = world.borrow::<(EntitiesViewMut, ViewMut<usize>, ViewMut<u32>)>().unwrap();

entities.add_entity((&mut usizes, &mut u32s), (0usize, 1u32));
entities.add_entity((&mut usizes, &mut u32s), (2usize, 3u32));

(&mut usizes, &u32s).fast_iter().for_each(|(x, &y)| {
    *x += y as usize;
});

Returns an iterator over SparseSet, its order is based on D.
Panics if one of the storage is tracking modification.
You can check if a SparseSet is tracking modification with SparseSet::is_tracking_modification.

iter_by can be used for storage tracking modification.

Returns a parallel iterator over SparseSet.
Panics if one of the storage is tracking modification.
You can check if a SparseSet is tracking modification with SparseSet::is_tracking_modification.

par_iter can be used for storage tracking modification.

Example
use rayon::prelude::ParallelIterator;
use shipyard::{EntitiesViewMut, IntoFastIter, ViewMut, World};

let world = World::new();

let (mut entities, mut usizes, mut u32s) = world.borrow::<(EntitiesViewMut, ViewMut<usize>, ViewMut<u32>)>().unwrap();

entities.add_entity((&mut usizes, &mut u32s), (0usize, 1u32));
entities.add_entity((&mut usizes, &mut u32s), (2usize, 3u32));

(&mut usizes, &u32s).fast_par_iter().for_each(|(x, &y)| {
    *x += y as usize;
});

Implementations on Foreign Types

Implementors