41 lines
715 B
Go
41 lines
715 B
Go
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
|
|
// All rights reserved.
|
|
|
|
// 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
|
|
}
|