iter-list.go: implemntation of the ExtInterface and coperation reset

This commit is contained in:
Celestino Amoroso 2024-05-04 00:35:27 +02:00
parent 5cf0bfbad4
commit 6c604812ee

View File

@ -4,7 +4,10 @@
// iter-list.go // iter-list.go
package expr package expr
import "io" import (
"fmt"
"io"
)
type ListIterator struct { type ListIterator struct {
a *ListType a *ListType
@ -34,12 +37,26 @@ func NewAnyIterator(value any) (it *ListIterator) {
return return
} }
func (it *ListIterator) HasOperation(name string) bool { func (it *ListIterator) String() string {
return false 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) { func (it *ListIterator) HasOperation(name string) bool {
return nil, errNoOperation(name) 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) { 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 { if item, err = it.Current(); err != io.EOF {
it.index++ it.index++
} }
// if it.index < len(it.a) {
// item = it.a[it.index]
// it.index++
// } else {
// err = io.EOF
// }
return return
} }
func (it *ListIterator) Index() int { func (it *ListIterator) Index() int {
return it.index - 1 return it.index - 1
} }
func (it *ListIterator) Reset() (bool, error) {
it.index = 0
return true, nil
}