Shared ownership

Trees, Forests have exclusive ownership and borrowing of their Nodes are statically checked.

A Tree could be safely converted to RcNode to support shared ownership and dynamic borrow check.


#![allow(unused)]
fn main() {
use trees::{RcNode, Tree};
let tree = Tree::<i32>::from(( 0, (1,2,3), (4,5,6), ));
let root = RcNode::from( tree );
}

An RcNode could be unsafely converted to Tree to get exclusive ownership and static borrow check.


#![allow(unused)]
fn main() {
let tree = unsafe{ root.into_tree() };
}

WeakNode is the non-owning version of RcNode.