#page #array #dynamic #chunk #block #replace

no-std pages

一个动态大小的堆内存数据页。由用户选择的头部和数据数组打包成单个分配。

3个不稳定版本

0.2.0 2021年8月14日
0.1.1 2021年8月13日
0.1.0 2021年8月13日

2200数据结构

每月31次下载

Apache-2.0 WITH LLVM-exception

17KB
168

pages

License Package Documentation

一个动态大小的堆内存数据页。由用户选择的头部和数据数组打包成单个分配。

使用方法

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

fn main() {
    let mut maybe = Maybe::new();
    assert_eq!(maybe.get(), None);
    maybe.put(42);
    assert_eq!(maybe.get(), Some(42));
}

版权 (c) 2021 James Laver, pages 贡献者。

许可 根据 Apache 许可证 2.0 版 (http://apache.ac.cn/licenses/LICENSE-2.0),带有 LLVM 例外情况 (https://spdx.org/licenses/LLVM-exception.html)。

除非您明确声明,否则您提交的任何有意包含在作品中的贡献,如 Apache-2.0 许可证中定义的,应按照上述方式许可,而无需任何附加条款或条件。

无运行时依赖