diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-22 11:22:15 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-22 11:22:15 +0300 |
| commit | ea34759130f0db16631402add7517d0e78e4185a (patch) | |
| tree | 8ea27322df33905fd911d8cb676509f209efb78d | |
| parent | 407f1dd6f3bcd7916c3e555e4d9814a04566b88c (diff) | |
refactor(rpn): pass MetricRegistry to convertToBase/convertFromBase
Fix DIP violation: convertToBase and convertFromBase called global
GetMetricRegistry() directly. Now accept reg *MetricRegistry parameter
and callers pass o.metricRegistry for consistent dependency injection.
| -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) } |
