summaryrefslogtreecommitdiffstats
path: root/src/ntree.rs
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-05-07 08:50:05 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-05-07 08:50:05 -0400
commitc1adf64c1aaecd5a2b9d532d707ef35971f1aa18 (patch)
treefc1050becd0576d75a8d6afb8be09fae80c91541 /src/ntree.rs
parent9788d9037ad7199701b1710c28559cb96bce5aec (diff)
downloadsystemic4x-c1adf64c1aaecd5a2b9d532d707ef35971f1aa18.tar.gz
systemic4x-c1adf64c1aaecd5a2b9d532d707ef35971f1aa18.tar.bz2
systemic4x-c1adf64c1aaecd5a2b9d532d707ef35971f1aa18.zip
begin work on body info window
Diffstat (limited to 'src/ntree.rs')
-rw-r--r--src/ntree.rs81
1 files changed, 81 insertions, 0 deletions
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<T>
+{
+ value: T,
+ children: Vec<NTreeNode<T>>
+
+}
+
+#[derive(Default, Clone)]
+pub struct NTree<T>
+{
+ root: Option<NTreeNode<T>>
+}
+
+impl<T> NTree<T>
+{
+ 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<T>)
+ {
+ self.root = Some(node);
+ }
+
+ pub fn root(&self) -> &Option<NTreeNode<T>> { &self.root }
+ pub fn root_mut(&mut self) -> &mut Option<NTreeNode<T>> { &mut self.root }
+}
+
+impl<T> NTreeNode<T>
+{
+ 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<T>] { &self.children.as_slice() }
+
+ pub fn as_tree(self)
+ -> NTree<T>
+ {
+ 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<T>)
+ {
+ self.children.push(subtree);
+ }
+
+ pub fn insert_tree(
+ &mut self,
+ subtree: NTree<T>)
+ {
+ match subtree.root {
+ Some(subtree_root) => self.insert_node(subtree_root),
+ None => { panic!("Tried to put null subtree") }
+ }
+ }
+}