Struct pages::Page [−][src]
#[repr(transparent)]pub struct Page<H, T> { /* fields omitted */ }
Expand description
A dynamically-sized heap-backed data page. Comprises a user-chosen header and
data array packed into a single allocation. It is an owned object and the
internal representation is a NonNull
.
Example
use pages::Page; // A really crappy replacement for Box<Option<usize>> struct Maybe(Page::<bool, usize>); impl Maybe { fn new() -> Self { Maybe(Page::new(false, 1)) } fn put(&mut self, value: usize) { *self.0.header_mut() = true; // occupied let item: *mut usize = self.0.data_mut()[0].as_mut_ptr(); unsafe { item.write(value); } } fn get(&mut self) -> Option<usize> { if !(*self.0.header()) { return None; } let item: *mut usize = self.0.data_mut()[0].as_mut_ptr(); *self.0.header_mut() = false; // free Some(unsafe { *item }) } } let mut maybe = Maybe::new(); assert_eq!(maybe.get(), None); maybe.put(42); assert_eq!(maybe.get(), Some(42));
Notes
Data is exposed as a MaybeUninit
slice for maximum flexibility.
Unfortunately this means we’re unable to automatically drop the data
for you in our destructor. You could cause a memory leak if you don’t.
Implementations
Access to the header by mut reference.
Access to the raw data as a slice.
Access to the raw data as a mut slice.