1use std::{alloc::Layout, ptr::NonNull};
2
3use crate::AllocError;
4
5pub trait Allocator {
6 fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>;
8 unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout);
9
10 fn allocate_zeroed(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {
12 let ptr = self.allocate(layout)?;
13 unsafe { std::ptr::write_bytes(ptr.as_ptr() as *mut u8, 0, layout.size()) };
14 Ok(ptr)
15 }
16 unsafe fn grow(
17 &self,
18 ptr: NonNull<u8>,
19 old_layout: Layout,
20 new_layout: Layout,
21 ) -> Result<NonNull<[u8]>, AllocError> {
22 todo!()
23 }
24 unsafe fn grow_zeroed(
25 &self,
26 ptr: NonNull<u8>,
27 old_layout: Layout,
28 new_layout: Layout,
29 ) -> Result<NonNull<[u8]>, AllocError> {
30 todo!()
31 }
32 unsafe fn shrink(
33 &self,
34 ptr: NonNull<u8>,
35 old_layout: Layout,
36 new_layout: Layout,
37 ) -> Result<NonNull<[u8]>, AllocError> {
38 todo!()
39 }
40 fn by_ref(&self) -> &Self
41 where
42 Self: Sized,
43 {
44 todo!()
45 }
46}