mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-16 22:51:22 +00:00
fix c level db iterator
This commit is contained in:
@ -162,16 +162,7 @@ func (mBatch *cLevelDBBatch) Write() {
|
|||||||
|
|
||||||
func (db *CLevelDB) Iterator(start, end []byte) Iterator {
|
func (db *CLevelDB) Iterator(start, end []byte) Iterator {
|
||||||
itr := db.db.NewIterator(db.ro)
|
itr := db.db.NewIterator(db.ro)
|
||||||
if len(start) > 0 {
|
return newCLevelDBIterator(itr, start, end)
|
||||||
itr.Seek(start)
|
|
||||||
} else {
|
|
||||||
itr.SeekToFirst()
|
|
||||||
}
|
|
||||||
return &cLevelDBIterator{
|
|
||||||
itr: itr,
|
|
||||||
start: start,
|
|
||||||
end: end,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *CLevelDB) ReverseIterator(start, end []byte) Iterator {
|
func (db *CLevelDB) ReverseIterator(start, end []byte) Iterator {
|
||||||
@ -187,6 +178,21 @@ type cLevelDBIterator struct {
|
|||||||
invalid bool
|
invalid bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newCLevelDBIterator(itr *levigo.Iterator, start, end []byte) *cLevelDBIterator {
|
||||||
|
|
||||||
|
if len(start) > 0 {
|
||||||
|
itr.Seek(start)
|
||||||
|
} else {
|
||||||
|
itr.SeekToFirst()
|
||||||
|
}
|
||||||
|
|
||||||
|
return &cLevelDBIterator{
|
||||||
|
itr: itr,
|
||||||
|
start: start,
|
||||||
|
end: end,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *cLevelDBIterator) Domain() ([]byte, []byte) {
|
func (c *cLevelDBIterator) Domain() ([]byte, []byte) {
|
||||||
return c.start, c.end
|
return c.start, c.end
|
||||||
}
|
}
|
||||||
@ -223,12 +229,16 @@ func (c *cLevelDBIterator) Next() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// levigo has no upper bound when iterating, so need to check ourselves
|
// levigo has no upper bound when iterating, so need to check ourselves
|
||||||
func (c *cLevelDBIterator) checkEndKey() []byte {
|
func (c *cLevelDBIterator) checkEndKey() {
|
||||||
|
if !c.itr.Valid() {
|
||||||
|
c.invalid = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
key := c.itr.Key()
|
key := c.itr.Key()
|
||||||
if c.end != nil && bytes.Compare(key, c.end) > 0 {
|
if c.end != nil && bytes.Compare(key, c.end) > 0 {
|
||||||
c.invalid = true
|
c.invalid = true
|
||||||
}
|
}
|
||||||
return key
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cLevelDBIterator) Close() {
|
func (c *cLevelDBIterator) Close() {
|
||||||
|
Reference in New Issue
Block a user