tighter moss KV store iterator handling
This commit is contained in:
parent
5f1454106d
commit
eaa59621ff
@ -23,15 +23,15 @@ type Iterator struct {
|
|||||||
iter moss.Iterator
|
iter moss.Iterator
|
||||||
start []byte
|
start []byte
|
||||||
end []byte
|
end []byte
|
||||||
done bool
|
|
||||||
k []byte
|
k []byte
|
||||||
v []byte
|
v []byte
|
||||||
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Iterator) Seek(seekToKey []byte) {
|
func (x *Iterator) Seek(seekToKey []byte) {
|
||||||
x.done = true
|
|
||||||
x.k = nil
|
x.k = nil
|
||||||
x.v = nil
|
x.v = nil
|
||||||
|
x.err = moss.ErrIteratorDone
|
||||||
|
|
||||||
if bytes.Compare(seekToKey, x.start) < 0 {
|
if bytes.Compare(seekToKey, x.start) < 0 {
|
||||||
seekToKey = x.start
|
seekToKey = x.start
|
||||||
@ -51,31 +51,21 @@ func (x *Iterator) Seek(seekToKey []byte) {
|
|||||||
|
|
||||||
x.iter = iter
|
x.iter = iter
|
||||||
|
|
||||||
x.checkDone()
|
x.current()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Iterator) Next() {
|
func (x *Iterator) Next() {
|
||||||
if x.done {
|
_ = x.iter.Next()
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err := x.iter.Next()
|
x.k, x.v, x.err = x.iter.Current()
|
||||||
if err != nil {
|
|
||||||
x.done = true
|
|
||||||
x.k = nil
|
|
||||||
x.v = nil
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
x.checkDone()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Iterator) Current() ([]byte, []byte, bool) {
|
func (x *Iterator) Current() ([]byte, []byte, bool) {
|
||||||
return x.k, x.v, !x.done
|
return x.k, x.v, x.err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Iterator) Key() []byte {
|
func (x *Iterator) Key() []byte {
|
||||||
if x.done {
|
if x.err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +73,7 @@ func (x *Iterator) Key() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (x *Iterator) Value() []byte {
|
func (x *Iterator) Value() []byte {
|
||||||
if x.done {
|
if x.err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +81,7 @@ func (x *Iterator) Value() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (x *Iterator) Valid() bool {
|
func (x *Iterator) Valid() bool {
|
||||||
return !x.done
|
return x.err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Iterator) Close() error {
|
func (x *Iterator) Close() error {
|
||||||
@ -104,23 +94,13 @@ func (x *Iterator) Close() error {
|
|||||||
x.iter = nil
|
x.iter = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
x.done = true
|
|
||||||
x.k = nil
|
x.k = nil
|
||||||
x.v = nil
|
x.v = nil
|
||||||
|
x.err = moss.ErrIteratorDone
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Iterator) checkDone() {
|
func (x *Iterator) current() {
|
||||||
k, v, err := x.iter.Current()
|
x.k, x.v, x.err = x.iter.Current()
|
||||||
if err != nil {
|
|
||||||
x.done = true
|
|
||||||
x.k = nil
|
|
||||||
x.v = nil
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
x.done = false
|
|
||||||
x.k = k
|
|
||||||
x.v = v
|
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ func (r *Reader) PrefixIterator(k []byte) store.KVIterator {
|
|||||||
end: kEnd,
|
end: kEnd,
|
||||||
}
|
}
|
||||||
|
|
||||||
rv.checkDone()
|
rv.current()
|
||||||
|
|
||||||
return rv
|
return rv
|
||||||
}
|
}
|
||||||
@ -76,7 +76,7 @@ func (r *Reader) RangeIterator(start, end []byte) store.KVIterator {
|
|||||||
end: end,
|
end: end,
|
||||||
}
|
}
|
||||||
|
|
||||||
rv.checkDone()
|
rv.current()
|
||||||
|
|
||||||
return rv
|
return rv
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user