Use enumerate.

This commit is contained in:
chriseth 2022-03-21 19:35:58 +01:00
parent f163f9b7ce
commit 72ae0f6a1a
3 changed files with 11 additions and 12 deletions

View File

@ -489,7 +489,7 @@ optional<LinearExpression> BooleanLPSolver::parseFactor(smtutil::Expression cons
bool BooleanLPSolver::tryAddDirectBounds(Constraint const& _constraint) 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<size_t, rational> const& _x) { return !!_x.second; } [](std::pair<size_t, rational> const& _x) { return !!_x.second; }
); );
// TODO we can exit early on in the loop above. // 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 string BooleanLPSolver::toString(Constraint const& _constraint) const
{ {
vector<string> line; vector<string> line;
for (auto&& [index, multiplier]: _constraint.data | ranges::views::enumerate) for (auto&& [index, multiplier]: _constraint.data.enumerate())
if (index > 0 && multiplier != 0) if (index > 0 && multiplier != 0)
{ {
string mult = string mult =

View File

@ -148,7 +148,7 @@ pair<vector<LinearExpression>, bool> toEquationalForm(vector<Constraint> _constr
optional<size_t> findPivotColumn(Tableau const& _tableau) optional<size_t> findPivotColumn(Tableau const& _tableau)
{ {
auto&& [maxColumn, maxValue] = ranges::max( auto&& [maxColumn, maxValue] = ranges::max(
_tableau.objective | ranges::views::enumerate | ranges::views::tail, _tableau.objective.enumerateTail(),
{}, {},
[](std::pair<size_t, rational> const& _x) { return _x.second; } [](std::pair<size_t, rational> const& _x) { return _x.second; }
); );
@ -468,7 +468,7 @@ pair<vector<bool>, vector<bool>> connectedComponent(SolvingState const& _state,
if (includedRows[row]) if (includedRows[row])
continue; continue;
includedRows[row] = true; 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]) if (entry && !seenColumns[index])
{ {
seenColumns[index] = true; seenColumns[index] = true;
@ -536,7 +536,7 @@ string SolvingState::toString() const
for (Constraint const& constraint: constraints) for (Constraint const& constraint: constraints)
{ {
vector<string> line; vector<string> line;
for (auto&& [index, multiplier]: constraint.data | ranges::views::enumerate) for (auto&& [index, multiplier]: constraint.data.enumerate())
if (index > 0 && multiplier != 0) if (index > 0 && multiplier != 0)
{ {
string mult = string mult =
@ -631,7 +631,7 @@ optional<ReasonSet> SolvingStateSimplifier::extractDirectConstraints()
bool needsRemoval = false; bool needsRemoval = false;
for (auto const& [index, constraint]: m_state.constraints | ranges::views::enumerate) 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<size_t, rational> const& _x) { return !!_x.second; } [](std::pair<size_t, rational> 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. // 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<bool> variablesSeen(m_state.bounds.size(), false); vector<bool> variablesSeen(m_state.bounds.size(), false);
for (auto const& constraint: m_state.constraints) 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) if (factor)
variablesSeen[index] = true; variablesSeen[index] = true;
} }

View File

@ -27,6 +27,7 @@
#include <boost/rational.hpp> #include <boost/rational.hpp>
#include <range/v3/view/tail.hpp> #include <range/v3/view/tail.hpp>
#include <range/v3/view/enumerate.hpp>
#include <range/v3/algorithm/all_of.hpp> #include <range/v3/algorithm/all_of.hpp>
#include <optional> #include <optional>
@ -79,11 +80,9 @@ public:
return factors[_index]; return factors[_index];
} }
auto begin() { return factors.begin(); } auto enumerate() const { return factors | ranges::view::enumerate; }
auto end() { return factors.end(); } // leave out the zero if exists
auto enumerateTail() const { return factors | ranges::view::enumerate | ranges::view::tail; }
auto begin() const { return factors.begin(); }
auto end() const { return factors.end(); }
rational const& front() const { return factors.front(); } rational const& front() const { return factors.front(); }