Trait na::SimdBool

source ·
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>(
        self,
        if_value: impl FnOnce() -> Res,
        else_value: impl FnOnce() -> Res
    ) -> Res
       where Res: SimdValue<SimdBool = Self>;
    fn if_else2<Res>(
        self,
        if_value: impl FnOnce() -> Res,
        else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res),
        else_value: impl FnOnce() -> Res
    ) -> Res
       where Res: SimdValue<SimdBool = Self>;
    fn if_else3<Res>(
        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
       where Res: SimdValue<SimdBool = Self>;
}
Expand description

Lane-wise generalization of bool for SIMD booleans.

This trait implemented by bool as well as SIMD boolean types like packed_simd::m32x4. It is designed to abstract the behavior of booleans so it can work with multi-lane boolean values in an AoSoA setting.

Required Methods§

source

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.

source

fn and(self) -> bool

Lane-wise bitwise and of the vector elements.

source

fn or(self) -> bool

Lane-wise bitwise or of the vector elements.

source

fn xor(self) -> bool

Lane-wise bitwise xor of the vector elements.

source

fn all(self) -> bool

Are all vector lanes true?

source

fn any(self) -> bool

Is any vector lane true?

source

fn none(self) -> bool

Are all vector lanes false?

source

fn if_else<Res>( self, if_value: impl FnOnce() -> Res, else_value: impl FnOnce() -> Res ) -> Reswhere Res: SimdValue<SimdBool = Self>,

Merges the value of if_value() and else_value() depending on the lanes of self.

  • For each lane of self containing 1, the result will contain the corresponding lane of if_value().
  • For each lane of self containing 0, the result will contain the corresponding lane of else_value().

The implementor of this trait is free to choose on what cases if_value and else_value are actually called.

source

fn if_else2<Res>( self, if_value: impl FnOnce() -> Res, else_if: (impl FnOnce() -> Self, impl FnOnce() -> Res), else_value: impl FnOnce() -> Res ) -> Reswhere Res: SimdValue<SimdBool = Self>,

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 self containing 1, the result will contain the corresponding lane of if_value().
  • For each lane of self containing 0 but with a corresponding lane of else_if.0() containing 1, the result will contain the corresponding lane of else_if.1().
  • For each lane of self containing 0 but with a corresponding lane of else_if.0() containing 0, the result 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.

source

fn if_else3<Res>( 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 ) -> Reswhere Res: SimdValue<SimdBool = Self>,

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 self containing 1, the result will contain the corresponding lane of if_value().
  • For each lane of self containing 0 but with a corresponding lane of else_if.0() containing 1, the result will contain the corresponding lane of else_if.1().
  • For each lane of self containing 0 and else_if.0() containing 0 and else_else_if.0() containing 1, the result will contain the corresponding lane of else_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.

Implementations on Foreign Types§

source§

impl SimdBool for bool

source§

fn bitmask(self) -> u64

source§

fn and(self) -> bool

source§

fn or(self) -> bool

source§

fn xor(self) -> bool

source§

fn all(self) -> bool

source§

fn any(self) -> bool

source§

fn none(self) -> bool

source§

fn if_else<Res>( self, if_value: impl FnOnce() -> Res, else_value: impl FnOnce() -> Res ) -> Reswhere Res: SimdValue<SimdBool = bool>,

source§

fn if_else2<Res>( self, if_value: impl FnOnce() -> Res, else_if: (impl FnOnce() -> bool, impl FnOnce() -> Res), else_value: impl FnOnce() -> Res ) -> Reswhere Res: SimdValue<SimdBool = bool>,

source§

fn if_else3<Res>( self, if_value: impl FnOnce() -> Res, else_if: (impl FnOnce() -> bool, impl FnOnce() -> Res), else_else_if: (impl FnOnce() -> bool, impl FnOnce() -> Res), else_value: impl FnOnce() -> Res ) -> Reswhere Res: SimdValue<SimdBool = bool>,

Implementors§