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