3 个版本
0.1.2 | 2023 年 11 月 22 日 |
---|---|
0.1.1 | 2023 年 9 月 18 日 |
0.1.0 | 2023 年 9 月 18 日 |
#103 in #arena
每月 31 次下载
用于 battler
8KB
93 行
zone-alloc-strong-handle-derive
此crate提供了一种过程宏,用于在zone-alloc
crate中的StrongRegistry
容器周围使用简单包装器时,为Handle
类型派生StrongHandle
接口。
[dependencies]
zone-alloc = "0.3"
zone-alloc-strong-handle-derive = "0.1"
用法
此crate定义了一个过程宏
StrongHandle
- 自动为Handle
类型的简单包装器派生StrongHandle
接口。
示例
链表节点与 Arena<T>
use zone_alloc::{
Handle,
StrongRegistry,
};
use zone_alloc_strong_handle_derive::StrongHandle;
#[derive(Clone, Copy, Debug, PartialEq, Eq, StrongHandle)]
struct NodeHandle(Handle);
#[derive(Debug, PartialEq, Eq)]
struct Node<T> {
parent: Option<NodeHandle>,
value: T,
}
impl<T> Node<T> {
pub fn new(parent: Option<NodeHandle>, value: T) -> Self {
Self { parent, value }
}
}
fn main() {
let registry = StrongRegistry::<NodeHandle, Node<&str>>::new();
let root_handle = registry.register(Node::new(None, "first"));
let handle = registry.register(Node::new(Some(root_handle), "second"));
let handle = registry.register(Node::new(Some(handle), "third"));
registry.get_mut(root_handle).unwrap().parent = Some(handle);
let node = registry.get(handle).unwrap();
assert_eq!(node.value, "third");
let node = registry.get(node.parent.unwrap()).unwrap();
assert_eq!(node.value, "second");
let node = registry.get(node.parent.unwrap()).unwrap();
assert_eq!(node.value, "first");
let node = registry.get(node.parent.unwrap()).unwrap();
assert_eq!(node.value, "third");
}
依赖项
~3MB
~57K SLoC