use super::{cons::*, IntoRawBits64};
use core::num::NonZeroU64;
pub const UINT_MARKER_BITS: u64 = NAN_BITS;
pub const UINT_MARKER_MASK: u64 = SIGN_BIT | NAN_BITS;
pub const UINT_DATA_BITS: u64 = !UINT_MARKER_MASK;
#[inline(always)]
pub fn is_uint(value: impl IntoRawBits64) -> bool {
(value.as_raw_bits_64() & (UINT_MARKER_MASK)) == UINT_MARKER_BITS
}
#[inline(always)]
pub fn is_not_uint(value: impl IntoRawBits64) -> bool {
(value.as_raw_bits_64() & (UINT_MARKER_MASK)) != UINT_MARKER_BITS
}
#[inline(always)]
pub fn unwrap_uint_unchecked(value: impl IntoRawBits64) -> u64 {
value.as_raw_bits_64() & UINT_DATA_BITS
}
#[inline(always)]
pub fn unwrap_uint(value: impl IntoRawBits64) -> Option<u64> {
match is_uint(value) {
true => Some(unwrap_uint_unchecked(value)),
false => None
}
}
#[inline(always)]
pub fn unwrap_uint_nonzero(value: impl IntoRawBits64) -> Option<NonZeroU64> {
match is_uint(value) {
true => NonZeroU64::new(unwrap_uint_unchecked(value)),
false => None
}
}