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 43 44 45 46 47 48 49 50 51 52 53 54 55
use crate::simd::SimdElement;
/// 支持 `Simd::cast` 的 trait。通常不需要直接使用。
///
/// # Safety
/// 实现此 trait 断言该类型是 `simd_cast` 或 `simd_as` 内部函数的有效 vector 元素。
///
pub unsafe trait SimdCast: SimdElement {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for i8 {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for i16 {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for i32 {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for i64 {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for isize {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for u8 {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for u16 {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for u32 {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for u64 {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for usize {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for f32 {}
// 安全: 原始数字类型可以转换为其他原始数字类型
unsafe impl SimdCast for f64 {}
/// 支持 `Simd::cast_ptr` 的 trait。通常不需要直接使用。
///
/// # Safety
/// 实现此 trait 断言该类型是 `simd_cast_ptr` 内部函数的有效 vector 元素。
///
pub unsafe trait SimdCastPtr<T> {}
// 安全性: 指针可以转换为其他指针类型
unsafe impl<T, U> SimdCastPtr<T> for *const U
where
U: core::ptr::Pointee,
T: core::ptr::Pointee<Metadata = U::Metadata>,
{
}
// 安全性: 指针可以转换为其他指针类型
unsafe impl<T, U> SimdCastPtr<T> for *mut U
where
U: core::ptr::Pointee,
T: core::ptr::Pointee<Metadata = U::Metadata>,
{
}