refactored data-types to reduce plugin sizes

This commit is contained in:
2026-06-08 07:02:56 +02:00
parent fec7cc546c
commit b6da9bcad4
90 changed files with 1039 additions and 803 deletions
+25 -21
View File
@@ -9,10 +9,14 @@ import (
"io"
"git.portale-stac.it/go-pkg/expr/kern"
"git.portale-stac.it/go-pkg/expr/types"
"git.portale-stac.it/go-pkg/expr/types/array"
"git.portale-stac.it/go-pkg/expr/types/float"
"git.portale-stac.it/go-pkg/expr/types/fract"
)
func checkNumberParamExpected(funcName string, paramValue any, paramPos, level, subPos int) (err error) {
if !(kern.IsNumber(paramValue) || kern.IsFraction(paramValue)) /*|| isList(paramValue)*/ {
if !(types.IsNumber(paramValue) || fract.IsFraction(paramValue)) /*|| isList(paramValue)*/ {
err = fmt.Errorf("%s(): param nr %d (%d in %d) has wrong type %T, number expected",
funcName, paramPos+1, subPos+1, level, paramValue)
}
@@ -23,13 +27,13 @@ func doAdd(ctx kern.ExprContext, name string, it kern.Iterator, count, level int
var sumAsFloat, sumAsFract bool
var floatSum float64 = 0.0
var intSum int64 = 0
var fractSum *kern.FractionType
var fractSum *fract.FractionType
var v any
level++
for v, err = it.Next(); err == nil; v, err = it.Next() {
if list, ok := v.(*kern.ListType); ok {
if list, ok := v.(*array.ListType); ok {
v = NewListIterator(list, nil)
}
if subIter, ok := v.(kern.Iterator); ok {
@@ -47,29 +51,29 @@ func doAdd(ctx kern.ExprContext, name string, it kern.Iterator, count, level int
count++
if !sumAsFloat {
if kern.IsFloat(v) {
if float.IsFloat(v) {
sumAsFloat = true
if sumAsFract {
floatSum = fractSum.ToFloat()
} else {
floatSum = float64(intSum)
}
} else if !sumAsFract && kern.IsFraction(v) {
fractSum = kern.NewFraction(intSum, 1)
} else if !sumAsFract && fract.IsFraction(v) {
fractSum = fract.NewFraction(intSum, 1)
sumAsFract = true
}
}
if sumAsFloat {
floatSum += kern.NumAsFloat(v)
floatSum += types.NumAsFloat(v)
} else if sumAsFract {
var item *kern.FractionType
var item *fract.FractionType
var ok bool
if item, ok = v.(*kern.FractionType); !ok {
if item, ok = v.(*fract.FractionType); !ok {
iv, _ := v.(int64)
item = kern.NewFraction(iv, 1)
item = fract.NewFraction(iv, 1)
}
fractSum = kern.SumFract(fractSum, item)
fractSum = fract.SumFract(fractSum, item)
} else {
iv, _ := v.(int64)
intSum += iv
@@ -98,12 +102,12 @@ func doMul(ctx kern.ExprContext, name string, it kern.Iterator, count, level int
var mulAsFloat, mulAsFract bool
var floatProd float64 = 1.0
var intProd int64 = 1
var fractProd *kern.FractionType
var fractProd *fract.FractionType
var v any
level++
for v, err = it.Next(); err == nil; v, err = it.Next() {
if list, ok := v.(*kern.ListType); ok {
if list, ok := v.(*array.ListType); ok {
v = NewListIterator(list, nil)
}
if subIter, ok := v.(kern.Iterator); ok {
@@ -123,29 +127,29 @@ func doMul(ctx kern.ExprContext, name string, it kern.Iterator, count, level int
count++
if !mulAsFloat {
if kern.IsFloat(v) {
if float.IsFloat(v) {
mulAsFloat = true
if mulAsFract {
floatProd = fractProd.ToFloat()
} else {
floatProd = float64(intProd)
}
} else if !mulAsFract && kern.IsFraction(v) {
fractProd = kern.NewFraction(intProd, 1)
} else if !mulAsFract && fract.IsFraction(v) {
fractProd = fract.NewFraction(intProd, 1)
mulAsFract = true
}
}
if mulAsFloat {
floatProd *= kern.NumAsFloat(v)
floatProd *= types.NumAsFloat(v)
} else if mulAsFract {
var item *kern.FractionType
var item *fract.FractionType
var ok bool
if item, ok = v.(*kern.FractionType); !ok {
if item, ok = v.(*fract.FractionType); !ok {
iv, _ := v.(int64)
item = kern.NewFraction(iv, 1)
item = fract.NewFraction(iv, 1)
}
fractProd = kern.MulFract(fractProd, item)
fractProd = fract.MulFract(fractProd, item)
} else {
iv, _ := v.(int64)
intProd *= iv