composable_allocators/
system.rs1use crate::base::*;
2use const_default_derive::ConstDefault;
3use core::alloc::{self, AllocError, Allocator};
4use core::ptr::NonNull;
5
6#[cfg(windows)]
7const IMPL: crate::winapi::WinApi = crate::winapi::WinApi;
8
9#[cfg(not(windows))]
10const IMPL: crate::posix::Posix = crate::posix::Posix;
11
12#[derive(Debug, Copy, Clone, ConstDefault)]
13pub struct System;
14
15unsafe impl NonUnwinding for System { }
16
17unsafe impl Allocator for System {
18 fn allocate(&self, layout: alloc::Layout) -> Result<NonNull<[u8]>, AllocError> {
19 IMPL.allocate(layout)
20 }
21
22 fn allocate_zeroed(&self, layout: alloc::Layout) -> Result<NonNull<[u8]>, AllocError> {
23 IMPL.allocate_zeroed(layout)
24 }
25
26 unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: alloc::Layout) {
27 IMPL.deallocate(ptr, layout)
28 }
29
30 unsafe fn grow(
31 &self,
32 ptr: NonNull<u8>,
33 old_layout: alloc::Layout,
34 new_layout: alloc::Layout
35 ) -> Result<NonNull<[u8]>, AllocError> {
36 IMPL.grow(ptr, old_layout, new_layout)
37 }
38
39 unsafe fn grow_zeroed(
40 &self,
41 ptr: NonNull<u8>,
42 old_layout: alloc::Layout,
43 new_layout: alloc::Layout
44 ) -> Result<NonNull<[u8]>, AllocError> {
45 IMPL.grow_zeroed(ptr, old_layout, new_layout)
46 }
47
48 unsafe fn shrink(
49 &self,
50 ptr: NonNull<u8>,
51 old_layout: alloc::Layout,
52 new_layout: alloc::Layout
53 ) -> Result<NonNull<[u8]>, AllocError> {
54 IMPL.shrink(ptr, old_layout, new_layout)
55 }
56}