diff options
| -rw-r--r-- | internal/rpn/operations_arithmetic.go | 30 | ||||
| -rw-r--r-- | internal/rpn/operations_metric.go | 8 |
2 files changed, 19 insertions, 19 deletions
diff --git a/internal/rpn/operations_arithmetic.go b/internal/rpn/operations_arithmetic.go index 429a14c..c28209b 100644 --- a/internal/rpn/operations_arithmetic.go +++ b/internal/rpn/operations_arithmetic.go @@ -23,16 +23,16 @@ func (o *Operations) Add(stack *Stack) error { } // Convert both to base units, add, convert back to result metric - aBase, err := convertToBase(a, SI) + aBase, err := convertToBase(o.metricRegistry, a, SI) if err != nil { return buildError("addition", err) } - bBase, err := convertToBase(b, SI) + bBase, err := convertToBase(o.metricRegistry, b, SI) if err != nil { return buildError("addition", err) } resultMetric := compatibleMetric(o.metricRegistry, aM, bM) - resultVal := convertFromBase(aBase+bBase, resultMetric, SI) + resultVal := convertFromBase(o.metricRegistry, aBase+bBase, resultMetric, SI) stack.Push(NewNumber(resultVal, o.GetMode(), resultMetric)) return nil @@ -50,16 +50,16 @@ func (o *Operations) Subtract(stack *Stack) error { return metricError("-", aM, bM) } - aBase, err := convertToBase(a, SI) + aBase, err := convertToBase(o.metricRegistry, a, SI) if err != nil { return buildError("subtraction", err) } - bBase, err := convertToBase(b, SI) + bBase, err := convertToBase(o.metricRegistry, b, SI) if err != nil { return buildError("subtraction", err) } resultMetric := compatibleMetric(o.metricRegistry, aM, bM) - resultVal := convertFromBase(aBase-bBase, resultMetric, SI) + resultVal := convertFromBase(o.metricRegistry, aBase-bBase, resultMetric, SI) stack.Push(NewNumber(resultVal, o.GetMode(), resultMetric)) return nil @@ -75,16 +75,16 @@ func (o *Operations) Multiply(stack *Stack) error { aM, bM := resolveMetric(o.metricRegistry, a), resolveMetric(o.metricRegistry, b) // Convert both to base units, multiply, convert back to result metric - aBase, err := convertToBase(a, SI) + aBase, err := convertToBase(o.metricRegistry, a, SI) if err != nil { return buildError("multiplication", err) } - bBase, err := convertToBase(b, SI) + bBase, err := convertToBase(o.metricRegistry, b, SI) if err != nil { return buildError("multiplication", err) } resultMetric := resultMetricForMul(o.metricRegistry, aM, bM) - resultVal := convertFromBase(aBase*bBase, resultMetric, SI) + resultVal := convertFromBase(o.metricRegistry, aBase*bBase, resultMetric, SI) stack.Push(NewNumber(resultVal, o.GetMode(), resultMetric)) return nil @@ -108,16 +108,16 @@ func (o *Operations) Divide(stack *Stack) error { aM, bM := resolveMetric(o.metricRegistry, a), resolveMetric(o.metricRegistry, b) - aBase, err := convertToBase(a, SI) + aBase, err := convertToBase(o.metricRegistry, a, SI) if err != nil { return buildError("division", err) } - bBase, err := convertToBase(b, SI) + bBase, err := convertToBase(o.metricRegistry, b, SI) if err != nil { return buildError("division", err) } resultMetric := resultMetricForDiv(o.metricRegistry, aM, bM) - resultVal := convertFromBase(aBase/bBase, resultMetric, SI) + resultVal := convertFromBase(o.metricRegistry, aBase/bBase, resultMetric, SI) stack.Push(NewNumber(resultVal, o.GetMode(), resultMetric)) return nil @@ -167,16 +167,16 @@ func (o *Operations) Modulo(stack *Stack) error { return metricError("%", aM, bM) } - aBase, err := convertToBase(a, SI) + aBase, err := convertToBase(o.metricRegistry, a, SI) if err != nil { return buildError("modulo", err) } - bBase, err := convertToBase(b, SI) + bBase, err := convertToBase(o.metricRegistry, b, SI) if err != nil { return buildError("modulo", err) } resultMetric := compatibleMetric(o.metricRegistry, aM, bM) - resultVal := convertFromBase(math.Mod(aBase, bBase), resultMetric, SI) + resultVal := convertFromBase(o.metricRegistry, math.Mod(aBase, bBase), resultMetric, SI) stack.Push(NewNumber(resultVal, o.GetMode(), resultMetric)) return nil diff --git a/internal/rpn/operations_metric.go b/internal/rpn/operations_metric.go index 7a2fd7b..6970006 100644 --- a/internal/rpn/operations_metric.go +++ b/internal/rpn/operations_metric.go @@ -51,8 +51,8 @@ func compatibleMetric(reg *MetricRegistry, a, b *Metric) *Metric { // convertToBase converts a Number's value to its metric's base unit. // Returns the converted float64 value. -func convertToBase(n Number, mode PrefixMode) (float64, error) { - m := resolveMetric(GetMetricRegistry(), n) +func convertToBase(reg *MetricRegistry, n Number, mode PrefixMode) (float64, error) { + m := resolveMetric(reg, n) val, err := n.Float64() if err != nil { return 0, fmt.Errorf("convertToBase: %w", err) @@ -61,9 +61,9 @@ func convertToBase(n Number, mode PrefixMode) (float64, error) { } // convertFromBase converts a base-unit value back to the given metric. -func convertFromBase(baseVal float64, m *Metric, mode PrefixMode) float64 { +func convertFromBase(reg *MetricRegistry, baseVal float64, m *Metric, mode PrefixMode) float64 { if m == nil { - m = coolMetric(GetMetricRegistry()) + m = coolMetric(reg) } return baseVal / m.Factor(mode) } |
