9个稳定版本
1.1.4 | 2022年1月15日 |
---|---|
1.1.3 | 2022年1月10日 |
1.1.2 | 2020年12月2日 |
1.1.1 | 2020年6月20日 |
1.0.2 | 2020年4月6日 |
#824 in 数据结构
用于 2 crates
80KB
857 行
generational-indextree
支持删除节点的基于索引树结构
这种索引树结构仅使用一个 GenerationalArena
和索引,而不是引用计数指针。这意味着没有 RefCell
,并且可变性通过独特 (&mut) 访问方式在Rust中处理得更加地道。树可以像 Vec
一样发送或跨线程共享。这使一般的多进程支持,如并行树遍历成为可能。
致谢
这个crate是从indextree crate分叉出来的,但是用generational arena来存储节点,而不是Vec。这使得我们可以删除节点并使用空余位置来插入新节点,而不会受到ABA问题的困扰,如generational-arena crate中所述。
我们为了改进删除节点API而牺牲了indextree中的rayon支持。
这个包是从优秀的 https://github.com/saschagrunert/indextree crate分叉出来的。后端存储被替换为 https://github.com/fitzgen/generational-arena,以改进删除节点和复用空间的支持。
示例用法
use generational_indextree::Arena;
// Create a new arena
let arena = &mut Arena::new();
// Add some new nodes to the arena
let a = arena.new_node(1);
let b = arena.new_node(2);
// Append a to b
assert!(a.append(b, arena).is_ok());
assert_eq!(b.ancestors(arena).into_iter().count(), 2);
变更日志
版本 | 日期 | 变更 |
---|---|---|
1.1.4 | 15-01-2022 | 更精简的调试输出,修复了 !std 支持,改进了测试流程 |
1.1.3 | 10-01-2022 | 修复了 serde 功能标志,感谢 Tal Liberman 的 MR。通过 Chris Laplante 添加了 new_node_with 方法,允许自引用数据 |
1.1.2 | 02-12-2020 | 与 indextree 版本 4.3.1 同步 |
1.1.1 | 20-06-2020 | 与 indextree 版本 4.1.0 同步 |
1.1.0 | 16-06-2020 | 与 indextree 版本 4.0.0 同步 |
1.0.0 | 05-04-2020 | 使用 GenerationArena 的 indextree |
依赖项
~230KB