SimdBool in simba::simd - Rust
Description: Lane-wise generalization of `bool` for SIMD booleans.
Keywords: rust, rustlang, rust-lang, SimdBool

# Trait simba::simd::SimdBool

source ·

    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;
    }

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

source

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

source

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

## 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: SimdValue<SimdBool = Self>>(
self,
if_value: impl FnOnce() -> Res,
else_value: impl FnOnce() -> Res
) -> Res

source§

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

source§

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

## Implementors§

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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