operand-iterator.go: accepts two new optional functions 'reset' and 'clean' from data-source
This commit is contained in:
parent
354cb79580
commit
81c85afbea
@ -54,14 +54,23 @@ func getDataSourceDict(ctx ExprContext, self *term) (ds map[string]Functor, err
|
|||||||
|
|
||||||
if dictAny, ok := value.(map[any]any); ok {
|
if dictAny, ok := value.(map[any]any); ok {
|
||||||
ds = make(map[string]Functor)
|
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 item, exists := dictAny[k]; exists && item != nil {
|
||||||
if functor, ok := item.(*funcDefFunctor); ok {
|
if functor, ok := item.(*funcDefFunctor); ok {
|
||||||
ds[k] = functor
|
ds[k] = functor
|
||||||
}
|
}
|
||||||
} else if k != initName {
|
} else {
|
||||||
err = fmt.Errorf("the data-source must provide a non-nil %q operator", k)
|
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 {
|
} else {
|
||||||
@ -98,6 +107,9 @@ func evalIterator(ctx ExprContext, self *term) (v any, err error) {
|
|||||||
|
|
||||||
dc.nextFunc, _ = ds[nextName]
|
dc.nextFunc, _ = ds[nextName]
|
||||||
dc.currentFunc, _ = ds[currentName]
|
dc.currentFunc, _ = ds[currentName]
|
||||||
|
dc.cleanFunc, _ = ds[cleanName]
|
||||||
|
dc.resetFunc, _ = ds[resetName]
|
||||||
|
|
||||||
v = dc
|
v = dc
|
||||||
|
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user