[][src]Trait simba::simd::SimdBool

pub trait SimdBool: Copy + BitAnd<Self, Output = Self> + BitOr<Self, Output = Self> + BitXor<Self, Output = Self> + Not<Output = Self> {
    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; }

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

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.

fn and(self) -> bool

Lane-wise bitwise and of the vector elements.

fn or(self) -> bool

Lane-wise bitwise or of the vector elements.

fn xor(self) -> bool

Lane-wise bitwise xor of the vector elements.

fn all(self) -> bool

Are all vector lanes true?

fn any(self) -> bool

Is any vector lane true?

fn none(self) -> bool

Are all vector lanes false?

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 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.

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 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.

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 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.

Loading content...

Implementations on Foreign Types

impl SimdBool for bool[src]

Loading content...

Implementors

impl SimdBool for AutoSimd<[bool; 1]>[src]

impl SimdBool for AutoSimd<[bool; 2]>[src]

impl SimdBool for AutoSimd<[bool; 4]>[src]

impl SimdBool for AutoSimd<[bool; 8]>[src]

impl SimdBool for AutoSimd<[bool; 16]>[src]

impl SimdBool for AutoSimd<[bool; 32]>[src]

impl SimdBool for Simd<m8x2>[src]

impl SimdBool for Simd<m8x4>[src]

impl SimdBool for Simd<m8x8>[src]

impl SimdBool for Simd<m8x16>[src]

impl SimdBool for Simd<m8x32>[src]

impl SimdBool for Simd<m8x64>[src]

impl SimdBool for Simd<m16x2>[src]

impl SimdBool for Simd<m16x4>[src]

impl SimdBool for Simd<m16x8>[src]

impl SimdBool for Simd<m16x16>[src]

impl SimdBool for Simd<m16x32>[src]

impl SimdBool for Simd<m32x2>[src]

impl SimdBool for Simd<m32x4>[src]

impl SimdBool for Simd<m32x8>[src]

impl SimdBool for Simd<m32x16>[src]

impl SimdBool for Simd<m64x2>[src]

impl SimdBool for Simd<m64x4>[src]

impl SimdBool for Simd<m64x8>[src]

impl SimdBool for Simd<m128x1>[src]

impl SimdBool for Simd<m128x2>[src]

impl SimdBool for Simd<m128x4>[src]

impl SimdBool for Simd<msizex2>[src]

impl SimdBool for Simd<msizex4>[src]

impl SimdBool for Simd<msizex8>[src]

impl SimdBool for WideBoolF32x4[src]

Loading content...