summaryrefslogtreecommitdiffstats
path: root/third_party/rust/packed_simd/src/sealed.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/packed_simd/src/sealed.rs')
-rw-r--r--third_party/rust/packed_simd/src/sealed.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/third_party/rust/packed_simd/src/sealed.rs b/third_party/rust/packed_simd/src/sealed.rs
new file mode 100644
index 0000000000..0ec20300fd
--- /dev/null
+++ b/third_party/rust/packed_simd/src/sealed.rs
@@ -0,0 +1,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;
+}