38 lines
619 B
Go
38 lines
619 B
Go
|
// iterator.go
|
||
|
package expr
|
||
|
|
||
|
import "io"
|
||
|
|
||
|
type Iterator interface {
|
||
|
Reset()
|
||
|
Next() (item any, err error) // must return io.EOF after the last item
|
||
|
Index() int
|
||
|
}
|
||
|
|
||
|
type FlatArrayIterator struct {
|
||
|
a []any
|
||
|
index int
|
||
|
}
|
||
|
|
||
|
func NewFlatArrayIterator(array []any) *FlatArrayIterator {
|
||
|
return &FlatArrayIterator{a: array, index: 0}
|
||
|
}
|
||
|
|
||
|
func (it *FlatArrayIterator) Reset() {
|
||
|
it.index = 0
|
||
|
}
|
||
|
|
||
|
func (it *FlatArrayIterator) Next() (item any, err error) {
|
||
|
if it.index < len(it.a) {
|
||
|
item = it.a[it.index]
|
||
|
it.index++
|
||
|
} else {
|
||
|
err = io.EOF
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (it *FlatArrayIterator) Index() int {
|
||
|
return it.index - 1
|
||
|
}
|