From 966309396146cac614349ad51dcc1d7f20516bc2 Mon Sep 17 00:00:00 2001 From: Emir Pasic Date: Mon, 11 Jul 2016 00:18:00 +0200 Subject: [PATCH] - btree put fixes --- trees/btree/btree.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/trees/btree/btree.go b/trees/btree/btree.go index 18bcb53..212e470 100644 --- a/trees/btree/btree.go +++ b/trees/btree/btree.go @@ -259,9 +259,6 @@ func (tree *Tree) split(node *Node) { func (tree *Tree) splitNonRoot(node *Node) { middle := tree.middle() parent := node.Parent - if node.Parent == nil { - panic("test") //TODO - } left := &Node{Entries: append([]*Entry(nil), node.Entries[:middle]...), Parent: parent} right := &Node{Entries: append([]*Entry(nil), node.Entries[middle+1:]...), Parent: parent} @@ -270,6 +267,8 @@ func (tree *Tree) splitNonRoot(node *Node) { if !tree.isLeaf(node) { left.Children = node.Children[:middle+1] right.Children = node.Children[middle+1:] + setParent(left.Children, left) + setParent(right.Children, right) } insertPosition, _ := tree.search(parent, node.Entries[middle].Key) @@ -300,6 +299,8 @@ func (tree *Tree) splitRoot() { if !tree.isLeaf(tree.Root) { left.Children = tree.Root.Children[:middle+1] right.Children = tree.Root.Children[middle+1:] + setParent(left.Children, left) + setParent(right.Children, right) } // Root is a node with one entry and two children (left and right) @@ -312,3 +313,9 @@ func (tree *Tree) splitRoot() { right.Parent = newRoot tree.Root = newRoot } + +func setParent(nodes []*Node, parent *Node) { + for _, node := range nodes { + node.Parent = parent + } +}