moved a subset of source file to the kern package
This commit is contained in:
+18
-16
@@ -9,6 +9,8 @@ import (
|
||||
"io"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
"git.portale-stac.it/go-pkg/expr/kern"
|
||||
)
|
||||
|
||||
type dictIterMode int
|
||||
@@ -20,7 +22,7 @@ const (
|
||||
)
|
||||
|
||||
type DictIterator struct {
|
||||
a *DictType
|
||||
a *kern.DictType
|
||||
count int
|
||||
index int
|
||||
keys []any
|
||||
@@ -65,7 +67,7 @@ func (it *DictIterator) makeKeys(m map[any]any, sort sortType) {
|
||||
}
|
||||
}
|
||||
|
||||
func NewDictIterator(dict *DictType, args []any) (it *DictIterator, err error) {
|
||||
func NewDictIterator(dict *kern.DictType, args []any) (it *DictIterator, err error) {
|
||||
var sortType = sortTypeNone
|
||||
var s string
|
||||
var argAny any
|
||||
@@ -76,7 +78,7 @@ func NewDictIterator(dict *DictType, args []any) (it *DictIterator, err error) {
|
||||
} else {
|
||||
argAny = "default"
|
||||
}
|
||||
if s, err = ToGoString(argAny, "sort type"); err == nil {
|
||||
if s, err = kern.ToGoString(argAny, "sort type"); err == nil {
|
||||
switch strings.ToLower(s) {
|
||||
case "a", "asc":
|
||||
sortType = sortTypeAsc
|
||||
@@ -97,7 +99,7 @@ func NewDictIterator(dict *DictType, args []any) (it *DictIterator, err error) {
|
||||
argAny = "default"
|
||||
}
|
||||
|
||||
if s, err = ToGoString(argAny, "iteration mode"); err == nil {
|
||||
if s, err = kern.ToGoString(argAny, "iteration mode"); err == nil {
|
||||
switch strings.ToLower(s) {
|
||||
case "k", "key", "keys":
|
||||
dictIt.iterMode = dictIterModeKeys
|
||||
@@ -119,7 +121,7 @@ func NewDictIterator(dict *DictType, args []any) (it *DictIterator, err error) {
|
||||
}
|
||||
|
||||
func NewMapIterator(m map[any]any) (it *DictIterator) {
|
||||
it = &DictIterator{a: (*DictType)(&m), count: 0, index: -1, keys: nil}
|
||||
it = &DictIterator{a: (*kern.DictType)(&m), count: 0, index: -1, keys: nil}
|
||||
it.makeKeys(m, sortTypeNone)
|
||||
return
|
||||
}
|
||||
@@ -138,31 +140,31 @@ func (it *DictIterator) TypeName() string {
|
||||
|
||||
func (it *DictIterator) HasOperation(name string) bool {
|
||||
// yes := name == NextName || name == ResetName || name == IndexName || name == CountName || name == CurrentName
|
||||
yes := slices.Contains([]string{NextName, ResetName, IndexName, CountName, CurrentName, CleanName, KeyName, ValueName}, name)
|
||||
yes := slices.Contains([]string{kern.NextName, kern.ResetName, kern.IndexName, kern.CountName, kern.CurrentName, kern.CleanName, kern.KeyName, kern.ValueName}, name)
|
||||
return yes
|
||||
}
|
||||
|
||||
func (it *DictIterator) CallOperation(name string, args map[string]any) (v any, err error) {
|
||||
switch name {
|
||||
case NextName:
|
||||
case kern.NextName:
|
||||
v, err = it.Next()
|
||||
case ResetName:
|
||||
case kern.ResetName:
|
||||
err = it.Reset()
|
||||
case CleanName:
|
||||
case kern.CleanName:
|
||||
err = it.Clean()
|
||||
case IndexName:
|
||||
case kern.IndexName:
|
||||
v = int64(it.Index())
|
||||
case CurrentName:
|
||||
case kern.CurrentName:
|
||||
v, err = it.Current()
|
||||
case CountName:
|
||||
case kern.CountName:
|
||||
v = it.count
|
||||
case KeyName:
|
||||
case kern.KeyName:
|
||||
if it.index >= 0 && it.index < len(it.keys) {
|
||||
v = it.keys[it.index]
|
||||
} else {
|
||||
err = io.EOF
|
||||
}
|
||||
case ValueName:
|
||||
case kern.ValueName:
|
||||
if it.index >= 0 && it.index < len(it.keys) {
|
||||
a := *(it.a)
|
||||
v = a[it.keys[it.index]]
|
||||
@@ -170,7 +172,7 @@ func (it *DictIterator) CallOperation(name string, args map[string]any) (v any,
|
||||
err = io.EOF
|
||||
}
|
||||
default:
|
||||
err = errNoOperation(name)
|
||||
err = kern.ErrNoOperation(name)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -186,7 +188,7 @@ func (it *DictIterator) Current() (item any, err error) {
|
||||
case dictIterModeItems:
|
||||
a := *(it.a)
|
||||
pair := []any{it.keys[it.index], a[it.keys[it.index]]}
|
||||
item = newList(pair)
|
||||
item = kern.NewList(pair)
|
||||
}
|
||||
} else {
|
||||
err = io.EOF
|
||||
|
||||
Reference in New Issue
Block a user