utils.go: Copy and Clone maps with filter function. Also added isIterator().
This commit is contained in:
parent
aa66d07caa
commit
056d42d328
29
utils.go
29
utils.go
@ -4,7 +4,9 @@
|
|||||||
// utils.go
|
// utils.go
|
||||||
package expr
|
package expr
|
||||||
|
|
||||||
import "reflect"
|
import (
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
func isString(v any) (ok bool) {
|
func isString(v any) (ok bool) {
|
||||||
_, ok = v.(string)
|
_, ok = v.(string)
|
||||||
@ -44,6 +46,11 @@ func isFunctor(v any) (ok bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isIterator(v any) (ok bool) {
|
||||||
|
_, ok = v.(Iterator)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func numAsFloat(v any) (f float64) {
|
func numAsFloat(v any) (f float64) {
|
||||||
var ok bool
|
var ok bool
|
||||||
if f, ok = v.(float64); !ok {
|
if f, ok = v.(float64); !ok {
|
||||||
@ -141,3 +148,23 @@ func CloneMap[K comparable, V any](source map[K]V) map[K]V {
|
|||||||
dest := make(map[K]V, len(source))
|
dest := make(map[K]V, len(source))
|
||||||
return CopyMap(dest, source)
|
return CopyMap(dest, source)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CopyFilteredMap[K comparable, V any](dest, source map[K]V, filter func(key K) (accept bool)) map[K]V {
|
||||||
|
// fmt.Printf("--- Clone with filter %p\n", filter)
|
||||||
|
if filter == nil {
|
||||||
|
return CopyMap(dest, source)
|
||||||
|
} else {
|
||||||
|
for k, v := range source {
|
||||||
|
if filter(k) {
|
||||||
|
// fmt.Printf("\tClone var %q\n", k)
|
||||||
|
dest[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dest
|
||||||
|
}
|
||||||
|
|
||||||
|
func CloneFilteredMap[K comparable, V any](source map[K]V, filter func(key K) (accept bool)) map[K]V {
|
||||||
|
dest := make(map[K]V, len(source))
|
||||||
|
return CopyFilteredMap(dest, source, filter)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user