use std::collections::HashMap as Map;
use std::collections::hash_map::Iter;
use crate::node::*;
use crate::tree::*;
#[derive(Debug)]
pub struct Forest<T: NodeContent = RawNode> {
trees: Map<String, Tree<T>>
}
impl<T: NodeContent> Forest<T> {
pub fn new() -> Self {
Self {
trees: Map::new()
}
}
pub fn new_tree(&mut self, name: &str) {
self.add_tree(name, Tree::new());
}
pub fn add_tree(&mut self, name: &str, tree: Tree<T>) {
self.trees.insert(String::from(name), tree);
}
pub fn remove_tree(&mut self, name: &str) -> Option<Tree<T>> {
return self.trees.remove(name);
}
pub fn get_tree(&self, name: &str) -> Option<&Tree<T>> {
if let Some(t) = self.trees.get(name) {
Some(t)
}
else {
None
}
}
pub fn get_mut_tree(&mut self, name: &str) -> Option<&mut Tree<T>> {
if let Some(t) = self.trees.get_mut(name) {
Some(t)
}
else {
None
}
}
pub fn iter(&self) -> Iter<String, Tree<T>> {
self.trees.iter()
}
}