From 72ae0f6a1a5e8d25ef33d5697f792b665a0bb0cb Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 21 Mar 2022 19:35:58 +0100 Subject: [PATCH] Use enumerate. --- libsolutil/BooleanLP.cpp | 4 ++-- libsolutil/LP.cpp | 10 +++++----- libsolutil/LinearExpression.h | 9 ++++----- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/libsolutil/BooleanLP.cpp b/libsolutil/BooleanLP.cpp index c15efb129..4577d6582 100644 --- a/libsolutil/BooleanLP.cpp +++ b/libsolutil/BooleanLP.cpp @@ -489,7 +489,7 @@ optional BooleanLPSolver::parseFactor(smtutil::Expression cons bool BooleanLPSolver::tryAddDirectBounds(Constraint const& _constraint) { - auto nonzero = _constraint.data | ranges::views::enumerate | ranges::views::tail | ranges::views::filter( + auto nonzero = _constraint.data.enumerateTail() | ranges::views::filter( [](std::pair const& _x) { return !!_x.second; } ); // TODO we can exit early on in the loop above. @@ -650,7 +650,7 @@ string BooleanLPSolver::toString(Clause const& _clause) const string BooleanLPSolver::toString(Constraint const& _constraint) const { vector line; - for (auto&& [index, multiplier]: _constraint.data | ranges::views::enumerate) + for (auto&& [index, multiplier]: _constraint.data.enumerate()) if (index > 0 && multiplier != 0) { string mult = diff --git a/libsolutil/LP.cpp b/libsolutil/LP.cpp index c3350bbd2..4ed84c7bb 100644 --- a/libsolutil/LP.cpp +++ b/libsolutil/LP.cpp @@ -148,7 +148,7 @@ pair, bool> toEquationalForm(vector _constr optional findPivotColumn(Tableau const& _tableau) { auto&& [maxColumn, maxValue] = ranges::max( - _tableau.objective | ranges::views::enumerate | ranges::views::tail, + _tableau.objective.enumerateTail(), {}, [](std::pair const& _x) { return _x.second; } ); @@ -468,7 +468,7 @@ pair, vector> connectedComponent(SolvingState const& _state, if (includedRows[row]) continue; includedRows[row] = true; - for (auto const& [index, entry]: _state.constraints[row].data | ranges::views::enumerate | ranges::views::tail) + for (auto const& [index, entry]: _state.constraints[row].data.enumerateTail()) if (entry && !seenColumns[index]) { seenColumns[index] = true; @@ -536,7 +536,7 @@ string SolvingState::toString() const for (Constraint const& constraint: constraints) { vector line; - for (auto&& [index, multiplier]: constraint.data | ranges::views::enumerate) + for (auto&& [index, multiplier]: constraint.data.enumerate()) if (index > 0 && multiplier != 0) { string mult = @@ -631,7 +631,7 @@ optional SolvingStateSimplifier::extractDirectConstraints() bool needsRemoval = false; for (auto const& [index, constraint]: m_state.constraints | ranges::views::enumerate) { - auto nonzeroCoefficients = constraint.data | ranges::views::enumerate | ranges::views::tail | ranges::views::filter( + auto nonzeroCoefficients = constraint.data.enumerateTail() | ranges::views::filter( [](std::pair const& _x) { return !!_x.second; } ); // TODO we can exit early on in the loop above since we only care about zero, one or more than one nonzero entries. @@ -687,7 +687,7 @@ void SolvingStateSimplifier::removeEmptyColumns() vector variablesSeen(m_state.bounds.size(), false); for (auto const& constraint: m_state.constraints) { - for (auto&& [index, factor]: constraint.data | ranges::views::enumerate | ranges::views::tail) + for (auto&& [index, factor]: constraint.data.enumerateTail()) if (factor) variablesSeen[index] = true; } diff --git a/libsolutil/LinearExpression.h b/libsolutil/LinearExpression.h index bdfdae642..0d5045421 100644 --- a/libsolutil/LinearExpression.h +++ b/libsolutil/LinearExpression.h @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -79,11 +80,9 @@ public: return factors[_index]; } - auto begin() { return factors.begin(); } - auto end() { return factors.end(); } - - auto begin() const { return factors.begin(); } - auto end() const { return factors.end(); } + auto enumerate() const { return factors | ranges::view::enumerate; } + // leave out the zero if exists + auto enumerateTail() const { return factors | ranges::view::enumerate | ranges::view::tail; } rational const& front() const { return factors.front(); }