From c3004f8c6d026ec903219a0aa52339a2480de3a3 Mon Sep 17 00:00:00 2001 From: Holger Obermaier <40787752+ho-ob@users.noreply.github.com> Date: Thu, 17 Aug 2023 10:20:47 +0200 Subject: [PATCH] Use generic function to simplify code --- .../metricAggregatorFunctions.go | 39 +++++++------------ 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/internal/metricAggregator/metricAggregatorFunctions.go b/internal/metricAggregator/metricAggregatorFunctions.go index 91a2c93..37ed5d9 100644 --- a/internal/metricAggregator/metricAggregatorFunctions.go +++ b/internal/metricAggregator/metricAggregatorFunctions.go @@ -15,40 +15,29 @@ import ( * Arithmetic functions on value arrays */ +func sumAnyType[T float64 | float32 | int | int32 | int64](values []T) interface{} { + var sum T + for _, value := range values { + sum += value + } + return sum +} + // Sum up values func sumfunc(args interface{}) (interface{}, error) { + var err error switch values := args.(type) { case []float64: - var s float64 = 0.0 - for _, x := range values { - s += x - } - return s, nil + return sumAnyType(values), nil case []float32: - var s float32 = 0.0 - for _, x := range values { - s += x - } - return s, nil + return sumAnyType(values), nil case []int: - var s int = 0 - for _, x := range values { - s += x - } - return s, nil + return sumAnyType(values), nil case []int64: - var s int64 = 0 - for _, x := range values { - s += x - } - return s, nil + return sumAnyType(values), nil case []int32: - var s int32 = 0 - for _, x := range values { - s += x - } - return s, nil + return sumAnyType(values), nil default: err = errors.New("function 'sum' only on list of values (float64, float32, int, int32, int64)") }