From c1adf64c1aaecd5a2b9d532d707ef35971f1aa18 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Thu, 7 May 2026 08:50:05 -0400 Subject: begin work on body info window --- src/ntree.rs | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/ntree.rs (limited to 'src/ntree.rs') diff --git a/src/ntree.rs b/src/ntree.rs new file mode 100644 index 0000000..26c241c --- /dev/null +++ b/src/ntree.rs @@ -0,0 +1,81 @@ + +#[derive(Clone)] +pub struct NTreeNode +{ + value: T, + children: Vec> + +} + +#[derive(Default, Clone)] +pub struct NTree +{ + root: Option> +} + +impl NTree +{ + pub fn set_root_val( + &mut self, + val: T) + { + self.root = Some(NTreeNode { value: val, children: vec![] }); + } + + pub fn set_root( + &mut self, + node: NTreeNode) + { + self.root = Some(node); + } + + pub fn root(&self) -> &Option> { &self.root } + pub fn root_mut(&mut self) -> &mut Option> { &mut self.root } +} + +impl NTreeNode +{ + pub fn new(val: T) + -> Self + { + Self { + value: val, + children: vec![] + } + } + + pub fn value(&self) -> &T { &self.value } + pub fn value_mut(&mut self) -> &mut T { &mut self.value } + + pub fn children(&self) -> &[NTreeNode] { &self.children.as_slice() } + + pub fn as_tree(self) + -> NTree + { + NTree { root: Some(self) } + } + + pub fn insert_value( + &mut self, + val: T) + { + self.children.push(NTreeNode { value: val, children: vec![] }); + } + + pub fn insert_node( + &mut self, + subtree: NTreeNode) + { + self.children.push(subtree); + } + + pub fn insert_tree( + &mut self, + subtree: NTree) + { + match subtree.root { + Some(subtree_root) => self.insert_node(subtree_root), + None => { panic!("Tried to put null subtree") } + } + } +} -- cgit v1.2.3