diff --git a/iter-list.go b/iter-list.go new file mode 100644 index 0000000..3fd3cb1 --- /dev/null +++ b/iter-list.go @@ -0,0 +1,42 @@ +// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com). +// All rights reserved. + +// iter-list.go +package expr + +import "io" + +type FlatArrayIterator struct { + a []any + index int +} + +func NewFlatArrayIterator(array []any) *FlatArrayIterator { + return &FlatArrayIterator{a: array, index: 0} +} + +func (it *FlatArrayIterator) Current() (item any, err error) { + if it.index >= 0 && it.index < len(it.a) { + item = it.a[it.index] + } else { + err = io.EOF + } + return +} + +func (it *FlatArrayIterator) Next() (item any, err error) { + if item, err = it.Current(); err != io.EOF { + it.index++ + } + // 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 +} diff --git a/iterator.go b/iterator.go index c815f02..90144b8 100644 --- a/iterator.go +++ b/iterator.go @@ -4,37 +4,8 @@ // iterator.go package expr -import "io" - type Iterator interface { - Reset() Next() (item any, err error) // must return io.EOF after the last item + Current() (item any, err error) 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 -}