bump_scope/
chunk_header.rs1use core::{cell::Cell, ptr::NonNull};
2
3use crate::polyfill::non_null;
4
5#[repr(C, align(16))]
11pub(crate) struct ChunkHeader<A = ()> {
12 pub(crate) pos: Cell<NonNull<u8>>,
13 pub(crate) end: NonNull<u8>,
14
15 pub(crate) prev: Cell<Option<NonNull<Self>>>,
16 pub(crate) next: Cell<Option<NonNull<Self>>>,
17
18 pub(crate) allocator: A,
19}
20
21struct UnallocatedChunkHeader(ChunkHeader);
24
25unsafe impl Sync for UnallocatedChunkHeader {}
26
27static UNALLOCATED_CHUNK_HEADER: UnallocatedChunkHeader = UnallocatedChunkHeader(ChunkHeader {
28 pos: Cell::new(NonNull::<UnallocatedChunkHeader>::dangling().cast()),
29 end: NonNull::<UnallocatedChunkHeader>::dangling().cast(),
30 prev: Cell::new(None),
31 next: Cell::new(None),
32 allocator: (),
33});
34
35impl ChunkHeader {
36 pub(crate) const UNALLOCATED: NonNull<ChunkHeader> = non_null::from_ref(&UNALLOCATED_CHUNK_HEADER.0);
37}