Skip to content
Snippets Groups Projects
Commit 056bcfa4 authored by Carsten Gräser's avatar Carsten Gräser
Browse files

[bugfix] Fix sparseRangeFor()

Several bugs in sparseRangeFor have been fixed.
parent 5289423b
No related branches found
No related tags found
No related merge requests found
...@@ -15,19 +15,24 @@ namespace MatrixVector { ...@@ -15,19 +15,24 @@ namespace MatrixVector {
* \brief Hybrid for loop over sparse range * \brief Hybrid for loop over sparse range
*/ */
template <class Range, class F, template <class Range, class F,
typename = std::enable_if_t<Dune::IsTupleOrDerived<Range>::value>> std::enable_if_t<Dune::IsTupleOrDerived<std::decay_t<Range>>::value, int> = 0>
void sparseRangeFor(const Range& range, F&& f) { void sparseRangeFor(Range&& range, F&& f) {
using namespace Dune::Hybrid; using namespace Dune::Hybrid;
forEach(integralRange(size(range)), [&](auto&& i) { f(range[i], i); }); forEach(integralRange(size(range)), [&](auto&& i) {
f(range[i], i);
});
} }
/** /**
* \brief Hybrid for loop over sparse range * \brief Hybrid for loop over sparse range
*/ */
template<class Range, class F> template<class Range, class F,
std::enable_if_t<not Dune::IsTupleOrDerived<std::decay_t<Range>>::value, int> = 0>
void sparseRangeFor(Range&& range, F&& f) void sparseRangeFor(Range&& range, F&& f)
{ {
for (auto it = range.begin(); it != range.end(); ++it) auto it = range.begin();
auto end = range.end();
for (; it != end; ++it)
f(*it, it.index()); f(*it, it.index());
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment