pub unsafe trait Allocator {
// Required methods
fn allocate(&self, layout: Layout) -> Option<NonNull<u8>>;
unsafe fn deallocate(&self, pointer: *mut u8, layout: Layout);
unsafe fn reallocate(
&self,
pointer: *mut u8,
oldSize: usize,
layout: Layout,
) -> Option<NonNull<u8>>;
// Provided methods
unsafe fn allocate_aligned(&self, layout: Layout) -> Option<NonNull<u8>> { ... }
unsafe fn deallocate_aligned(&self, pointer: *mut u8, layout: Layout) { ... }
}