Skip to content

raymontag/indextree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

indextree-ng

Build Status

Arena based tree structure with multithreading support

This is a fork of the indextree crate 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 Vec, a HashMap and numerical identifiers. Every node holds an id which is mapped to an index of the vector via the 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.

Example usage

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);

About

Arena based tree 🌲 structure by using indices instead of reference counted pointers

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 100.0%