From 78132349d3fc19f9040d1ff5fe4446e5a26f1936 Mon Sep 17 00:00:00 2001 From: bronku Date: Thu, 11 Dec 2025 20:25:22 +0100 Subject: [PATCH] ok? --- src/btree.rs | 10 +--------- src/config.rs | 1 + src/main.rs | 1 + src/node.rs | 13 +++++++++++++ 4 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 src/config.rs diff --git a/src/btree.rs b/src/btree.rs index 10c79e7..1b58d0b 100644 --- a/src/btree.rs +++ b/src/btree.rs @@ -13,12 +13,7 @@ where S: Storage, { pub fn open(mut storage: S) -> Self { - // Initialize with an empty root node (leaf) - let root = Node::Leaf(LeafNode { - keys: Vec::new(), - values: Vec::new(), - next: None, - }); + let root = Node::Leaf(LeafNode::new()); storage.write_node(0, &root); BPlusTree { storage, @@ -55,7 +50,6 @@ where let mut current_loc = self.root_loc; let mut current_node = self.storage.read_node(current_loc).unwrap(); - // Traverse to the leaf node, recording the path while let Node::Internal(internal) = current_node { path.push((current_loc, internal.clone())); let mut i = 0; @@ -87,11 +81,9 @@ where leaf.values.push(value); } - // Write the updated leaf back to storage self.storage .write_node(current_loc, &Node::Leaf(leaf.clone())); - // Check if the leaf needs to be split if leaf.keys.len() > MAX_KEYS { self.split_leaf(current_loc, leaf, &mut path); } diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..376009a --- /dev/null +++ b/src/config.rs @@ -0,0 +1 @@ +pub const DEGREE: usize = 2; diff --git a/src/main.rs b/src/main.rs index bc7649e..7ff51cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ mod btree; +mod config; mod node; mod record; mod storage; diff --git a/src/node.rs b/src/node.rs index 8aa48c4..367a389 100644 --- a/src/node.rs +++ b/src/node.rs @@ -1,3 +1,4 @@ +use crate::config::DEGREE; use crate::record::Record; #[derive(Debug, Clone)] @@ -13,8 +14,20 @@ pub struct LeafNode { pub next: Option, } +impl LeafNode { + pub fn new() -> Self { + Self { + keys: Vec::with_capacity(DEGREE * 2), + values: Vec::with_capacity(DEGREE * 2), + next: None, + } + } +} + #[derive(Debug, Clone)] pub struct InternalNode { pub keys: Vec, pub children: Vec, } + +