use crate::frame::CoreFrame;
use crate::tree::{MapLayer, RecursiveTree};
#[derive(Debug, Clone)]
pub struct TreeBuilder {
nodes: Vec<CoreFrame<usize>>,
}
impl TreeBuilder {
pub fn new() -> Self {
Self { nodes: Vec::new() }
}
pub fn push(&mut self, frame: CoreFrame<usize>) -> usize {
let idx = self.nodes.len();
self.nodes.push(frame);
idx
}
pub fn push_tree(&mut self, other: TreeBuilder) -> usize {
let offset = self.nodes.len();
for node in other.nodes {
self.nodes.push(node.map_layer(|idx| idx + offset));
}
offset
}
pub fn build(self) -> RecursiveTree<CoreFrame<usize>> {
RecursiveTree { nodes: self.nodes }
}
}
impl Default for TreeBuilder {
fn default() -> Self {
Self::new()
}
}