macro_rules! unsafe_is_length {
($expr:expr) => {
if $expr as u64 >= 0x7FFFFFFF_FFFFFFFF {
unsafe { std::hint::unreachable_unchecked() }
}
}
}
pub unsafe trait ZeroCopyable< C, T > where T: ?Sized {}
unsafe impl< C, T > ZeroCopyable< C, T > for i8 {}
unsafe impl< C, T > ZeroCopyable< C, T > for u8 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for i16 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for u16 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for i32 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for u32 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for i64 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for u64 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for i128 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for u128 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for f32 {}
unsafe impl< T > ZeroCopyable< crate::context::NativeContext, T > for f64 {}
pub trait SwapBytes {
fn swap_bytes( self ) -> Self;
}
impl SwapBytes for f32 {
#[inline(always)]
fn swap_bytes( self ) -> Self {
union Union {
float: f32,
int: u32
}
unsafe {
let mut u = Union { float: self };
u.int = u.int.swap_bytes();
u.float
}
}
}
impl SwapBytes for f64 {
#[inline(always)]
fn swap_bytes( self ) -> Self {
union Union {
float: f64,
int: u64
}
unsafe {
let mut u = Union { float: self };
u.int = u.int.swap_bytes();
u.float
}
}
}