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)
portable_simd #86656)Reverse the order of the elements in the mask.
Source 🔬This is a nightly-only experimental API. (portable_simd #86656)
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)
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)
portable_simd #86656)Shifts the mask elements to the left by OFFSET, filling in with
padding from the right.
Source 🔬This is a nightly-only experimental API. (portable_simd #86656)
portable_simd #86656)Shifts the mask elements to the right by OFFSET, filling in with
padding from the left.
Source 🔬This is a nightly-only experimental API. (portable_simd #86656)
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)
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)
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)
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)
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)
portable_simd #86656)Converts an array of bools to a SIMD mask.
Source 🔬This is a nightly-only experimental API. (portable_simd #86656)
portable_simd #86656)Converts a SIMD mask to an array of bools.
Source 🔬This is a nightly-only experimental API. (portable_simd #86656)
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)
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)
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)
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)
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)
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)
portable_simd #86656)Returns true if any element is set, or false otherwise.
Source 🔬This is a nightly-only experimental API. (portable_simd #86656)
portable_simd #86656)Returns true if all elements are set, or false otherwise.
Source 🔬This is a nightly-only experimental API. (portable_simd #86656)
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)
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)
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)
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)
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§
Source§
Source§
Source§
Source§
Source§
Source§
Source§
Source§
Source§
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§
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§
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§
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§
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.