stack_arena/
traits.rs

1use std::{alloc::Layout, ptr::NonNull};
2
3use crate::AllocError;
4
5pub trait Allocator {
6    // Required methods
7    fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>;
8    unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout);
9
10    // Provided methods
11    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}