nalgebra

Trait SimdValue

Source
pub trait SimdValue: Sized {
    type Element: SimdValue<Element = Self::Element, SimdBool = bool>;
    type SimdBool: SimdBool;

    const LANES: usize;

    // Required methods
    fn splat(val: Self::Element) -> Self;
    fn extract(&self, i: usize) -> Self::Element;
    unsafe fn extract_unchecked(&self, i: usize) -> Self::Element;
    fn replace(&mut self, i: usize, val: Self::Element);
    unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element);
    fn select(self, cond: Self::SimdBool, other: Self) -> Self;

    // Provided methods
    fn map_lanes(self, f: impl Fn(Self::Element) -> Self::Element) -> Self
       where Self: Clone { ... }
    fn zip_map_lanes(
        self,
        b: Self,
        f: impl Fn(Self::Element, Self::Element) -> Self::Element,
    ) -> Self
       where Self: Clone { ... }
}
Expand description

Base trait for every SIMD types.

Required Associated Constants§

Source

const LANES: usize

The number of lanes of this SIMD value.

Required Associated Types§

Source

type Element: SimdValue<Element = Self::Element, SimdBool = bool>

The type of the elements of each lane of this SIMD value.

Source

type SimdBool: SimdBool

Type of the result of comparing two SIMD values like self.

Required Methods§

Source

fn splat(val: Self::Element) -> Self

Initializes an SIMD value with each lanes set to val.

Source

fn extract(&self, i: usize) -> Self::Element

Extracts the i-th lane of self.

Panics if i >= Self::LANES.

Source

unsafe fn extract_unchecked(&self, i: usize) -> Self::Element

Extracts the i-th lane of self without bound-checking.

§Safety

Undefined behavior if i >= Self::LANES.

Source

fn replace(&mut self, i: usize, val: Self::Element)

Replaces the i-th lane of self by val.

Panics if i >= Self::LANES.

Source

unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element)

Replaces the i-th lane of self by val without bound-checking.

§Safety

Undefined behavior if i >= Self::LANES.

Source

fn select(self, cond: Self::SimdBool, other: Self) -> Self

Merges self and other depending on the lanes of cond.

For each lane of cond with bits set to 1, the result’s will contain the value of the lane of self. For each lane of cond with bits set to 0, the result’s will contain the value of the lane of other.

Provided Methods§

Source

fn map_lanes(self, f: impl Fn(Self::Element) -> Self::Element) -> Self
where Self: Clone,

Applies a function to each lane of self.

Note that, while convenient, this method can be extremely slow as this requires to extract each lane of self and then combine them again into a new SIMD value.

Source

fn zip_map_lanes( self, b: Self, f: impl Fn(Self::Element, Self::Element) -> Self::Element, ) -> Self
where Self: Clone,

Applies a function to each lane of self paired with the corresponding lane of b.

Note that, while convenient, this method can be extremely slow as this requires to extract each lane of self and then combine them again into a new SIMD value.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl SimdValue for bool

Source§

const LANES: usize = 1usize

Source§

type Element = bool

Source§

type SimdBool = bool

Source§

fn splat(val: <bool as SimdValue>::Element) -> bool

Source§

fn extract(&self, _: usize) -> <bool as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <bool as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <bool as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <bool as SimdValue>::Element, )

Source§

fn select(self, cond: <bool as SimdValue>::SimdBool, other: bool) -> bool

Source§

impl SimdValue for f32

Source§

const LANES: usize = 1usize

Source§

type Element = f32

Source§

type SimdBool = bool

Source§

fn splat(val: <f32 as SimdValue>::Element) -> f32

Source§

fn extract(&self, _: usize) -> <f32 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <f32 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <f32 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <f32 as SimdValue>::Element, )

Source§

fn select(self, cond: <f32 as SimdValue>::SimdBool, other: f32) -> f32

Source§

impl SimdValue for f64

Source§

const LANES: usize = 1usize

Source§

type Element = f64

Source§

type SimdBool = bool

Source§

fn splat(val: <f64 as SimdValue>::Element) -> f64

Source§

