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 {
* \brief Hybrid for loop over sparse range
*/
template <class Range, class F,
typename = std::enable_if_t<Dune::IsTupleOrDerived<Range>::value>>
void sparseRangeFor(const Range& range, F&& f) {
std::enable_if_t<Dune::IsTupleOrDerived<std::decay_t<Range>>::value, int> = 0>
void sparseRangeFor(Range&& range, F&& f) {
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
*/
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)
{
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());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment