Add IteratorPrefix method to Iterator

This commit is contained in:
Alexis Sellier 2017-09-28 17:35:01 +02:00
parent 296d223545
commit 219d4e8427
3 changed files with 14 additions and 1 deletions

View File

@ -11,6 +11,7 @@ type DB interface {
Close()
NewBatch() Batch
Iterator() Iterator
IteratorPrefix([]byte) Iterator
// For debugging
Print()

View File

@ -7,6 +7,7 @@ import (
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/errors"
"github.com/syndtr/goleveldb/leveldb/opt"
"github.com/syndtr/goleveldb/leveldb/util"
. "github.com/tendermint/tmlibs/common"
)
@ -119,6 +120,10 @@ func (db *GoLevelDB) Iterator() Iterator {
return db.db.NewIterator(nil, nil)
}
func (db *GoLevelDB) IteratorPrefix(prefix []byte) Iterator {
return db.db.NewIterator(util.BytesPrefix(prefix), nil)
}
func (db *GoLevelDB) NewBatch() Batch {
batch := new(leveldb.Batch)
return &goLevelDBBatch{db, batch}

View File

@ -2,6 +2,7 @@ package db
import (
"fmt"
"strings"
"sync"
)
@ -108,6 +109,10 @@ func (it *memDBIterator) Error() error {
}
func (db *MemDB) Iterator() Iterator {
return db.IteratorPrefix([]byte{})
}
func (db *MemDB) IteratorPrefix(prefix []byte) Iterator {
it := newMemDBIterator()
it.db = db
it.last = -1
@ -117,7 +122,9 @@ func (db *MemDB) Iterator() Iterator {
// unfortunately we need a copy of all of the keys
for key, _ := range db.db {
it.keys = append(it.keys, key)
if strings.HasPrefix(key, string(prefix)) {
it.keys = append(it.keys, key)
}
}
return it
}