| 25 | } |
| 26 | |
| 27 | pub fn insert(&mut self, key: K, value: V) -> Result<(), io::Error> { |
| 28 | let mut root = std::mem::replace(&mut self.root, Box::new(Node::new_leaf())); |
| 29 | if self.is_node_full(&root)? { |
| 30 | let mut new_root = Node::new_internal(); |
| 31 | let (median, sibling) = root.split()?; |
| 32 | new_root.keys.push(median); |
| 33 | new_root.children.push(root); |
| 34 | new_root.children.push(Box::new(sibling)); |
| 35 | root = Box::new(new_root); |
| 36 | } |
| 37 | self.insert_non_full(&mut *root, key, value)?; |
| 38 | self.root = root; |
| 39 | Ok(()) |
| 40 | } |
| 41 | |
| 42 | fn insert_non_full( |
| 43 | &mut self, |