summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/rpn/operations_arithmetic.go30
-rw-r--r--internal/rpn/operations_metric.go8
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)
}