1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
//! Sealed traits /// A sealed trait, this is logically private to the crate /// and will prevent implementations from outside the crate pub trait Seal<T = ()> {} /// 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<Lanes>: Seal<Lanes> { // 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; }