1#![doc = include_str!("../README.md")]
2#![no_std]
3#![deny(missing_docs)]
4#![cfg_attr(docsrs, feature(doc_auto_cfg))]
5#![cfg_attr(feature = "allocator_api", feature(allocator_api))]
6
7use cfg_if::cfg_if;
8use core::{alloc::Layout, ptr::NonNull};
9
10mod default;
11pub use default::DefaultDeallocateZeroed;
12
13cfg_if! {
14 if #[cfg(feature = "zero_aware_allocator")] {
15 mod zero_aware_allocator;
16 pub use zero_aware_allocator::{
17 LockingMechanism, Mutex, MutexGuard, SingleThreadedLockingMechanism, ZeroAwareAllocator,
18 };
19 }
20}
21
22cfg_if! {
23 if #[cfg(feature = "allocator_api")] {
24 pub use core::alloc::{AllocError, Allocator};
25 } else if #[cfg(feature = "allocator_api2")] {
26 pub use allocator_api2::alloc::{AllocError, Allocator};
27 } else {
28 compile_error!("Must enable one of the `allocator_api` or `allocator_api2` cargo features");
29 }
30}
31
32pub trait DeallocateZeroed: Allocator {
34 #[inline]
43 unsafe fn deallocate_zeroed(&self, pointer: NonNull<u8>, layout: Layout) {
44 self.deallocate(pointer, layout);
45 }
46}