MCPcopy Create free account
hub / github.com/carsonpo/haystackdb / split

Method split

src/structures/mmap_tree/node.rs:71–133  ·  view source on GitHub ↗
(&mut self, b: usize)

Source from the content-addressed store, hash-verified

69 }
70
71 pub fn split(&mut self, b: usize) -> Result<(K, Node<K, V>), io::Error> {
72 // println!("Splitting node: {:?}", self.keys);
73
74 match self.node_type {
75 NodeType::Internal => {
76 if b <= 1 || b > self.keys.len() {
77 return Err(io::Error::new(
78 io::ErrorKind::Other,
79 "Invalid split point for internal node",
80 ));
81 }
82 let mut sibling_keys = self.keys.split_off(b - 1);
83 let median_key = sibling_keys.remove(0);
84
85 let sibling_children = self.children.split_off(b);
86
87 let sibling = Node {
88 keys: sibling_keys,
89 values: Vec::new(),
90 children: sibling_children,
91 max_keys: self.max_keys,
92 node_type: NodeType::Internal,
93 offset: 0, // This should be set when the node is stored
94 is_root: false,
95 parent_offset: self.parent_offset,
96 };
97
98 // println!(
99 // "Internal node split: median_key = {}, sibling_keys = {:?}",
100 // median_key, sibling.keys
101 // );
102 Ok((median_key, sibling))
103 }
104 NodeType::Leaf => {
105 if b < 1 || b >= self.keys.len() {
106 return Err(io::Error::new(
107 io::ErrorKind::Other,
108 "Invalid split point for leaf node",
109 ));
110 }
111 let sibling_keys = self.keys.split_off(b);
112 let median_key = self.keys.get(b - 1).unwrap().clone();
113 let sibling_values = self.values.split_off(b);
114
115 let sibling = Node {
116 keys: sibling_keys,
117 values: sibling_values,
118 children: Vec::new(),
119 max_keys: self.max_keys,
120 node_type: NodeType::Leaf,
121 offset: 0, // This should be set when the node is stored
122 is_root: false,
123 parent_offset: self.parent_offset,
124 };
125
126 // println!(
127 // "Leaf node split: median_key = {}, sibling_keys = {:?}",
128 // median_key, sibling.keys

Callers

nothing calls this directly

Calls 3

lenMethod · 0.80
cloneMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected