pub trait SizeOps {
fn bits() -> u32;
fn min_value() -> Self;
fn max_value() -> Self;
}
macro_rules! impl_size_int {
($($t:ty),*) => {
$(impl SizeOps for $t {
#[inline] fn bits() -> u32 { Self::BITS }
#[inline] fn min_value() -> Self { Self::MIN }
#[inline] fn max_value() -> Self { Self::MAX }
})*
};
}
impl_size_int!(u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize);
macro_rules! impl_size_float {
($($t:ty: $size:expr),*) => {
$(impl SizeOps for $t {
#[inline] fn bits() -> u32 { $size }
#[inline] fn min_value() -> Self { Self::MIN }
#[inline] fn max_value() -> Self { Self::MAX }
})*
};
}
impl_size_float!(f32: 32, f64: 64);