Crate pages[][src]

Expand description

A dynamically-sized heap-backed data page. Comprises a user-chosen header and data array packed into a single allocation.

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));

Structs

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.