use super::cons::*;
pub trait IntoRawBits64: Copy + Clone + Sized {
fn as_raw_bits_64(&self) -> u64;
#[inline(always)]
fn as_raw_bits_64_without_sign(&self) -> u64 {
self.as_raw_bits_64() & !SIGN_BIT
}
#[inline(always)]
fn is_float(&self) -> bool {
crate::is_float(*self)
}
#[inline(always)]
fn is_nanval(&self) -> bool {
crate::is_nanval(*self)
}
#[inline(always)]
fn is_nan(&self) -> bool {
self.as_raw_bits_64() == NAN_BITS
}
#[inline(always)]
fn is_infinity(&self) -> bool {
self.as_raw_bits_64_without_sign() == POS_INF_BITS
}
#[inline(always)]
fn is_positive_infinity(&self) -> bool {
self.as_raw_bits_64() == POS_INF_BITS
}
#[inline(always)]
fn is_negative_infinity(&self) -> bool {
self.as_raw_bits_64() == NEG_INF_BITS
}
#[inline(always)]
fn unwrap_float(&self) -> Option<f64> {
crate::unwrap_float(self.as_raw_bits_64())
}
#[inline(always)]
fn unwrap_float_unchecked(&self) -> f64 {
crate::unwrap_float_unchecked(self.as_raw_bits_64())
}
}
impl IntoRawBits64 for [core::primitive::u8; 8] {
#[inline(always)]
fn as_raw_bits_64(&self) -> u64 {
core::primitive::u64::from_ne_bytes(*self)
}
}
impl IntoRawBits64 for core::primitive::f64 {
#[inline(always)]
fn as_raw_bits_64(&self) -> u64 {
self.to_bits()
}
#[inline(always)]
fn unwrap_float_unchecked(&self) -> f64 {
*self
}
}
impl IntoRawBits64 for core::primitive::u64 {
#[inline(always)]
fn as_raw_bits_64(&self) -> u64 {
*self
}
}
impl IntoRawBits64 for core::num::NonZeroU64 {
#[inline(always)]
fn as_raw_bits_64(&self) -> u64 {
self.get()
}
}
impl IntoRawBits64 for &[core::primitive::u8] {
#[inline(always)]
fn as_raw_bits_64(&self) -> u64 {
match self.len() >= 8 {
true => {
let bytes = self[0..=3].try_into().unwrap();
core::primitive::u64::from_ne_bytes(bytes)
},
false => panic!("not enough bytes to transmute into a u64")
}
}
}