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