Skip to content

Commit 5e6f0e1

Browse files
committed
arenaskl: manually inline findSpliceForLevel
Manually inline findSpliceForLevel within findSplice. This is in preparation for the following commit, to make its diff clear.
1 parent 05b2cd5 commit 5e6f0e1

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

internal/arenaskl/skl.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,9 +383,39 @@ func (s *Skiplist) findSplice(key base.InternalKey, ins *Inserter) (found bool)
383383
}
384384
}
385385

386+
var next *node
386387
for level = level - 1; level >= 0; level-- {
387-
var next *node
388-
prev, next, found = s.findSpliceForLevel(key, level, prev)
388+
for {
389+
// Assume prev.key < key.
390+
next = s.getNext(prev, level)
391+
if next == s.tail {
392+
// Tail node, so done.
393+
break
394+
}
395+
396+
offset, size := next.keyOffset, next.keySize
397+
nextKey := s.arena.buf[offset : offset+size]
398+
cmp := s.cmp(key.UserKey, nextKey)
399+
if cmp < 0 {
400+
// We are done for this level, since prev.key < key < next.key.
401+
break
402+
}
403+
if cmp == 0 {
404+
// User-key equality.
405+
if key.Trailer == next.keyTrailer {
406+
// Internal key equality.
407+
found = true
408+
break
409+
}
410+
if key.Trailer > next.keyTrailer {
411+
// We are done for this level, since prev.key < key < next.key.
412+
break
413+
}
414+
}
415+
416+
// Keep moving right on this level.
417+
prev = next
418+
}
389419
ins.spl[level].init(prev, next)
390420
}
391421

0 commit comments

Comments
 (0)