#generational-arena #arena #graph #tree #data-structures #entity #generational

无 std components-arena

创建复杂领域特定自引用数据结构的简单库

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 中使用

MIT/Apache

61KB
1K SLoC

maintenance: actively developed

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