summaryrefslogtreecommitdiffstats
path: root/third_party/rust/packed_simd/src/sealed.rs
blob: 0ec20300fdd42c4f83b313ac35811674b60bb020 (plain)
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;
}