Skip to content

Commit 8c8e656

Browse files
Merge pull request #55 from Workiva/sl_level
Fixed split level bug.
2 parents e06c937 + 134c4c4 commit 8c8e656

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

slice/skip/skip.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ func insertNode(sl *SkipList, n *node, entry Entry, pos uint64, cache nodes, pos
138138
func splitAt(sl *SkipList, index uint64) (*SkipList, *SkipList) {
139139
right := &SkipList{}
140140
right.maxLevel = sl.maxLevel
141+
right.level = sl.level
141142
right.cache = make(nodes, sl.maxLevel)
142143
right.posCache = make(widths, sl.maxLevel)
143144
right.head = newNode(nil, sl.maxLevel)
@@ -219,7 +220,12 @@ func (sl *SkipList) search(e Entry, update nodes, widths widths) (*node, uint64)
219220
}
220221

221222
func (sl *SkipList) resetMaxLevel() {
222-
for sl.head.forward[sl.level] == nil && sl.level > 1 {
223+
if sl.level < 1 {
224+
sl.level = 1
225+
return
226+
}
227+
228+
for sl.head.forward[sl.level-1] == nil && sl.level > 1 {
223229
sl.level--
224230
}
225231
}

0 commit comments

Comments
 (0)