# indextree
[](https://github.com/saschagrunert/indextree/actions/workflows/test.yml)
[](https://codecov.io/gh/saschagrunert/indextree)
[](https://deps.rs/repo/github/saschagrunert/indextree)
[](https://saschagrunert.github.io/indextree/doc/indextree)
[](https://github.com/saschagrunert/indextree/blob/main/LICENSE)
[](https://crates.io/crates/indextree)
[](https://docs.rs/indextree)
## Arena based tree structure with multithreading support
This arena tree structure is using just a single `Vec` and numerical identifiers
(indices in the vector) instead of reference counted pointers. This means there
is no `RefCell` and mutability is handled in a way much more idiomatic to Rust
through unique (&mut) access to the arena. The tree can be sent or shared across
threads like a `Vec`. This enables general multiprocessing support like
parallel tree traversals.
### Example usage
```rust
use 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);
```
### Benchmarks
https://github.com/mooman219/generational_arena_bench