#arena #tree-structure #tree #index #trie #indextree #reference-counting

indextree-ng

基于索引而非引用计数的指针的竞技场树结构。Sascha Grunert的indextree的分支,允许删除节点

6个稳定版本

使用旧的Rust 2015

1.0.5 2018年1月2日
1.0.4 2017年12月15日
1.0.3 2017年12月13日
1.0.2 2017年12月12日

#2424 in 数据结构


用于 2 个crate(通过 rustupolis

MIT 许可证

25KB
440

indextree-ng

Build Status

具有多线程支持的竞技场树结构

这是 indextree crate 的分支,允许删除节点。原始版本不能删除节点,因为最初的想法是在底层内存竞技场的生命周期结束时同时丢弃所有节点。

竞技场树结构使用单个 Vec、一个 HashMap 和数值标识符。每个节点都有一个id,该id通过 HashMap 映射到向量的索引。这允许在竞技场哈希的生命周期结束之前删除单个节点。

没有 RefCell,并且通过竞技场的唯一 (&mut) 访问以更符合Rust的风格处理可变性。

示例用法

use indextree_ng::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 b to a
a.append(b, arena);
assert_eq!(b.ancestors(arena).into_iter().count(), 2);

//Access a node
assert_eq!(arena[b], 2);

// Remove a node
arena.remove_node(a);
assert_eq!(b.ancestors(arena).into_iter().count(), 1);

没有运行时依赖项