diff --git a/iter-list.go b/iter-list.go index 8cfefa2..f45d18b 100644 --- a/iter-list.go +++ b/iter-list.go @@ -4,7 +4,10 @@ // iter-list.go package expr -import "io" +import ( + "fmt" + "io" +) type ListIterator struct { a *ListType @@ -34,12 +37,26 @@ func NewAnyIterator(value any) (it *ListIterator) { return } -func (it *ListIterator) HasOperation(name string) bool { - return false +func (it *ListIterator) String() string { + var l = 0 + if it.a != nil { + l = len(*it.a) + } + return fmt.Sprintf("$(#%d)", l) } -func (it *ListIterator) CallOperation(name string, args []any) (any, error) { - return nil, errNoOperation(name) +func (it *ListIterator) HasOperation(name string) bool { + yes := name == resetName + return yes +} + +func (it *ListIterator) CallOperation(name string, args []any) (v any, err error) { + if name == resetName { + v, err = it.Reset() + } else { + err = errNoOperation(name) + } + return } func (it *ListIterator) Current() (item any, err error) { @@ -56,15 +73,14 @@ func (it *ListIterator) 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 *ListIterator) Index() int { return it.index - 1 } + +func (it *ListIterator) Reset() (bool, error) { + it.index = 0 + return true, nil +}