refactored data-types to reduce plugin sizes
This commit is contained in:
+25
-21
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user