pub trait SimdBool:
    Copy
    + BitAnd<Self, Output = Self>
    + BitOr<Self, Output = Self>
    + BitXor<Self, Output = Self>
    + Not<Output = Self> {
    // Required methods
    fn bitmask(self) -> u64;
    fn and(self) -> bool;
    fn or(self) -> bool;
    fn xor(self) -> bool;
    fn all(self) -> bool;
    fn any(self) -> bool;
    fn none(self) -> bool;
    fn if_else<Res: SimdValue<SimdBool = Self>>(
        self,
        if_value: impl FnOnce() -> Res,
        else_value: impl FnOnce() -> Res,
    ) -> Res;
    fn if_else2<Res: SimdValue<SimdBool = Self>>(
        self,
        if_value: impl FnOnce() -> Res,
        else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res),
        else_value: impl FnOnce() -> Res,
    ) -> Res;
    fn if_else3<Res: SimdValue<SimdBool = Self>>(
        self,
        if_value: impl FnOnce() -> Res,
        else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res),
        else_else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res),
        else_value: impl FnOnce() -> Res,
    ) -> Res;
}Expand description
Lane-wise generalization of bool for SIMD booleans.
This trait implemented by bool as well as SIMD boolean types like portable_simd::mask32x4.
It is designed to abstract the behavior of booleans so it can work with multi-lane boolean
values in an AoSoA setting.
Required Methods§
sourcefn bitmask(self) -> u64
 
fn bitmask(self) -> u64
A bit mask representing the boolean state of each lanes of self.
The i-th bit of the result is 1 iff. the i-th lane of self is true.
sourcefn if_else<Res: SimdValue<SimdBool = Self>>(
    self,
    if_value: impl FnOnce() -> Res,
    else_value: impl FnOnce() -> Res,
) -> Res
 
fn if_else<Res: SimdValue<SimdBool = Self>>( self, if_value: impl FnOnce() -> Res, else_value: impl FnOnce() -> Res, ) -> Res
Merges the value of if_value() and else_value() depending on the lanes of self.
- For each lane of selfcontaining1, the result will contain the corresponding lane ofif_value().
- For each lane of selfcontaining0, the result will contain the corresponding lane ofelse_value().
The implementor of this trait is free to choose on what cases if_value and else_value are actually
called.
sourcefn if_else2<Res: SimdValue<SimdBool = Self>>(
    self,
    if_value: impl FnOnce() -> Res,
    else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res),
    else_value: impl FnOnce() -> Res,
) -> Res
 
fn if_else2<Res: SimdValue<SimdBool = Self>>( self, if_value: impl FnOnce() -> Res, else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res), else_value: impl FnOnce() -> Res, ) -> Res
Merges the value of if_value() and else_if.1() and else_value() depending on the lanes of self and else_if.0().
- For each lane of selfcontaining1, the result will contain the corresponding lane ofif_value().
- For each lane of selfcontaining0but with a corresponding lane ofelse_if.0()containing1, the result will contain the corresponding lane ofelse_if.1().
- For each lane of selfcontaining0but with a corresponding lane ofelse_if.0()containing0, the result will contain the corresponding lane ofelse_value().
The implementor of this trait is free to choose on what cases any of those closures are implemented.
sourcefn if_else3<Res: SimdValue<SimdBool = Self>>(
    self,
    if_value: impl FnOnce() -> Res,
    else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res),
    else_else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res),
    else_value: impl FnOnce() -> Res,
) -> Res
 
fn if_else3<Res: SimdValue<SimdBool = Self>>( self, if_value: impl FnOnce() -> Res, else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res), else_else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res), else_value: impl FnOnce() -> Res, ) -> Res
Merges the value of if_value() and else_if.1() and else_else_if.1() and else_value() depending on the lanes of self and else_if.0() and else_else_if.0().
- For each lane of selfcontaining1, the result will contain the corresponding lane ofif_value().
- For each lane of selfcontaining0but with a corresponding lane ofelse_if.0()containing1, the result will contain the corresponding lane ofelse_if.1().
- For each lane of selfcontaining0andelse_if.0()containing0andelse_else_if.0()containing1, the result will contain the corresponding lane ofelse_else_if.1().
- Other lanes will contain the corresponding lane of else_value().
The implementor of this trait is free to choose on what cases any of those closures are implemented.