cosmos-sdk/store/memiterator.go

64 lines
1.2 KiB
Go
Raw Normal View History

2017-12-11 23:30:44 -08:00
package store
import (
dbm "github.com/tendermint/tmlibs/db"
)
2017-12-11 23:30:44 -08:00
// Iterates over iterKVCache items.
// if key is nil, means it was deleted.
// Implements Iterator.
type memIterator struct {
start, end []byte
items []KVPair
}
func newMemIterator(start, end []byte, items []KVPair) *memIterator {
itemsInDomain := make([]KVPair, 0)
for _, item := range items {
ascending := keyCompare(start, end) < 0
if dbm.IsKeyInDomain(item.Key, start, end, !ascending) {
itemsInDomain = append(itemsInDomain, item)
}
}
2017-12-11 23:30:44 -08:00
return &memIterator{
start: start,
end: end,
items: itemsInDomain,
2017-12-11 23:30:44 -08:00
}
}
func (mi *memIterator) Domain() ([]byte, []byte) {
return mi.start, mi.end
}
func (mi *memIterator) Valid() bool {
return len(mi.items) > 0
}
func (mi *memIterator) assertValid() {
if !mi.Valid() {
panic("memIterator is invalid")
}
}
func (mi *memIterator) Next() {
mi.assertValid()
mi.items = mi.items[1:]
}
func (mi *memIterator) Key() []byte {
mi.assertValid()
return mi.items[0].Key
}
func (mi *memIterator) Value() []byte {
mi.assertValid()
return mi.items[0].Value
}
func (mi *memIterator) Close() {
2017-12-11 23:30:44 -08:00
mi.start = nil
mi.end = nil
mi.items = nil
}