//! Sealed traits /// A sealed trait, this is logically private to the crate /// and will prevent implementations from outside the crate pub trait Seal {} /// Trait implemented by arrays that can be SIMD types. pub trait SimdArray: Seal { /// The type of the #[repr(simd)] type. type Tuple: Copy + Clone; /// The element type of the vector. type T; /// The number of elements in the array. const N: usize; /// The type: `[u32; Self::N]`. type NT; } /// This traits is used to constraint the arguments /// and result type of the portable shuffles. #[doc(hidden)] pub trait Shuffle: Seal { // Lanes is a `[u32; N]` where `N` is the number of vector lanes /// The result type of the shuffle. type Output; } /// This trait is implemented by all SIMD vector types. pub trait Simd: Seal { /// Element type of the SIMD vector type Element; /// The number of elements in the SIMD vector. const LANES: usize; /// The type: `[u32; Self::N]`. type LanesType; } /// This trait is implemented by all mask types pub trait Mask: Seal { fn test(&self) -> bool; }