73 个版本 (46 个稳定版)
4.1.4 | 2024 年 3 月 13 日 |
---|---|
4.1.1 | 2023 年 9 月 23 日 |
3.5.1 | 2023 年 4 月 21 日 |
3.5.0 | 2023 年 1 月 26 日 |
0.9.0 | 2020 年 9 月 15 日 |
在 Rust 模式 中排名第 391
每月下载量 25 次
在 3 crates 中使用
61KB
1K SLoC
components-arena
强类型区域。创建复杂领域特定自引用数据结构的简单库。
此区域不严格使用生成方法,但使用一些类似技术来避免 ABA 效应。
示例:循环链表
use std::mem::replace;
use macro_attr_2018::macro_attr;
use components_arena::{Id, Arena, Component};
macro_attr! {
#[derive(Component!)]
struct Node {
next: Id<Node>,
data: (),
}
}
struct List {
last: Option<Id<Node>>,
nodes: Arena<Node>,
}
impl List {
fn new() -> Self {
List { last: None, nodes: Arena::new() }
}
fn push(&mut self, data: ()) -> Id<Node> {
let id = self.nodes.insert(|id| (Node { next: id, data }, id));
if let Some(last) = self.last {
self.nodes[id].next = replace(&mut self.nodes[last].next, id);
} else {
self.last = Some(id);
}
id
}
}
依赖项
~0.8–1.7MB
~35K SLoC