use crate::simd::SimdElement; mod sealed { /// Cast vector elements to other types. /// /// # Safety /// Implementing this trait asserts that the type is a valid vector element for the `simd_cast` /// or `simd_as` intrinsics. pub unsafe trait Sealed {} } use sealed::Sealed; /// Supporting trait for `Simd::cast`. Typically doesn't need to be used directly. pub trait SimdCast: Sealed + SimdElement {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for i8 {} impl SimdCast for i8 {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for i16 {} impl SimdCast for i16 {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for i32 {} impl SimdCast for i32 {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for i64 {} impl SimdCast for i64 {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for isize {} impl SimdCast for isize {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for u8 {} impl SimdCast for u8 {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for u16 {} impl SimdCast for u16 {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for u32 {} impl SimdCast for u32 {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for u64 {} impl SimdCast for u64 {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for usize {} impl SimdCast for usize {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for f32 {} impl SimdCast for f32 {} // Safety: primitive number types can be cast to other primitive number types unsafe impl Sealed for f64 {} impl SimdCast for f64 {}