// 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 }