#cell #store #dungeon #dynamic #value #memory #unsized

no-std dungeon-cell

无需动态内存即可将任何值存储为一个类型

4 个版本

0.1.0 2023年7月6日
0.0.3 2023年2月15日
0.0.2 2023年2月3日
0.0.1 2023年1月8日

#247 in 内存管理

MIT/Apache

225KB
4K SLoC

Version Maintenance Crates.io docs.rs Crates.io

dungeon-cell

Cell 和类似 Cell 的类型,可以存储任何类型而不需要动态内存。

目前只实现了 DungeonCore 原始类型(unsized、cell、stack vec 等正在开发中)。

示例
use dungeon_cell::{DungeonCore, layout_for};

// a default DungeonCore can store any 'static type that fits in the layout
let mut core = DungeonCore::<layout_for!(String)>::default();

// we can store a i32 and get it back
core.store(1234);
assert_eq!(core.take(), Some(1234i32));

// we can store a f64 and get it back
core.store(1.234);
assert_eq!(core.take(), Some(1.234f64));

// lets get adventurous and store a String
core.store(String::from("hello world"));
assert_eq!(core.take(), Some(String::from("hello world")));

// we can't take a type the core isn't storing
core.store(1234);
assert_eq!(core.take(), None::<f32>);

// we can borrow both unique and shared
core.store(1234);
*core.borrow_mut::<i32>().unwrap() += 10;
assert_eq!(core.borrow(), Some(&1244i32));

功能

  • "alloc" - 启用对 alloc 类型的支持。
  • "std" - 启用对 std 类型的支持。同时启用 "alloc"
  • "unsize" - 启用 nightly 功能 unsize 的使用。需要 nightly 编译器。
  • "many_arg_fn" - 启用具有 11-30 个参数的函数的实现。

无 std 支持

此 crate 默认为 #![no_std],可以在任何 Rust 可用的地方使用。

最低支持的 Rust 版本

需要 Rust 1.64.0。

此 crate 遵循 "最新稳定 Rust" 政策。所列的 MSRV 除非必要否则不会更改。但是,允许在发布时更新到最新的稳定版本。


许可证

根据您的选择,受 Apache 许可证,版本 2.0MIT 许可证 授权。
除非您明确说明,否则您提交给 dungeon-cell 的任何有意包含的贡献,根据 Apache-2.0 许可证定义,将按上述方式双授权,没有任何额外的条款或条件。

依赖项

~215KB