operand-iterator.go: accepts two new optional functions 'reset' and 'clean' from data-source

This commit is contained in:
Celestino Amoroso 2024-04-27 22:32:57 +02:00
parent 354cb79580
commit 81c85afbea

View File

@ -54,14 +54,23 @@ func getDataSourceDict(ctx ExprContext, self *term) (ds map[string]Functor, err
if dictAny, ok := value.(map[any]any); ok {
ds = make(map[string]Functor)
for _, k := range []string{initName, currentName, nextName} {
// required functions
for _, k := range []string{currentName, nextName} {
if item, exists := dictAny[k]; exists && item != nil {
if functor, ok := item.(*funcDefFunctor); ok {
ds[k] = functor
}
} else if k != initName {
} else {
err = fmt.Errorf("the data-source must provide a non-nil %q operator", k)
break
return
}
}
// Optional functions
for _, k := range []string{initName, resetName, cleanName} {
if item, exists := dictAny[k]; exists && item != nil {
if functor, ok := item.(*funcDefFunctor); ok {
ds[k] = functor
}
}
}
} else {
@ -98,6 +107,9 @@ func evalIterator(ctx ExprContext, self *term) (v any, err error) {
dc.nextFunc, _ = ds[nextName]
dc.currentFunc, _ = ds[currentName]
dc.cleanFunc, _ = ds[cleanName]
dc.resetFunc, _ = ds[resetName]
v = dc
return