diff --git a/index/store/moss/iterator.go b/index/store/moss/iterator.go index c2e0dc1d..0ab9d861 100644 --- a/index/store/moss/iterator.go +++ b/index/store/moss/iterator.go @@ -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() } diff --git a/index/store/moss/reader.go b/index/store/moss/reader.go index 946dbbbf..ce659dbe 100644 --- a/index/store/moss/reader.go +++ b/index/store/moss/reader.go @@ -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 }