1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//! An owned, heap-backed, dynamically-sized data page comprising 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;
//! use core::mem::MaybeUninit;
//! // 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
//! unsafe { self.0.data().write(MaybeUninit::new(value)) };
//! }
//! fn get(&mut self) -> Option<usize> {
//! if !(*self.0.header()) { return None; }
//! *self.0.header_mut() = false; // free
//! Some(unsafe { self.0.data().read().assume_init() })
//! }
//! }
//!
//! let mut maybe = Maybe::new();
//! assert_eq!(maybe.get(), None);
//! maybe.put(42);
//! assert_eq!(maybe.get(), Some(42));
//! ```
extern crate alloc;
pub use PageLayout;
pub use *;
pub use *;