pub struct Mask<T, const N: usize>(/* private fields */)
where
T: MaskElement,
LaneCount<N>: SupportedLaneCount;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].
Implementations§
source§impl<T, const N: usize> Mask<T, N>
impl<T, const N: usize> Mask<T, N>
sourcepub fn splat(value: bool) -> Mask<T, N>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn splat(value: bool) -> Mask<T, N>
portable_simd #86656)Construct a mask by setting all elements to the given value.
sourcepub fn from_array(array: [bool; N]) -> Mask<T, N>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn from_array(array: [bool; N]) -> Mask<T, N>
portable_simd #86656)Converts an array of bools to a SIMD mask.
sourcepub fn to_array(self) -> [bool; N]
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn to_array(self) -> [bool; N]
portable_simd #86656)Converts a SIMD mask to an array of bools.
sourcepub unsafe fn from_int_unchecked(value: Simd<T, N>) -> Mask<T, N>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub unsafe fn from_int_unchecked(value: Simd<T, N>) -> Mask<T, N>
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.
sourcepub fn from_int(value: Simd<T, N>) -> Mask<T, N>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn from_int(value: Simd<T, N>) -> Mask<T, N>
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.
sourcepub fn to_int(self) -> Simd<T, N>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn to_int(self) -> Simd<T, N>
portable_simd #86656)Converts the mask to a vector of integers, where 0 represents false and -1
represents true.
sourcepub fn cast<U>(self) -> Mask<U, N>where
U: MaskElement,
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn cast<U>(self) -> Mask<U, N>where
U: MaskElement,
portable_simd #86656)Converts the mask to a mask of any other element size.
sourcepub unsafe fn test_unchecked(&self, index: usize) -> bool
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub unsafe fn test_unchecked(&self, index: usize) -> bool
portable_simd #86656)sourcepub fn test(&self, index: usize) -> bool
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn test(&self, index: usize) -> bool
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.
sourcepub unsafe fn set_unchecked(&mut self, index: usize, value: bool)
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub unsafe fn set_unchecked(&mut self, index: usize, value: bool)
portable_simd #86656)sourcepub fn set(&mut self, index: usize, value: bool)
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn set(&mut self, index: usize, value: bool)
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.
sourcepub fn any(self) -> bool
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn any(self) -> bool
portable_simd #86656)Returns true if any element is set, or false otherwise.
sourcepub fn all(self) -> bool
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn all(self) -> bool
portable_simd #86656)Returns true if all elements are set, or false otherwise.
sourcepub fn to_bitmask(self) -> u64
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn to_bitmask(self) -> u64
portable_simd #86656)Create 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.
sourcepub fn from_bitmask(bitmask: u64) -> Mask<T, N>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn from_bitmask(bitmask: u64) -> Mask<T, N>
portable_simd #86656)Create 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.
sourcepub fn to_bitmask_vector(self) -> Simd<u8, N>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn to_bitmask_vector(self) -> Simd<u8, N>
portable_simd #86656)Create a bitmask vector from a mask.
Each bit is set if the corresponding element in the mask is true.
The remaining bits are unset.
The bits are packed into the first N bits of the vector:
let mask = mask32x8::from_array([true, false, true, false, false, false, true, false]);
assert_eq!(mask.to_bitmask_vector()[0], 0b01000101);Runsourcepub fn from_bitmask_vector(bitmask: Simd<u8, N>) -> Mask<T, N>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn from_bitmask_vector(bitmask: Simd<u8, N>) -> Mask<T, N>
portable_simd #86656)Create a mask from a bitmask vector.
For each bit, if it is set, the corresponding element in the mask is set to true.
The bits are packed into the first N bits of the vector:
let bitmask = u8x8::from_array([0b01000101, 0, 0, 0, 0, 0, 0, 0]);
assert_eq!(
mask32x8::from_bitmask_vector(bitmask),
mask32x8::from_array([true, false, true, false, false, false, true, false]),
);Runsourcepub fn first_set(self) -> Option<usize>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn first_set(self) -> Option<usize>
portable_simd #86656)Find 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));Runsource§impl<T, const N: usize> Mask<T, N>
impl<T, const N: usize> Mask<T, N>
sourcepub fn select<U>(
self,
true_values: Simd<U, N>,
false_values: Simd<U, N>
) -> Simd<U, N>where
U: SimdElement<Mask = T>,
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn select<U>(
self,
true_values: Simd<U, N>,
false_values: Simd<U, N>
) -> Simd<U, N>where
U: SimdElement<Mask = T>,
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]);Runsourcepub fn select_mask(
self,
true_values: Mask<T, N>,
false_values: Mask<T, N>
) -> Mask<T, N>
🔬This is a nightly-only experimental API. (portable_simd #86656)
pub fn select_mask( self, true_values: Mask<T, N>, false_values: Mask<T, N> ) -> Mask<T, N>
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]);RunTrait Implementations§
source§impl<T, const N: usize> BitAndAssign<bool> for Mask<T, N>
impl<T, const N: usize> BitAndAssign<bool> for Mask<T, N>
source§fn bitand_assign(&mut self, rhs: bool)
fn bitand_assign(&mut self, rhs: bool)
&= operation. Read moresource§impl<T, const N: usize> BitAndAssign for Mask<T, N>
impl<T, const N: usize> BitAndAssign for Mask<T, N>
source§fn bitand_assign(&mut self, rhs: Mask<T, N>)
fn bitand_assign(&mut self, rhs: Mask<T, N>)
&= operation. Read moresource§impl<T, const N: usize> BitOrAssign<bool> for Mask<T, N>
impl<T, const N: usize> BitOrAssign<bool> for Mask<T, N>
source§fn bitor_assign(&mut self, rhs: bool)
fn bitor_assign(&mut self, rhs: bool)
|= operation. Read moresource§impl<T, const N: usize> BitOrAssign for Mask<T, N>
impl<T, const N: usize> BitOrAssign for Mask<T, N>
source§fn bitor_assign(&mut self, rhs: Mask<T, N>)
fn bitor_assign(&mut self, rhs: Mask<T, N>)
|= operation. Read moresource§impl<T, const N: usize> BitXorAssign<bool> for Mask<T, N>
impl<T, const N: usize> BitXorAssign<bool> for Mask<T, N>
source§fn bitxor_assign(&mut self, rhs: bool)
fn bitxor_assign(&mut self, rhs: bool)
^= operation. Read moresource§impl<T, const N: usize> BitXorAssign for Mask<T, N>
impl<T, const N: usize> BitXorAssign for Mask<T, N>
source§fn bitxor_assign(&mut self, rhs: Mask<T, N>)
fn bitxor_assign(&mut self, rhs: Mask<T, N>)
^= operation. Read moresource§impl<const N: usize> From<Mask<i16, N>> for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i16, N>> for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i16, N>> for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i16, N>> for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i16, N>> for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i16, N>> for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i16, N>> for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i16, N>> for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i32, N>> for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i32, N>> for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i32, N>> for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i32, N>> for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i32, N>> for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i32, N>> for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i32, N>> for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i32, N>> for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i64, N>> for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i64, N>> for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i64, N>> for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i64, N>> for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i64, N>> for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i64, N>> for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i64, N>> for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i64, N>> for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i8, N>> for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i8, N>> for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i8, N>> for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i8, N>> for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i8, N>> for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i8, N>> for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<i8, N>> for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<i8, N>> for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<isize, N>> for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<isize, N>> for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<isize, N>> for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<isize, N>> for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<isize, N>> for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<isize, N>> for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<const N: usize> From<Mask<isize, N>> for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> From<Mask<isize, N>> for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
source§impl<T, const N: usize> PartialEq for Mask<T, N>
impl<T, const N: usize> PartialEq for Mask<T, N>
source§impl<T, const N: usize> PartialOrd for Mask<T, N>
impl<T, const N: usize> PartialOrd for Mask<T, N>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read moresource§impl<const N: usize> SimdOrd for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdOrd for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_max(self, other: Mask<i16, N>) -> Mask<i16, N>
fn simd_max(self, other: Mask<i16, N>) -> Mask<i16, N>
portable_simd #86656)other.source§impl<const N: usize> SimdOrd for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdOrd for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_max(self, other: Mask<i32, N>) -> Mask<i32, N>
fn simd_max(self, other: Mask<i32, N>) -> Mask<i32, N>
portable_simd #86656)other.source§impl<const N: usize> SimdOrd for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdOrd for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_max(self, other: Mask<i64, N>) -> Mask<i64, N>
fn simd_max(self, other: Mask<i64, N>) -> Mask<i64, N>
portable_simd #86656)other.source§impl<const N: usize> SimdOrd for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdOrd for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_max(self, other: Mask<i8, N>) -> Mask<i8, N>
fn simd_max(self, other: Mask<i8, N>) -> Mask<i8, N>
portable_simd #86656)other.source§impl<const N: usize> SimdOrd for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdOrd for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_max(self, other: Mask<isize, N>) -> Mask<isize, N>
fn simd_max(self, other: Mask<isize, N>) -> Mask<isize, N>
portable_simd #86656)other.source§impl<const N: usize> SimdPartialEq for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialEq for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
§type Mask = Mask<i16, N>
type Mask = Mask<i16, N>
portable_simd #86656)source§impl<const N: usize> SimdPartialEq for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialEq for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
§type Mask = Mask<i32, N>
type Mask = Mask<i32, N>
portable_simd #86656)source§impl<const N: usize> SimdPartialEq for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialEq for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
§type Mask = Mask<i64, N>
type Mask = Mask<i64, N>
portable_simd #86656)source§impl<const N: usize> SimdPartialEq for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialEq for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
§type Mask = Mask<i8, N>
type Mask = Mask<i8, N>
portable_simd #86656)source§impl<const N: usize> SimdPartialEq for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialEq for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
§type Mask = Mask<isize, N>
type Mask = Mask<isize, N>
portable_simd #86656)source§impl<const N: usize> SimdPartialOrd for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialOrd for Mask<i16, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_lt(self, other: Mask<i16, N>) -> <Mask<i16, N> as SimdPartialEq>::Mask
fn simd_lt(self, other: Mask<i16, N>) -> <Mask<i16, N> as SimdPartialEq>::Mask
portable_simd #86656)other.source§fn simd_le(self, other: Mask<i16, N>) -> <Mask<i16, N> as SimdPartialEq>::Mask
fn simd_le(self, other: Mask<i16, N>) -> <Mask<i16, N> as SimdPartialEq>::Mask
portable_simd #86656)other.source§impl<const N: usize> SimdPartialOrd for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialOrd for Mask<i32, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_lt(self, other: Mask<i32, N>) -> <Mask<i32, N> as SimdPartialEq>::Mask
fn simd_lt(self, other: Mask<i32, N>) -> <Mask<i32, N> as SimdPartialEq>::Mask
portable_simd #86656)other.source§fn simd_le(self, other: Mask<i32, N>) -> <Mask<i32, N> as SimdPartialEq>::Mask
fn simd_le(self, other: Mask<i32, N>) -> <Mask<i32, N> as SimdPartialEq>::Mask
portable_simd #86656)other.source§impl<const N: usize> SimdPartialOrd for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialOrd for Mask<i64, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_lt(self, other: Mask<i64, N>) -> <Mask<i64, N> as SimdPartialEq>::Mask
fn simd_lt(self, other: Mask<i64, N>) -> <Mask<i64, N> as SimdPartialEq>::Mask
portable_simd #86656)other.source§fn simd_le(self, other: Mask<i64, N>) -> <Mask<i64, N> as SimdPartialEq>::Mask
fn simd_le(self, other: Mask<i64, N>) -> <Mask<i64, N> as SimdPartialEq>::Mask
portable_simd #86656)other.source§impl<const N: usize> SimdPartialOrd for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialOrd for Mask<i8, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_lt(self, other: Mask<i8, N>) -> <Mask<i8, N> as SimdPartialEq>::Mask
fn simd_lt(self, other: Mask<i8, N>) -> <Mask<i8, N> as SimdPartialEq>::Mask
portable_simd #86656)other.source§fn simd_le(self, other: Mask<i8, N>) -> <Mask<i8, N> as SimdPartialEq>::Mask
fn simd_le(self, other: Mask<i8, N>) -> <Mask<i8, N> as SimdPartialEq>::Mask
portable_simd #86656)other.source§impl<const N: usize> SimdPartialOrd for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> SimdPartialOrd for Mask<isize, N>where
LaneCount<N>: SupportedLaneCount,
source§fn simd_lt(
self,
other: Mask<isize, N>
) -> <Mask<isize, N> as SimdPartialEq>::Mask
fn simd_lt( self, other: Mask<isize, N> ) -> <Mask<isize, N> as SimdPartialEq>::Mask
portable_simd #86656)other.source§fn simd_le(
self,
other: Mask<isize, N>
) -> <Mask<isize, N> as SimdPartialEq>::Mask
fn simd_le( self, other: Mask<isize, N> ) -> <Mask<isize, N> as SimdPartialEq>::Mask
portable_simd #86656)other.