fn extract(&self, _: usize) -> <f64 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <f64 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <f64 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <f64 as SimdValue>::Element, )

Source§

fn select(self, cond: <f64 as SimdValue>::SimdBool, other: f64) -> f64

Source§

impl SimdValue for i8

Source§

const LANES: usize = 1usize

Source§

type Element = i8

Source§

type SimdBool = bool

Source§

fn splat(val: <i8 as SimdValue>::Element) -> i8

Source§

fn extract(&self, _: usize) -> <i8 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <i8 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <i8 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <i8 as SimdValue>::Element, )

Source§

fn select(self, cond: <i8 as SimdValue>::SimdBool, other: i8) -> i8

Source§

impl SimdValue for i16

Source§

const LANES: usize = 1usize

Source§

type Element = i16

Source§

type SimdBool = bool

Source§

fn splat(val: <i16 as SimdValue>::Element) -> i16

Source§

fn extract(&self, _: usize) -> <i16 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <i16 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <i16 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <i16 as SimdValue>::Element, )

Source§

fn select(self, cond: <i16 as SimdValue>::SimdBool, other: i16) -> i16

Source§

impl SimdValue for i32

Source§

const LANES: usize = 1usize

Source§

type Element = i32

Source§

type SimdBool = bool

Source§

fn splat(val: <i32 as SimdValue>::Element) -> i32

Source§

fn extract(&self, _: usize) -> <i32 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <i32 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <i32 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <i32 as SimdValue>::Element, )

Source§

fn select(self, cond: <i32 as SimdValue>::SimdBool, other: i32) -> i32

Source§

impl SimdValue for i64

Source§

const LANES: usize = 1usize

Source§

type Element = i64

Source§

type SimdBool = bool

Source§

fn splat(val: <i64 as SimdValue>::Element) -> i64

Source§

fn extract(&self, _: usize) -> <i64 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <i64 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <i64 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <i64 as SimdValue>::Element, )

Source§

fn select(self, cond: <i64 as SimdValue>::SimdBool, other: i64) -> i64

Source§

impl SimdValue for i128

Source§

const LANES: usize = 1usize

Source§

type Element = i128

Source§

type SimdBool = bool

Source§

fn splat(val: <i128 as SimdValue>::Element) -> i128

Source§

fn extract(&self, _: usize) -> <i128 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <i128 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <i128 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <i128 as SimdValue>::Element, )

Source§

fn select(self, cond: <i128 as SimdValue>::SimdBool, other: i128) -> i128

Source§

impl SimdValue for isize

Source§

const LANES: usize = 1usize

Source§

type Element = isize

Source§

type SimdBool = bool

Source§

fn splat(val: <isize as SimdValue>::Element) -> isize

Source§

fn extract(&self, _: usize) -> <isize as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <isize as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <isize as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <isize as SimdValue>::Element, )

Source§

fn select(self, cond: <isize as SimdValue>::SimdBool, other: isize) -> isize

Source§

impl SimdValue for u8

Source§

const LANES: usize = 1usize

Source§

type Element = u8

Source§

type SimdBool = bool

Source§

fn splat(val: <u8 as SimdValue>::Element) -> u8

Source§

fn extract(&self, _: usize) -> <u8 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <u8 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <u8 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <u8 as SimdValue>::Element, )

Source§

fn select(self, cond: <u8 as SimdValue>::SimdBool, other: u8) -> u8

Source§

impl SimdValue for u16

Source§

const LANES: usize = 1usize

Source§

type Element = u16

Source§

type SimdBool = bool

Source§

fn splat(val: <u16 as SimdValue>::Element) -> u16

Source§

fn extract(&self, _: usize) -> <u16 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <u16 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <u16 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <u16 as SimdValue>::Element, )

Source§

fn select(self, cond: <u16 as SimdValue>::SimdBool, other: u16) -> u16

Source§

impl SimdValue for u32

Source§

const LANES: usize = 1usize

Source§

type Element = u32

Source§

type SimdBool = bool

Source§

fn splat(val: <u32 as SimdValue>::Element) -> u32

Source§

