Merge two child nodes and a parent key into a single node. Args: parent_node: The parent node. to_merge_index: Index of the child that receives the merged data. transferred_child_index: Index of the child being merged in.
(
self, parent_node: Node, to_merge_index: int, transferred_child_index: int
)
| 257 | parent_node.children[child_index].children.insert(0, ownerless_child) |
| 258 | |
| 259 | def _merge( |
| 260 | self, parent_node: Node, to_merge_index: int, transferred_child_index: int |
| 261 | ) -> None: |
| 262 | """Merge two child nodes and a parent key into a single node. |
| 263 | |
| 264 | Args: |
| 265 | parent_node: The parent node. |
| 266 | to_merge_index: Index of the child that receives the merged data. |
| 267 | transferred_child_index: Index of the child being merged in. |
| 268 | """ |
| 269 | from_merge_node = parent_node.children.pop(transferred_child_index) |
| 270 | parent_key_to_merge = parent_node.keys.pop(to_merge_index) |
| 271 | to_merge_node = parent_node.children[to_merge_index] |
| 272 | to_merge_node.keys.append(parent_key_to_merge) |
| 273 | to_merge_node.keys.extend(from_merge_node.keys) |
| 274 | |
| 275 | if not to_merge_node.is_leaf: |
| 276 | to_merge_node.children.extend(from_merge_node.children) |
| 277 | |
| 278 | if parent_node == self.root and not parent_node.keys: |
| 279 | self.root = to_merge_node |
| 280 | |
| 281 | def _remove_from_nonleaf_node( |
| 282 | self, node: Node, key_index: int |
no test coverage detected