Trait specs::join::ParJoin

source ·
pub unsafe trait ParJoin {
    type Type;
    type Value;
    type Mask: BitSetLike;

    // Required methods
    unsafe fn open(self) -> (Self::Mask, Self::Value);
    unsafe fn get(value: &Self::Value, id: Index) -> Self::Type;

    // Provided methods
    fn par_join(self) -> JoinParIter<Self>
       where Self: Sized { ... }
    fn is_unconstrained() -> bool { ... }
}
Expand description

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

Safety

ParJoin::get must be callable from multiple threads, simultaneously.

The Self::Mask value returned with the Self::Value must correspond such that it is safe to retrieve items from Self::Value whose presence is indicated in the mask. As part of this, BitSetLike::iter must not produce an iterator that repeats an Index value.

Required Associated Types§

source

type Type

Type of joined components.

source

type Value

Type of joined storages.

source

type Mask: BitSetLike

Type of joined bit mask.

Required Methods§

source

unsafe fn open(self) -> (Self::Mask, Self::Value)

Open this join by returning the mask and the storages.

Safety

This is unsafe because implementations of this trait can permit the Value to be mutated independently of the Mask. If the Mask does not correctly report the status of the Value then illegal memory access can occur.

source

unsafe fn get(value: &Self::Value, id: Index) -> Self::Type

Get a joined component value by a given index.

Safety
  • A call to get must be preceded by a check if id is part of Self::Mask.
  • The value returned from this method must no longer be alive before subsequent calls with the same id.

Provided Methods§

source

fn par_join(self) -> JoinParIter<Self>where Self: Sized,

Create a joined parallel iterator over the contents.

source

fn is_unconstrained() -> bool

If this LendJoin typically returns all indices in the mask, then iterating over only it or combined with other joins that are also dangerous will cause the JoinLendIter to go through all indices which is usually not what is wanted and will kill performance.

Implementations on Foreign Types§

source§

impl<A, B, C, D> ParJoin for (A, B, C, D)where A: ParJoin, B: ParJoin, C: ParJoin, D: ParJoin, (<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask): BitAnd,

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl<'a> ParJoin for &'a AtomicBitSet

§

type Type = u32

§

type Value = ()

§

type Mask = &'a AtomicBitSet

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

impl<'a, A, B> ParJoin for &'a BitSetAnd<A, B>where A: BitSetLike, B: BitSetLike,

§

type Type = u32

§

type Value = ()

§

type Mask = &'a BitSetAnd<A, B>

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

impl<A, B> ParJoin for BitSetAnd<A, B>where A: BitSetLike, B: BitSetLike,

§

type Type = u32

§

type Value = ()

§

type Mask = BitSetAnd<A, B>

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

impl<'a, A, B> ParJoin for &'a BitSetOr<A, B>where A: BitSetLike, B: BitSetLike,

§

type Type = u32

§

type Value = ()

§

type Mask = &'a BitSetOr<A, B>

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

impl<'a, 'b, T> ParJoin for &'a mut FetchMut<'b, T>where &'a mut T: ParJoin, T: Resource,

§

type Type = <&'a mut T as ParJoin>::Type

§

type Value = <&'a mut T as ParJoin>::Value

§

type Mask = <&'a mut T as ParJoin>::Mask

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type, <J as ParJoin>::Type, <K as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value, <J as ParJoin>::Value, <K as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask, <J as ParJoin>::Mask, <K as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl<A, B, C, D, E> ParJoin for (A, B, C, D, E)where A: ParJoin, B: ParJoin, C: ParJoin, D: ParJoin, E: ParJoin, (<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask): BitAnd,

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type, <J as ParJoin>::Type, <K as ParJoin>::Type, <L as ParJoin>::Type, <M as ParJoin>::Type, <N as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value, <J as ParJoin>::Value, <K as ParJoin>::Value, <L as ParJoin>::Value, <M as ParJoin>::Value, <N as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask, <J as ParJoin>::Mask, <K as ParJoin>::Mask, <L as ParJoin>::Mask, <M as ParJoin>::Mask, <N as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl<A, B, C, D, E, F, G> ParJoin for (A, B, C, D, E, F, G)where A: ParJoin, B: ParJoin, C: ParJoin, D: ParJoin, E: ParJoin, F: ParJoin, G: ParJoin, (<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask): BitAnd,

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type, <J as ParJoin>::Type, <K as ParJoin>::Type, <L as ParJoin>::Type, <M as ParJoin>::Type, <N as ParJoin>::Type, <O as ParJoin>::Type, <P as ParJoin>::Type, <Q as ParJoin>::Type, <R as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value, <J as ParJoin>::Value, <K as ParJoin>::Value, <L as ParJoin>::Value, <M as ParJoin>::Value, <N as ParJoin>::Value, <O as ParJoin>::Value, <P as ParJoin>::Value, <Q as ParJoin>::Value, <R as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask, <J as ParJoin>::Mask, <K as ParJoin>::Mask, <L as ParJoin>::Mask, <M as ParJoin>::Mask, <N as ParJoin>::Mask, <O as ParJoin>::Mask, <P as ParJoin>::Mask, <Q as ParJoin>::Mask, <R as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type, <J as ParJoin>::Type, <K as ParJoin>::Type, <L as ParJoin>::Type, <M as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value, <J as ParJoin>::Value, <K as ParJoin>::Value, <L as ParJoin>::Value, <M as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask, <J as ParJoin>::Mask, <K as ParJoin>::Mask, <L as ParJoin>::Mask, <M as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl<'a> ParJoin for &'a dyn BitSetLike

