bump_scope/traits/
mut_bump_allocator.rs

1use crate::{
2    BaseAllocator, Bump, BumpAllocator, BumpScope, MinimumAlignment, SupportedMinimumAlignment, WithoutDealloc,
3    WithoutShrink, traits::assert_implements,
4};
5
6/// A marker trait for [`BumpAllocator`]s who have exclusive access to allocation.
7///
8/// # Safety
9///
10/// Implementors must have exclusive access to to the bump allocator.
11pub unsafe trait MutBumpAllocator: BumpAllocator {}
12
13assert_implements! {
14    [MutBumpAllocator + ?Sized]
15
16    Bump
17    &mut Bump
18
19    BumpScope
20    &mut BumpScope
21
22    dyn MutBumpAllocator
23    &mut dyn MutBumpAllocator
24}
25
26unsafe impl<A: MutBumpAllocator + ?Sized> MutBumpAllocator for &mut A {}
27
28unsafe impl<A: MutBumpAllocator> MutBumpAllocator for WithoutDealloc<A> {}
29unsafe impl<A: MutBumpAllocator> MutBumpAllocator for WithoutShrink<A> {}
30
31unsafe impl<A, const MIN_ALIGN: usize, const UP: bool, const GUARANTEED_ALLOCATED: bool, const DEALLOCATES: bool>
32    MutBumpAllocator for Bump<A, MIN_ALIGN, UP, GUARANTEED_ALLOCATED, DEALLOCATES>
33where
34    MinimumAlignment<MIN_ALIGN>: SupportedMinimumAlignment,
35    A: BaseAllocator<GUARANTEED_ALLOCATED>,
36{
37}
38
39unsafe impl<A, const MIN_ALIGN: usize, const UP: bool, const GUARANTEED_ALLOCATED: bool, const DEALLOCATES: bool>
40    MutBumpAllocator for BumpScope<'_, A, MIN_ALIGN, UP, GUARANTEED_ALLOCATED, DEALLOCATES>
41where
42    MinimumAlignment<MIN_ALIGN>: SupportedMinimumAlignment,
43    A: BaseAllocator<GUARANTEED_ALLOCATED>,
44{
45}