Uses old Rust 2015
|1.0.5||Jan 2, 2018|
|1.0.4||Dec 15, 2017|
|1.0.3||Dec 13, 2017|
|1.0.2||Dec 12, 2017|
#981 in Data structures
48 downloads per month
Used in 2 crates (via rustupolis)
Arena based tree structure with multithreading support
This is a fork of the
which allows to remove nodes. The original version was not capable of removing
nodes as the initial idea was to drop all nodes at the same time if the lifetime
of the underlying memory arena has ended.
The arena tree structure is using a single
HashMap and numerical
identifiers. Every node holds an id which is mapped to an index of the vector
HashMap. This allows to drop single nodes before the lifetime of the
arena hash ended.
There is no
RefCell and mutability is handled in a way much more idiomatic to Rust
through unique (&mut) access to the arena.
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);