fn extract(&self, _: usize) -> <u32 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <u32 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <u32 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <u32 as SimdValue>::Element, )

Source§

fn select(self, cond: <u32 as SimdValue>::SimdBool, other: u32) -> u32

Source§

impl SimdValue for u64

Source§

const LANES: usize = 1usize

Source§

type Element = u64

Source§

type SimdBool = bool

Source§

fn splat(val: <u64 as SimdValue>::Element) -> u64

Source§

fn extract(&self, _: usize) -> <u64 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <u64 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <u64 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <u64 as SimdValue>::Element, )

Source§

fn select(self, cond: <u64 as SimdValue>::SimdBool, other: u64) -> u64

Source§

impl SimdValue for u128

Source§

const LANES: usize = 1usize

Source§

type Element = u128

Source§

type SimdBool = bool

Source§

fn splat(val: <u128 as SimdValue>::Element) -> u128

Source§

fn extract(&self, _: usize) -> <u128 as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <u128 as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <u128 as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <u128 as SimdValue>::Element, )

Source§

fn select(self, cond: <u128 as SimdValue>::SimdBool, other: u128) -> u128

Source§

impl SimdValue for usize

Source§

const LANES: usize = 1usize

Source§

type Element = usize

Source§

type SimdBool = bool

Source§

fn splat(val: <usize as SimdValue>::Element) -> usize

Source§

fn extract(&self, _: usize) -> <usize as SimdValue>::Element

Source§

unsafe fn extract_unchecked(&self, _: usize) -> <usize as SimdValue>::Element

Source§

fn replace(&mut self, _: usize, val: <usize as SimdValue>::Element)

Source§

unsafe fn replace_unchecked( &mut self, _: usize, val: <usize as SimdValue>::Element, )

Source§

fn select(self, cond: <usize as SimdValue>::SimdBool, other: usize) -> usize

Implementors§

Source§

impl SimdValue for AutoSimd<[bool; 1]>

Source§

impl SimdValue for AutoSimd<[bool; 2]>

Source§

impl SimdValue for AutoSimd<[bool; 4]>

Source§

impl SimdValue for AutoSimd<[bool; 8]>

Source§

impl SimdValue for AutoSimd<[bool; 16]>

Source§

impl SimdValue for AutoSimd<[bool; 32]>

Source§

impl SimdValue for AutoSimd<[f32; 2]>

Source§

impl SimdValue for AutoSimd<[f32; 4]>

Source§

impl SimdValue for AutoSimd<[f32; 8]>

Source§

impl SimdValue for AutoSimd<[f32; 16]>

Source§

impl SimdValue for AutoSimd<[f64; 2]>

Source§

impl SimdValue for AutoSimd<[f64; 4]>

Source§

impl SimdValue for AutoSimd<[f64; 8]>

Source§

impl SimdValue for AutoSimd<[i8; 2]>

Source§

impl SimdValue for AutoSimd<[i8; 4]>

Source§

impl SimdValue for AutoSimd<[i8; 8]>

Source§

impl SimdValue for AutoSimd<[i8; 16]>

Source§

impl SimdValue for AutoSimd<[i8; 32]>

Source§

impl SimdValue for AutoSimd<[i16; 2]>

Source§

impl SimdValue for AutoSimd<[i16; 4]>

Source§

impl SimdValue for AutoSimd<[i16; 8]>

Source§

impl SimdValue for AutoSimd<[i16; 16]>

Source§

impl SimdValue for AutoSimd<[i16; 32]>

Source§

impl SimdValue for AutoSimd<[i32; 2]>

Source§

impl SimdValue for AutoSimd<[i32; 4]>

Source§

impl SimdValue for AutoSimd<[i32; 8]>

Source§

impl SimdValue for AutoSimd<[i32; 16]>

Source§

impl SimdValue for AutoSimd<[i64; 2]>

Source§

impl SimdValue for AutoSimd<[i64; 4]>

Source§

impl SimdValue for AutoSimd<[i64; 8]>

Source§

impl SimdValue for AutoSimd<[i128; 1]>

Source§

impl SimdValue for AutoSimd<[i128; 2]>

Source§

