use crate::bitmap::*;
impl<const BYTES: usize> Default for Bitmap<BYTES> {
fn default() -> Self {
Bitmap::<BYTES>::new()
}
}
impl<const BYTES: usize> Into<[u8; BYTES]> for Bitmap<BYTES> {
fn into(self) -> [u8; BYTES] {
match BYTES == 0 {
true => [0; BYTES],
false => self.bits,
}
}
}
impl<'map, const BYTES: usize> Into<bool> for BitRef<'map, BYTES> {
fn into(self) -> bool {
self.value
}
}
impl<'map, const BYTES: usize> Into<bool> for BitRefMut<'map, BYTES> {
fn into(self) -> bool {
self.value
}
}
impl<const BYTES: usize, const N: usize> From<[u8; N]> for Bitmap<BYTES> {
fn from(value: [u8; N]) -> Self {
match BYTES == 0 {
true => Bitmap::<BYTES>::new(),
false => Bitmap {
bits: __copy_bytes(value),
},
}
}
}
macro_rules! impl_from {
($t:ty) => {
impl<const BYTES: usize> From<$t> for Bitmap<BYTES> {
fn from(value: $t) -> Self {
let arr: [u8; core::mem::size_of::<$t>()] = unsafe { core::mem::transmute(value) };
Bitmap::<BYTES>::from(arr)
}
}
};
}
impl_from!(u8);
impl_from!(i8);
impl_from!(char);
impl_from!(u16);
impl_from!(i16);
impl_from!(u32);
impl_from!(i32);
impl_from!(u64);
impl_from!(i64);
impl_from!(u128);
impl_from!(i128);
impl_from!(usize);
impl_from!(isize);