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]
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Reverse the order of the elements in the mask.
🔬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.
🔬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.
🔬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.
🔬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.
🔬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]);
🔬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]);
🔬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]);
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Constructs a mask by setting all elements to the given value.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Converts an array of bools to a SIMD mask.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Converts a SIMD mask to an array of bools.
🔬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.
🔬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.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Converts the mask to a mask of any other element size.
🔬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()
.
🔬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.
🔬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()
.
🔬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.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns true if any element is set, or false otherwise.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns true if all elements are set, or false otherwise.
🔬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.
🔬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
.
🔬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));
🔬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]);
🔬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]);
The resulting type after applying the &
operator.
The resulting type after applying the &
operator.
The resulting type after applying the &
operator.
The resulting type after applying the |
operator.
The resulting type after applying the |
operator.
The resulting type after applying the |
operator.
The resulting type after applying the ^
operator.
The resulting type after applying the ^
operator.
The resulting type after applying the ^
operator.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Converts to this type from the input type.
Tests for self
and other
values to be equal, and is used by ==
.
Tests for !=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
This method returns an ordering between self
and other
values if one exists. Read more
Tests less than (for self
and other
) and is used by the <
operator. Read more
Tests less than or equal to (for self
and other
) and is used by the<=
operator. Read more
Tests greater than (for self
and other
) and is used by the >
operator. Read more
Tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise maximum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise minimum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Restrict each element to a certain interval. Read more
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise maximum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise minimum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Restrict each element to a certain interval. Read more
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise maximum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise minimum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Restrict each element to a certain interval. Read more
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise maximum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise minimum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Restrict each element to a certain interval. Read more
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise maximum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Returns the element-wise minimum with other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Restrict each element to a certain interval. Read more
🔬This is a nightly-only experimental API. (portable_simd
#86656)
The mask type returned by each comparison.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is not equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
The mask type returned by each comparison.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is not equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
The mask type returned by each comparison.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is not equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
The mask type returned by each comparison.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is not equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
The mask type returned by each comparison.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is not equal to the corresponding element in other
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is less than the corresponding element in other
.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is greater than the corresponding element in other
.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is less than the corresponding element in other
.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is greater than the corresponding element in other
.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is less than the corresponding element in other
.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is greater than the corresponding element in other
.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is less than the corresponding element in other
.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is greater than the corresponding element in other
.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is less than the corresponding element in other
.
🔬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
.
🔬This is a nightly-only experimental API. (portable_simd
#86656)
Test if each element is greater than the corresponding element in other
.
🔬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
.