#[derive(Debug, Copy, Clone)]
pub struct HeapAllocator;
impl Allocator for HeapAllocator
{
#[inline(always)]
fn align_malloc<P>(&mut self, alignment: usize) -> NonNull<P>
{
let size = size_of::<P>();
let mut heap = Heap;
unsafe { NonNull::new_unchecked(heap.alloc(Layout::from_size_align_unchecked(size, alignment)).unwrap() as *mut P) }
}
#[inline(always)]
fn free_page_size<P>(&mut self, pointer: NonNull<P>)
{
let size = size_of::<P>();
let mut heap = Heap;
unsafe { heap.dealloc(pointer.as_ptr() as *mut u8, Layout::from_size_align_unchecked(size, Self::PAGE_SIZE)) }
}
#[inline(always)]
fn free_cache_line_size<P>(&mut self, pointer: NonNull<P>)
{
let size = size_of::<P>();
let mut heap = Heap;
unsafe { heap.dealloc(pointer.as_ptr() as *mut u8, Layout::from_size_align_unchecked(size, Self::CACHE_LINE_SIZE)) }
}
#[inline(always)]
fn free<P>(&mut self, pointer: NonNull<P>)
{
let mut heap = Heap;
unsafe { heap.dealloc(pointer.as_ptr() as *mut u8, Layout::new::<P>()) }
}
}