§

type Type = u32

§

type Value = ()

§

type Mask = &'a dyn BitSetLike

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type, <J as ParJoin>::Type, <K as ParJoin>::Type, <L as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value, <J as ParJoin>::Value, <K as ParJoin>::Value, <L as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask, <J as ParJoin>::Mask, <K as ParJoin>::Mask, <L as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl<A, B> ParJoin for BitSetXor<A, B>where A: BitSetLike, B: BitSetLike,

§

type Type = u32

§

type Value = ()

§

type Mask = BitSetXor<A, B>

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

impl<A> ParJoin for BitSetNot<A>where A: BitSetLike,

§

type Type = u32

§

type Value = ()

§

type Mask = BitSetNot<A>

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

impl<'a, 'b, T> ParJoin for &'a Fetch<'b, T>where &'a T: ParJoin, T: Resource,

§

type Type = <&'a T as ParJoin>::Type

§

type Value = <&'a T as ParJoin>::Value

§

type Mask = <&'a T as ParJoin>::Mask

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type, <J as ParJoin>::Type, <K as ParJoin>::Type, <L as ParJoin>::Type, <M as ParJoin>::Type, <N as ParJoin>::Type, <O as ParJoin>::Type, <P as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value, <J as ParJoin>::Value, <K as ParJoin>::Value, <L as ParJoin>::Value, <M as ParJoin>::Value, <N as ParJoin>::Value, <O as ParJoin>::Value, <P as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask, <J as ParJoin>::Mask, <K as ParJoin>::Mask, <L as ParJoin>::Mask, <M as ParJoin>::Mask, <N as ParJoin>::Mask, <O as ParJoin>::Mask, <P as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl<A, B, C, D, E, F> ParJoin for (A, B, C, D, E, F)where A: ParJoin, B: ParJoin, C: ParJoin, D: ParJoin, E: ParJoin, F: ParJoin, (<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask): BitAnd,

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type, <J as ParJoin>::Type, <K as ParJoin>::Type, <L as ParJoin>::Type, <M as ParJoin>::Type, <N as ParJoin>::Type, <O as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value, <J as ParJoin>::Value, <K as ParJoin>::Value, <L as ParJoin>::Value, <M as ParJoin>::Value, <N as ParJoin>::Value, <O as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask, <J as ParJoin>::Mask, <K as ParJoin>::Mask, <L as ParJoin>::Mask, <M as ParJoin>::Mask, <N as ParJoin>::Mask, <O as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl<A, B> ParJoin for BitSetOr<A, B>where A: BitSetLike, B: BitSetLike,

§

type Type = u32

§

type Value = ()

§

type Mask = BitSetOr<A, B>

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type, <J as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value, <J as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask, <J as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

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

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type, <D as ParJoin>::Type, <E as ParJoin>::Type, <F as ParJoin>::Type, <G as ParJoin>::Type, <H as ParJoin>::Type, <I as ParJoin>::Type, <J as ParJoin>::Type, <K as ParJoin>::Type, <L as ParJoin>::Type, <M as ParJoin>::Type, <N as ParJoin>::Type, <O as ParJoin>::Type, <P as ParJoin>::Type, <Q as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value, <D as ParJoin>::Value, <E as ParJoin>::Value, <F as ParJoin>::Value, <G as ParJoin>::Value, <H as ParJoin>::Value, <I as ParJoin>::Value, <J as ParJoin>::Value, <K as ParJoin>::Value, <L as ParJoin>::Value, <M as ParJoin>::Value, <N as ParJoin>::Value, <O as ParJoin>::Value, <P as ParJoin>::Value, <Q as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask, <D as ParJoin>::Mask, <E as ParJoin>::Mask, <F as ParJoin>::Mask, <G as ParJoin>::Mask, <H as ParJoin>::Mask, <I as ParJoin>::Mask, <J as ParJoin>::Mask, <K as ParJoin>::Mask, <L as ParJoin>::Mask, <M as ParJoin>::Mask, <N as ParJoin>::Mask, <O as ParJoin>::Mask, <P as ParJoin>::Mask, <Q as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl<A> ParJoin for (A,)where A: ParJoin, (<A as ParJoin>::Mask,): BitAnd,

