MCPcopy Create free account
hub / github.com/ActiveState/code / __fixNodeInsert

Method __fixNodeInsert

recipes/Python/577898_23_Tree/recipe-577898.py:386–414  ·  view source on GitHub ↗
(self, node)

Source from the content-addressed store, hash-verified

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

Callers 1

insertValueMethod · 0.95

Calls 7

isConsistentMethod · 0.80
isLeafNodeMethod · 0.80
removeLinkMethod · 0.80
addLinkMethod · 0.80
getLinkMethod · 0.80
NodeClass · 0.70
insertValueMethod · 0.45

Tested by

no test coverage detected