use super::*;
pub trait FillPrefix<T: Sized> {
fn fill_prefix(&mut self, value:T) -> &mut Self;
}
impl<const BYTES: usize, const N: usize> FillPrefix<[u8; N]> for Bitmap<BYTES> {
fn fill_prefix(&mut self, mut value: [u8; N]) -> &mut Self {
__copy_bytes_to(&mut self.bits, &mut value);
self
}
}
macro_rules! impl_fill_prefix {
($t:ty) => {
impl<const BYTES: usize> FillPrefix<$t> for Bitmap<BYTES> {
fn fill_prefix(&mut self, mut value: $t) -> &mut Self {
const SIZE: usize = core::mem::size_of::<$t>();
unsafe {
let ptr = (&mut value as *mut $t).cast::<[u8; SIZE]>();
__copy_bytes_to(&mut self.bits, &mut *ptr);
};
self
}
}
};
}
impl_fill_prefix!(u8);
impl_fill_prefix!(i8);
impl_fill_prefix!(char);
impl_fill_prefix!(u16);
impl_fill_prefix!(i16);
impl_fill_prefix!(u32);
impl_fill_prefix!(i32);
impl_fill_prefix!(u64);
impl_fill_prefix!(i64);
impl_fill_prefix!(u128);
impl_fill_prefix!(i128);
impl_fill_prefix!(usize);
impl_fill_prefix!(isize);