use super::structure::{InternalNode, Key, LeafNode};
impl InternalNode {
pub fn split(&mut self, new_page_id: u64) -> (Key, InternalNode) {
let mid = self.keys.len() / 2;
let middle_key = self.keys[mid].clone();
let mut right_node = InternalNode::new(new_page_id);
right_node.keys = self.keys.split_off(mid + 1);
right_node.children = self.children.split_off(mid + 1);
self.keys.pop();
(middle_key, right_node)
}
}
impl LeafNode {
pub fn split(&mut self, new_page_id: u64) -> (Key, LeafNode) {
let mid = self.entries.len() / 2;
let mut right_node = LeafNode::new(new_page_id);
right_node.entries = self.entries.split_off(mid);
right_node.next_leaf = self.next_leaf;
right_node.prev_leaf = self.page_id;
self.next_leaf = new_page_id;
let middle_key = right_node.entries[0].0.clone();
(middle_key, right_node)
}
}