impl SimdValue for AutoSimd<[i128; 4]>

Source§

impl SimdValue for AutoSimd<[isize; 2]>

Source§

impl SimdValue for AutoSimd<[isize; 4]>

Source§

impl SimdValue for AutoSimd<[isize; 8]>

Source§

impl SimdValue for AutoSimd<[u8; 2]>

Source§

impl SimdValue for AutoSimd<[u8; 4]>

Source§

impl SimdValue for AutoSimd<[u8; 8]>

Source§

impl SimdValue for AutoSimd<[u8; 16]>

Source§

impl SimdValue for AutoSimd<[u8; 32]>

Source§

impl SimdValue for AutoSimd<[u16; 2]>

Source§

impl SimdValue for AutoSimd<[u16; 4]>

Source§

impl SimdValue for AutoSimd<[u16; 8]>

Source§

impl SimdValue for AutoSimd<[u16; 16]>

Source§

impl SimdValue for AutoSimd<[u16; 32]>

Source§

impl SimdValue for AutoSimd<[u32; 2]>

Source§

impl SimdValue for AutoSimd<[u32; 4]>

Source§

impl SimdValue for AutoSimd<[u32; 8]>

Source§

impl SimdValue for AutoSimd<[u32; 16]>

Source§

impl SimdValue for AutoSimd<[u64; 2]>

Source§

impl SimdValue for AutoSimd<[u64; 4]>

Source§

impl SimdValue for AutoSimd<[u64; 8]>

Source§

impl SimdValue for AutoSimd<[u128; 1]>

Source§

impl SimdValue for AutoSimd<[u128; 2]>

Source§

impl SimdValue for AutoSimd<[u128; 4]>

Source§

impl SimdValue for AutoSimd<[usize; 2]>

Source§

impl SimdValue for AutoSimd<[usize; 4]>

Source§

impl SimdValue for AutoSimd<[usize; 8]>

Source§

impl<N> SimdValue for Complex<N>
where N: SimdValue,

Source§

impl<T, R, C> SimdValue for OMatrix<T, R, C>
where T: Scalar + SimdValue, R: Dim, C: Dim, T::Element: Scalar, DefaultAllocator: Allocator<R, C>,

Source§

impl<T, const D: usize> SimdValue for Rotation<T, D>
where T: Scalar + SimdValue, T::Element: Scalar,

Source§

impl<T: Scalar + SimdValue> SimdValue for Quaternion<T>
where T::Element: Scalar,

Source§

impl<T: Scalar + SimdValue> SimdValue for UnitQuaternion<T>
where T::Element: Scalar,

Source§

impl<T: Scalar + SimdValue, const D: usize> SimdValue for Scale<T, D>
where T::Element: Scalar,

Source§

const LANES: usize = T::LANES

Source§

type Element = Scale<<T as SimdValue>::Element, D>

Source§

type SimdBool = <T as SimdValue>::SimdBool

Source§

impl<T: Scalar + SimdValue, const D: usize> SimdValue for Translation<T, D>
where T::Element: Scalar,

Source§

impl<T: Scalar + SimdValue, const D: usize> SimdValue for Point<T, D>
where T::Element: Scalar,

Source§

impl<T: RealField, C, const D: usize> SimdValue for Transform<T, C, D>

Source§

const LANES: usize = T::LANES

Source§

type Element = Transform<<T as SimdValue>::Element, C, D>

Source§

type SimdBool = <T as SimdValue>::SimdBool

Source§

impl<T: SimdRealField> SimdValue for UnitComplex<T>

Source§

impl<T: SimdRealField, R, const D: usize> SimdValue for Isometry<T, R, D>
where T::Element: SimdRealField, R: SimdValue<SimdBool = T::SimdBool> + AbstractRotation<T, D>, R::Element: AbstractRotation<T::Element, D>,

Source§

impl<T: SimdRealField, R, const D: usize> SimdValue for Similarity<T, R, D>
where T::Element: SimdRealField, R: SimdValue<SimdBool = T::SimdBool> + AbstractRotation<T, D>, R::Element: AbstractRotation<T::Element, D>,