(self, node)
| 384 | self.root = self.root.getLink(0) |
| 385 | |
| 386 | def __fixNodeInsert(self, node): |
| 387 | if not node.isConsistent(): |
| 388 | # conflict detected, try to resolve it |
| 389 | if node.isLeafNode() and node is not self.root: |
| 390 | # case for leaf node |
| 391 | node.parent.insertValue(node.values[1]) |
| 392 | node.parent.removeLink(node) |
| 393 | # split the node |
| 394 | node.parent.addLink(Node(node.values[0], node.parent)) |
| 395 | node.parent.addLink(Node(node.values[node.valcnt - 1], node.parent)) |
| 396 | self.__fixNodeInsert(node.parent) |
| 397 | else: |
| 398 | # case for internal node or root node |
| 399 | if node is not self.root: |
| 400 | node.parent.insertValue(node.values[1]) |
| 401 | node.parent.removeLink(node) |
| 402 | parent = node.parent |
| 403 | else: |
| 404 | self.root = Node(node.values[1]) |
| 405 | parent = self.root |
| 406 | |
| 407 | # split the node |
| 408 | leftNode, rightNode = Node(node.values[0], parent), Node(node.values[node.valcnt - 1], parent) |
| 409 | parent.addLink(leftNode).addLink(rightNode) |
| 410 | leftNode.addLink(node.getLink(0)).addLink(node.getLink(1)) |
| 411 | rightNode.addLink(node.getLink(2)).addLink(node.getLink(3)) |
| 412 | |
| 413 | if node is not self.root: |
| 414 | self.__fixNodeInsert(parent) |
| 415 | |
| 416 | # interface methods |
| 417 |
no test coverage detected