Mask in core::simd - Rust (original) (raw)

pub struct Mask<T, const N: usize>(/* private fields */)
where
    T: MaskElement,
    LaneCount<N>: SupportedLaneCount;

🔬This is a nightly-only experimental API. (portable_simd #86656)

Expand description

A SIMD vector mask for N elements of width specified by Element.

Masks represent boolean inclusion/exclusion on a per-element basis.

The layout of this type is unspecified, and may change between platforms and/or Rust versions, and code should not assume that it is equivalent to[T; N].

Source§

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Reverse the order of the elements in the mask.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Rotates the mask such that the first OFFSET elements of the slice move to the end while the last self.len() - OFFSET elements move to the front. After calling rotate_elements_left, the element previously at index OFFSET will become the first element in the slice.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Rotates the mask such that the first self.len() - OFFSET elements of the mask move to the end while the last OFFSET elements move to the front. After calling rotate_elements_right, the element previously at index self.len() - OFFSET will become the first element in the slice.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Shifts the mask elements to the left by OFFSET, filling in withpadding from the right.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Shifts the mask elements to the right by OFFSET, filling in withpadding from the left.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Interleave two masks.

The resulting masks contain elements taken alternatively from self and other, first filling the first result, and then the second.

The reverse of this operation is Mask::deinterleave.

let a = mask32x4::from_array([false, true, false, true]);
let b = mask32x4::from_array([false, false, true, true]);
let (x, y) = a.interleave(b);
assert_eq!(x.to_array(), [false, false, true, false]);
assert_eq!(y.to_array(), [false, true, true, true]);

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Deinterleave two masks.

The first result takes every other element of self and then other, starting with the first element.

The second result takes every other element of self and then other, starting with the second element.

The reverse of this operation is Mask::interleave.

let a = mask32x4::from_array([false, true, false, true]);
let b = mask32x4::from_array([false, false, true, true]);
let (x, y) = a.deinterleave(b);
assert_eq!(x.to_array(), [false, false, false, true]);
assert_eq!(y.to_array(), [true, true, false, true]);

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Resize a mask.

If M > N, extends the length of a mask, setting the new elements to value. If M < N, truncates the mask to the first M elements.

let x = mask32x4::from_array([false, true, true, false]);
assert_eq!(x.resize::<8>(true).to_array(), [false, true, true, false, true, true, true, true]);
assert_eq!(x.resize::<2>(true).to_array(), [false, true]);

🔬This is a nightly-only experimental API. (portable_simd #86656)

Extract a vector from another vector.

let x = mask32x4::from_array([false, true, true, false]);
assert_eq!(x.extract::<1, 2>().to_array(), [true, true]);

Source§

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Constructs a mask by setting all elements to the given value.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Converts an array of bools to a SIMD mask.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Converts a SIMD mask to an array of bools.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Converts a vector of integers to a mask, where 0 represents false and -1 represents true.

§Safety

All elements must be either 0 or -1.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Converts a vector of integers to a mask, where 0 represents false and -1 represents true.

§Panics

Panics if any element is not 0 or -1.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Converts the mask to a vector of integers, where 0 represents false and -1 represents true.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Converts the mask to a mask of any other element size.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Tests the value of the specified element.

§Safety

index must be less than self.len().

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Tests the value of the specified element.

§Panics

Panics if index is greater than or equal to the number of elements in the vector.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Sets the value of the specified element.

§Safety

index must be less than self.len().

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Sets the value of the specified element.

§Panics

Panics if index is greater than or equal to the number of elements in the vector.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns true if any element is set, or false otherwise.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns true if all elements are set, or false otherwise.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Creates a bitmask from a mask.

Each bit is set if the corresponding element in the mask is true. If the mask contains more than 64 elements, the bitmask is truncated to the first 64.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Creates a mask from a bitmask.

For each bit, if it is set, the corresponding element in the mask is set to true. If the mask contains more than 64 elements, the remainder are set to false.

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Finds the index of the first set element.

assert_eq!(mask32x8::splat(false).first_set(), None);
assert_eq!(mask32x8::splat(true).first_set(), Some(0));

let mask = mask32x8::from_array([false, true, false, false, true, false, false, true]);
assert_eq!(mask.first_set(), Some(1));

Source§

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Choose elements from two vectors.

For each element in the mask, choose the corresponding element from true_values if that element mask is true, and false_values if that element mask is false.

§Examples
let a = Simd::from_array([0, 1, 2, 3]);
let b = Simd::from_array([4, 5, 6, 7]);
let mask = Mask::from_array([true, false, false, true]);
let c = mask.select(a, b);
assert_eq!(c.to_array(), [0, 5, 6, 3]);

Source

🔬This is a nightly-only experimental API. (portable_simd #86656)

Choose elements from two masks.

For each element in the mask, choose the corresponding element from true_values if that element mask is true, and false_values if that element mask is false.

§Examples
let a = Mask::<i32, 4>::from_array([true, true, false, false]);
let b = Mask::<i32, 4>::from_array([false, false, true, true]);
let mask = Mask::<i32, 4>::from_array([true, false, false, true]);
let c = mask.select_mask(a, b);
assert_eq!(c.to_array(), [true, false, true, false]);

Source§

Source§

The resulting type after applying the & operator.

Source§

Source§

Source§

The resulting type after applying the & operator.

Source§

Source§

Source§

The resulting type after applying the & operator.

Source§

Source§

Source§

Source§

Source§

The resulting type after applying the | operator.

Source§

Source§

Source§

The resulting type after applying the | operator.

Source§

Source§

Source§

The resulting type after applying the | operator.

Source§

Source§

Source§

Source§

Source§

The resulting type after applying the ^ operator.

Source§

Source§

Source§

The resulting type after applying the ^ operator.

Source§

Source§

Source§

The resulting type after applying the ^ operator.

Source§

Source§

Source§

Source§

Source§

Source§

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Converts to this type from the input type.

Source§

Source§

Source§

Tests for self and other values to be equal, and is used by ==.

1.0.0 · Source§

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Source§

Source§

This method returns an ordering between self and other values if one exists. Read more

1.0.0 · Source§

Tests less than (for self and other) and is used by the < operator. Read more

1.0.0 · Source§

Tests less than or equal to (for self and other) and is used by the<= operator. Read more

1.0.0 · Source§

Tests greater than (for self and other) and is used by the >operator. Read more

1.0.0 · Source§

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise maximum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise minimum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Restrict each element to a certain interval. Read more

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise maximum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise minimum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Restrict each element to a certain interval. Read more

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise maximum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise minimum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Restrict each element to a certain interval. Read more

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise maximum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise minimum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Restrict each element to a certain interval. Read more

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise maximum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the element-wise minimum with other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Restrict each element to a certain interval. Read more

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

The mask type returned by each comparison.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is not equal to the corresponding element in other.

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

The mask type returned by each comparison.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is not equal to the corresponding element in other.

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

The mask type returned by each comparison.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is not equal to the corresponding element in other.

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

The mask type returned by each comparison.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is not equal to the corresponding element in other.

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

The mask type returned by each comparison.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is not equal to the corresponding element in other.

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than or equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than or equal to the corresponding element in other.

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than or equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than or equal to the corresponding element in other.

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than or equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than or equal to the corresponding element in other.

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than or equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than or equal to the corresponding element in other.

Source§

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is less than or equal to the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than the corresponding element in other.

Source§

🔬This is a nightly-only experimental API. (portable_simd #86656)

Test if each element is greater than or equal to the corresponding element in other.

Source§