aboutsummaryrefslogtreecommitdiff
path: root/cursor.go
diff options
context:
space:
mode:
Diffstat (limited to 'cursor.go')
-rw-r--r--cursor.go20
1 files changed, 8 insertions, 12 deletions
diff --git a/cursor.go b/cursor.go
index 3262f4c..410bb89 100644
--- a/cursor.go
+++ b/cursor.go
@@ -48,32 +48,28 @@ func (c *Cursor) Next() (key []byte, value []byte) {
return c.keyValue()
}
-// Get moves the cursor to a given key and returns its value.
-// If the key does not exist then the cursor is left at the closest key and a nil value is returned.
-func (c *Cursor) Get(key []byte) (value []byte) {
+// Seek moves the cursor to a given key and returns it.
+// If the key does not exist then the next key is used. If no keys
+// follow, a nil value is returned.
+func (c *Cursor) Seek(seek []byte) (key []byte, value []byte) {
// Start from root page and traverse to correct page.
c.stack = c.stack[:0]
- c.search(key, c.transaction.page(c.root))
+ c.search(seek, c.transaction.page(c.root))
p, index := c.top()
// If the cursor is pointing to the end of page then return nil.
if index == p.count {
- return nil
- }
-
- // If our target node isn't the same key as what's passed in then return nil.
- if !bytes.Equal(key, c.element().key()) {
- return nil
+ return nil, nil
}
- return c.element().value()
+ return c.element().key(), c.element().value()
}
// first moves the cursor to the first leaf element under the last page in the stack.
func (c *Cursor) first() {
p := c.stack[len(c.stack)-1].page
for {
- // Exit when we hit a leaf page.
+ // Exit when we hit a leaf page.
if (p.flags & leafPageFlag) != 0 {
break
}