- btree put fixes

pull/26/head
Emir Pasic 9 years ago
parent 2df9ce1ab5
commit 9663093961

@ -259,9 +259,6 @@ func (tree *Tree) split(node *Node) {
func (tree *Tree) splitNonRoot(node *Node) { func (tree *Tree) splitNonRoot(node *Node) {
middle := tree.middle() middle := tree.middle()
parent := node.Parent parent := node.Parent
if node.Parent == nil {
panic("test") //TODO
}
left := &Node{Entries: append([]*Entry(nil), node.Entries[:middle]...), Parent: parent} left := &Node{Entries: append([]*Entry(nil), node.Entries[:middle]...), Parent: parent}
right := &Node{Entries: append([]*Entry(nil), node.Entries[middle+1:]...), 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) { if !tree.isLeaf(node) {
left.Children = node.Children[:middle+1] left.Children = node.Children[:middle+1]
right.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) insertPosition, _ := tree.search(parent, node.Entries[middle].Key)
@ -300,6 +299,8 @@ func (tree *Tree) splitRoot() {
if !tree.isLeaf(tree.Root) { if !tree.isLeaf(tree.Root) {
left.Children = tree.Root.Children[:middle+1] left.Children = tree.Root.Children[:middle+1]
right.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) // Root is a node with one entry and two children (left and right)
@ -312,3 +313,9 @@ func (tree *Tree) splitRoot() {
right.Parent = newRoot right.Parent = newRoot
tree.Root = newRoot tree.Root = newRoot
} }
func setParent(nodes []*Node, parent *Node) {
for _, node := range nodes {
node.Parent = parent
}
}

Loading…
Cancel
Save