From 976e43a51d1e07e6dbb1ddc00a28592abd8e5f00 Mon Sep 17 00:00:00 2001 From: Sergii Kryvonos Date: Wed, 6 Nov 2024 16:15:04 +0100 Subject: [PATCH] Sum::operator += IsSummationSimplifiable check: getCommonVars -> GCD --- omnn/math/Sum.cpp | 56 +++++------------------------------------------ 1 file changed, 6 insertions(+), 50 deletions(-) diff --git a/omnn/math/Sum.cpp b/omnn/math/Sum.cpp index 79dd8db80..14383cda8 100644 --- a/omnn/math/Sum.cpp +++ b/omnn/math/Sum.cpp @@ -805,68 +805,24 @@ namespace Valuable& Sum::operator +=(const Valuable& add) { - if (add.IsZero()) { - } - else if (add.IsSum()) { - operator+=(add.as()); - } - else if (optimizations) + if (optimizations) { std::optional optimizedValue; - if (!add.is_optimized()) { + auto addOptimizedValue = add.is_optimized(); + if (!addOptimizedValue) { optimizedValue = add.Optimized(); } - auto& value = add.is_optimized() ? add : *optimizedValue; - if (value.IsZero()) { - return *this; - } - auto AddTheValue = [&,this]() -> Valuable& { - if (add.is_optimized()) + auto& value = addOptimizedValue ? add : *optimizedValue; + if (!value.IsZero()) { + if (addOptimizedValue) Add(value); else Add(std::move(*optimizedValue)); optimize(); - return *this; - }; - - if (value.IsSum() - || members.empty() - || !is_optimized() - ) - { - return AddTheValue(); - } - auto& addendCommonVars = value.getCommonVars(); - for (auto it = members.begin(); it != members.end(); ++it) - { - auto simplified = it->IsSummationSimplifiable(value); - if (simplified.first) { - Update(it, std::move(simplified.second)); - optimize(); - return *this; - } - auto doAdditionalCheck = it->is_optimized() - ? (it->OfSameType(value) && it->getCommonVars() == addendCommonVars) - : it->GCD(value) != constants::one; - if (doAdditionalCheck) - { - auto s = *it + value; - if (!s.IsSum()) { -#if !defined(NDEBUG) && !defined(NOOMDEBUG) - std::cout << *it << " + " << add << " = " << s - << "\t\tIMPLEMENT: must be covered by IsSummationSimpifiable call" << std::endl; -#endif - Update(it, s); - optimize(); - return *this; - } - } } - AddTheValue(); } else { Add(add); } - return *this; }