§

type Type = (<A as ParJoin>::Type,)

§

type Value = (<A as ParJoin>::Value,)

§

type Mask = <(<A as ParJoin>::Mask,) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl ParJoin for AtomicBitSet

§

type Type = u32

§

type Value = ()

§

type Mask = AtomicBitSet

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

impl<A, B> ParJoin for (A, B)where A: ParJoin, B: ParJoin, (<A as ParJoin>::Mask, <B as ParJoin>::Mask): BitAnd,

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

source§

impl<'a, A> ParJoin for &'a BitSetNot<A>where A: BitSetLike,

§

type Type = u32

§

type Value = ()

§

type Mask = &'a BitSetNot<A>

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(_: &Self::Value, id: Index) -> Self::Type

source§

impl<A, B, C> ParJoin for (A, B, C)where A: ParJoin, B: ParJoin, C: ParJoin, (<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask): BitAnd,

§

type Type = (<A as ParJoin>::Type, <B as ParJoin>::Type, <C as ParJoin>::Type)

§

type Value = (<A as ParJoin>::Value, <B as ParJoin>::Value, <C as ParJoin>::Value)

§

type Mask = <(<A as ParJoin>::Mask, <B as ParJoin>::Mask, <C as ParJoin>::Mask) as BitAnd>::Value

source§

unsafe fn open(self) -> (Self::Mask, Self::Value)

source§

unsafe fn get(v: &Self::Value, i: Index) -> Self::Type

source§

fn is_unconstrained() -> bool

Implementors§

source§

impl ParJoin for BitSet

§

type Type = u32

§

type Value = ()

§

type Mask = BitSet

source§

impl<'a> ParJoin for &'a BitSet

§

type Type = u32

§

type Value = ()

§

type Mask = &'a BitSet

source§

impl<'a> ParJoin for &'a EntitiesRes

source§

impl<'a> ParJoin for AntiStorage<'a>

§

type Mask = BitSetNot<&'a BitSet>

§

type Type = ()

§

type Value = ()

source§

impl<'a, 'b, T> ParJoin for &'a Read<'b, T>where &'a T: ParJoin, T: Resource,

§

type Type = <&'a T as ParJoin>::Type

§

type Value = <&'a T as ParJoin>::Value

§

type Mask = <&'a T as ParJoin>::Mask

source§

impl<'a, 'b, T> ParJoin for &'a ReadExpect<'b, T>where &'a T: ParJoin, T: Resource,

§

type Type = <&'a T as ParJoin>::Type

§

type Value = <&'a T as ParJoin>::Value

§

type Mask = <&'a T as ParJoin>::Mask

source§

impl<'a, 'b, T> ParJoin for &'a mut Write<'b, T>where &'a mut T: ParJoin, T: Resource,

source§

impl<'a, 'b, T> ParJoin for &'a mut WriteExpect<'b, T>where &'a mut T: ParJoin, T: Resource,

source§

impl<'a, 'e, T, D> ParJoin for &'a Storage<'e, T, D>where T: Component, D: Deref<Target = MaskedStorage<T>>, T::Storage: Sync,

§

type Mask = &'a BitSet

§

type Type = &'a T

§

type Value = &'a <T as Component>::Storage

source§

impl<'a, 'e, T, D> ParJoin for &'a mut Storage<'e, T, D>where T: Component, D: DerefMut<Target = MaskedStorage<T>>, T::Storage: Sync + SharedGetMutStorage<T> + DistinctStorage,

§

type Mask = &'a BitSet

§

type Type = <<T as Component>::Storage as UnprotectedStorage<T>>::AccessMut<'a>

§

type Value = SharedGetMutOnly<'a, T, <T as Component>::Storage>

source§

impl<'rf, C, S> ParJoin for &'rf RestrictedStorage<'rf, C, S>where C: Component, S: Borrow<C::Storage>, C::Storage: Sync,

§

type Mask = &'rf BitSet

§

type Type = PairedStorageRead<'rf, C>

§

type Value = (&'rf <C as Component>::Storage, &'rf Fetch<'rf, EntitiesRes>, &'rf BitSet)

source§

impl<'rf, C, S> ParJoin for &'rf mut RestrictedStorage<'rf, C, S>where C: Component, S: BorrowMut<C::Storage>, C::Storage: Sync + SharedGetMutStorage<C> + DistinctStorage,

§

type Mask = &'rf BitSet

§

type Type = PairedStorageWriteShared<'rf, C>

§

type Value = SharedGetOnly<'rf, C, <C as Component>::Storage>

source§

impl<T> ParJoin for MaybeJoin<T>where T: ParJoin,

§

type Mask = BitSetAll

§

type Type = Option<<T as ParJoin>::Type>

§

type Value = (<T as ParJoin>::Mask, <T as ParJoin>::Value)