From 4e9e0ab168e91a194b9f8ac3327614f49f0dc362 Mon Sep 17 00:00:00 2001 From: bronku Date: Tue, 9 Dec 2025 19:07:14 +0100 Subject: [PATCH] node has parents --- src/node.rs | 12 ++---------- src/node_storage.rs | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/node.rs b/src/node.rs index aa1cba3..5098792 100644 --- a/src/node.rs +++ b/src/node.rs @@ -7,6 +7,7 @@ pub struct Node { pub children: [Option; MAX_KEYS + 1], pub num_keys: usize, pub is_leaf: bool, + pub parent: Option, } impl Node { @@ -16,19 +17,10 @@ impl Node { children: [(); MAX_KEYS + 1].map(|_| None), num_keys: 0, is_leaf, + parent: None, } } - pub fn insert_non_full(&mut self, input: Record) -> bool { - let i = self.num_keys; - if i == MAX_KEYS { - return false; - } - self.keys[i] = Some(input); - self.num_keys += 1; - return true; - } - /* pub fn is_full(&self) -> bool { diff --git a/src/node_storage.rs b/src/node_storage.rs index bb67354..313f13a 100644 --- a/src/node_storage.rs +++ b/src/node_storage.rs @@ -61,6 +61,14 @@ impl NodeStorage { } } + out.push('|'); + + // parent + match node.parent { + Some(p) => out.push_str(&p.to_string()), + None => out.push('.'), + } + // Convert to fixed-size block let mut block = [b' '; PAGE_SIZE]; let bytes = out.as_bytes(); @@ -94,6 +102,12 @@ impl NodeStorage { } } + node.parent = if parts.len() > 4 && parts[4] != "." { + Some(parts[4].parse().unwrap()) + } else { + None + }; + node } @@ -152,6 +166,8 @@ mod tests { node.children[i] = Some(rng.random_range(0..100)); } + node.parent = Some(rng.random_range(0..200)); + node } @@ -178,6 +194,7 @@ mod tests { assert_eq!(read_node.keys[i].unwrap().key, node.keys[i].unwrap().key); } assert_eq!(storage.page_reads, 1); + assert_eq!(read_node.parent, node.parent); } #[test] @@ -202,6 +219,8 @@ mod tests { assert_eq!(read_node.keys[i].unwrap().key, node2.keys[i].unwrap().key); } + assert_eq!(read_node.parent, node2.parent); + assert_eq!(storage.page_writes, 2); assert_eq!(storage.page_reads, 1); } @@ -231,6 +250,8 @@ mod tests { for i in 0..10 { let read_node = storage.read_node(i); let orig = &nodes[i]; + + assert_eq!(read_node.parent, orig.parent); assert_eq!(read_node.num_keys, orig.num_keys); for j in 0..orig.num_keys { assert_eq!(read_node.keys[j].unwrap().key, orig.keys[j].unwrap().key);