From 134c4c4d0e3c5b003a14db148edb03f20a738aab Mon Sep 17 00:00:00 2001 From: Dustin Hiatt Date: Mon, 9 Feb 2015 14:33:25 -0600 Subject: [PATCH] Fixed split level bug. --- slice/skip/skip.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/slice/skip/skip.go b/slice/skip/skip.go index b7f6ea1..6e9194c 100644 --- a/slice/skip/skip.go +++ b/slice/skip/skip.go @@ -138,6 +138,7 @@ func insertNode(sl *SkipList, n *node, entry Entry, pos uint64, cache nodes, pos func splitAt(sl *SkipList, index uint64) (*SkipList, *SkipList) { right := &SkipList{} right.maxLevel = sl.maxLevel + right.level = sl.level right.cache = make(nodes, sl.maxLevel) right.posCache = make(widths, sl.maxLevel) right.head = newNode(nil, sl.maxLevel) @@ -219,7 +220,12 @@ func (sl *SkipList) search(e Entry, update nodes, widths widths) (*node, uint64) } func (sl *SkipList) resetMaxLevel() { - for sl.head.forward[sl.level] == nil && sl.level > 1 { + if sl.level < 1 { + sl.level = 1 + return + } + + for sl.head.forward[sl.level-1] == nil && sl.level > 1 { sl.level-- } }