From 1d5ee7514d3e4360969a906868ca28607dedee8d Mon Sep 17 00:00:00 2001 From: lbressler13 Date: Fri, 1 Mar 2024 03:36:26 -0500 Subject: [PATCH] feat: store mult simplified --- .../expressions/expression/MultiplicativeExpression.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/exact-numbers/src/main/kotlin/xyz/lbres/exactnumbers/expressions/expression/MultiplicativeExpression.kt b/exact-numbers/src/main/kotlin/xyz/lbres/exactnumbers/expressions/expression/MultiplicativeExpression.kt index 95bde40..8b2128b 100644 --- a/exact-numbers/src/main/kotlin/xyz/lbres/exactnumbers/expressions/expression/MultiplicativeExpression.kt +++ b/exact-numbers/src/main/kotlin/xyz/lbres/exactnumbers/expressions/expression/MultiplicativeExpression.kt @@ -21,6 +21,7 @@ import java.math.BigDecimal @Suppress("EqualsOrHashCode") internal class MultiplicativeExpression private constructor(expressions: ConstMultiSet) : ExpressionImpl() { private val expressions: ConstMultiSet + private var simplified: Expression? = null init { this.expressions = when { @@ -65,11 +66,16 @@ internal class MultiplicativeExpression private constructor(expressions: ConstMu } override fun getSimplified(): Expression { + if (simplified != null) { + return simplified!! + } + val split = getSplitExpressions() val simpleTerm = split.first.fold(Term.ONE) { acc, expr -> acc * expr.term } val simple: Expression = SimpleExpression(simpleTerm.getSimplified()) if (split.second.isEmpty()) { + simplified = simple return simple } @@ -82,7 +88,8 @@ internal class MultiplicativeExpression private constructor(expressions: ConstMu } distributed } - return AdditiveExpression(exprs.toConstMultiSet()).getSimplified() + simplified = AdditiveExpression(exprs.toConstMultiSet()).getSimplified() + return simplified!! } override fun getValue(): BigDecimal = getSimplified().getValue()