Trait shipyard::IntoIter[][src]

pub trait IntoIter {
    type IntoIter;
    type IntoParIter;
    fn iter(self) -> Self::IntoIter;
fn par_iter(self) -> Self::IntoParIter; }
Expand description

Trait used to create iterators.

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

Associated Types

Required methods

Returns an iterator over storages yielding only components meeting the requirements.

Example

use shipyard::{EntitiesViewMut, IntoIter, ViewMut, World};

let world = World::new();

world.run(
    |mut entities: EntitiesViewMut, mut usizes: ViewMut<usize>, mut u32s: ViewMut<u32>| {
        entities.add_entity((&mut usizes, &mut u32s), (0usize, 1u32));
        entities.add_entity((&mut usizes, &mut u32s), (2usize, 3u32));

        for (x, &y) in (&mut usizes, &u32s).iter() {
            *x += y as usize;
        }
    },
);

Returns a parallel iterator over storages yielding only components meeting the requirements.

Iterators can only be made inside run closure and systems.

Example

use rayon::prelude::ParallelIterator;
use shipyard::{EntitiesViewMut, IntoIter, ThreadPoolView, ViewMut, World};

let world = World::new();

world.run(
    |mut entities: EntitiesViewMut,
     mut usizes: ViewMut<usize>,
     mut u32s: ViewMut<u32>,
     thread_pool: ThreadPoolView| {
        entities.add_entity((&mut usizes, &mut u32s), (0usize, 1u32));
        entities.add_entity((&mut usizes, &mut u32s), (2usize, 3u32));

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

Implementations on Foreign Types

Implementors