53 lines
902 B
Go
53 lines
902 B
Go
|
package store
|
||
|
|
||
|
// 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 {
|
||
|
return &memIterator{
|
||
|
start: start,
|
||
|
end: end,
|
||
|
items: items,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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) Release() {
|
||
|
mi.start = nil
|
||
|
mi.end = nil
|
||
|
mi.items = nil
|
||
|
}
|