Trait specs::join::Join [] [src]

pub trait Join {
    type Type;
    type Value;
    type Mask: BitSetLike;
    fn open(self) -> (Self::Mask, Self::Value);
unsafe fn get(value: &mut Self::Value, id: Index) -> Self::Type; fn join(self) -> JoinIter<Self>
    where
        Self: Sized
, { ... } }

The purpose of the Join trait is to provide a way to access multiple storages at the same time with the merged bit set.

Joining component storages means that you'll only get values where for a given entity every storage has an associated component.

Example

let mut world = World::new();

world.register::<Pos>();
world.register::<Vel>();

{
    let pos = world.read_storage::<Pos>();
    let vel = world.read_storage::<Vel>();

    // There are no entities yet, so no pair will be returned.
    let joined: Vec<_> = (&pos, &vel).join().collect();
    assert_eq!(joined, vec![]);
}

world
    .create_entity()
    .with(Pos)
    .build();

{
    let pos = world.read_storage::<Pos>();
    let vel = world.read_storage::<Vel>();

    // Although there is an entity, it only has `Pos`.
    let joined: Vec<_> = (&pos, &vel).join().collect();
    assert_eq!(joined, vec![]);
}

let ent = world.create_entity()
    .with(Pos)
    .with(Vel)
    .build();

{
    let pos = world.read_storage::<Pos>();
    let vel = world.read_storage::<Vel>();

    // Now there is one entity that has both a `Vel` and a `Pos`.
    let joined: Vec<_> = (&pos, &vel).join().collect();
    assert_eq!(joined, vec![(&Pos, &Vel)]);

    // If we want to get the entity the components are associated to,
    // we need to join over `Entities`:

    let entities = world.read_resource::<EntitiesRes>();
    // note: `EntitiesRes` is the fetched resource; we get back
    // `Fetch<EntitiesRes>`.
    // `Fetch<EntitiesRes>` can also be referred to by `Entities` which
    // is a shorthand type definition to the former type.

    let joined: Vec<_> = (&*entities, &pos, &vel).join().collect(); // note the `&*entities`
    assert_eq!(joined, vec![(ent, &Pos, &Vel)]);
}

Iterating over a single storage

Join can also be used to iterate over a single storage, just by writing (&storage).join().

Associated Types

Type of joined components.

Type of joined storages.

Type of joined bit mask.

Required Methods

Open this join by returning the mask and the storages.

Get a joined component value by a given index.

Provided Methods

Important traits for JoinIter<J>

Create a joined iterator over the contents.

Implementations on Foreign Types

impl Join for AtomicBitSet
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<'a> Join for &'a AtomicBitSet
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A> Join for BitSetNot<A> where
    A: BitSetLike
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<'a, A> Join for &'a BitSetNot<A> where
    A: BitSetLike
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B> Join for BitSetAnd<A, B> where
    A: BitSetLike,
    B: BitSetLike
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<'a, A, B> Join for &'a BitSetAnd<A, B> where
    A: BitSetLike,
    B: BitSetLike
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B> Join for BitSetOr<A, B> where
    A: BitSetLike,
    B: BitSetLike
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<'a, A, B> Join for &'a BitSetOr<A, B> where
    A: BitSetLike,
    B: BitSetLike
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B> Join for BitSetXor<A, B> where
    A: BitSetLike,
    B: BitSetLike
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A> Join for (A,) where
    A: Join,
    (<A as Join>::Mask,): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B> Join for (A, B) where
    A: Join,
    B: Join,
    (<A as Join>::Mask, <B as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C> Join for (A, B, C) where
    A: Join,
    B: Join,
    C: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D> Join for (A, B, C, D) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E> Join for (A, B, C, D, E) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F> Join for (A, B, C, D, E, F) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G> Join for (A, B, C, D, E, F, G) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H> Join for (A, B, C, D, E, F, G, H) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I> Join for (A, B, C, D, E, F, G, H, I) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I, J> Join for (A, B, C, D, E, F, G, H, I, J) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    J: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask, <J as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I, J, K> Join for (A, B, C, D, E, F, G, H, I, J, K) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    J: Join,
    K: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask, <J as Join>::Mask, <K as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I, J, K, L> Join for (A, B, C, D, E, F, G, H, I, J, K, L) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    J: Join,
    K: Join,
    L: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask, <J as Join>::Mask, <K as Join>::Mask, <L as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I, J, K, L, M> Join for (A, B, C, D, E, F, G, H, I, J, K, L, M) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    J: Join,
    K: Join,
    L: Join,
    M: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask, <J as Join>::Mask, <K as Join>::Mask, <L as Join>::Mask, <M as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I, J, K, L, M, N> Join for (A, B, C, D, E, F, G, H, I, J, K, L, M, N) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    J: Join,
    K: Join,
    L: Join,
    M: Join,
    N: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask, <J as Join>::Mask, <K as Join>::Mask, <L as Join>::Mask, <M as Join>::Mask, <N as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> Join for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    J: Join,
    K: Join,
    L: Join,
    M: Join,
    N: Join,
    O: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask, <J as Join>::Mask, <K as Join>::Mask, <L as Join>::Mask, <M as Join>::Mask, <N as Join>::Mask, <O as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> Join for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    J: Join,
    K: Join,
    L: Join,
    M: Join,
    N: Join,
    O: Join,
    P: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask, <J as Join>::Mask, <K as Join>::Mask, <L as Join>::Mask, <M as Join>::Mask, <N as Join>::Mask, <O as Join>::Mask, <P as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q> Join for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    J: Join,
    K: Join,
    L: Join,
    M: Join,
    N: Join,
    O: Join,
    P: Join,
    Q: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask, <J as Join>::Mask, <K as Join>::Mask, <L as Join>::Mask, <M as Join>::Mask, <N as Join>::Mask, <O as Join>::Mask, <P as Join>::Mask, <Q as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

impl<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R> Join for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) where
    A: Join,
    B: Join,
    C: Join,
    D: Join,
    E: Join,
    F: Join,
    G: Join,
    H: Join,
    I: Join,
    J: Join,
    K: Join,
    L: Join,
    M: Join,
    N: Join,
    O: Join,
    P: Join,
    Q: Join,
    R: Join,
    (<A as Join>::Mask, <B as Join>::Mask, <C as Join>::Mask, <D as Join>::Mask, <E as Join>::Mask, <F as Join>::Mask, <G as Join>::Mask, <H as Join>::Mask, <I as Join>::Mask, <J as Join>::Mask, <K as Join>::Mask, <L as Join>::Mask, <M as Join>::Mask, <N as Join>::Mask, <O as Join>::Mask, <P as Join>::Mask, <Q as Join>::Mask, <R as Join>::Mask): BitAnd
[src]

[src]

[src]

Important traits for JoinIter<J>
[src]

Implementors