From a1c957981a44b5689a966a2f9c82fabc55a4c5b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20Gr=C3=A4ser?= <graeser@dune-project.org> Date: Tue, 15 Mar 2016 14:17:50 +0100 Subject: [PATCH] Add a hybrid loop over a sparse range --- dune/solvers/common/algorithm.hh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/dune/solvers/common/algorithm.hh b/dune/solvers/common/algorithm.hh index 65181d8b..ecec1416 100644 --- a/dune/solvers/common/algorithm.hh +++ b/dune/solvers/common/algorithm.hh @@ -242,6 +242,33 @@ constexpr auto hybridSize(const T& t) +/** + * \brief Hybrid for loop over sparse range + */ +template<class... T, class F> +void sparseRangeFor(Dune::MultiTypeBlockMatrix<T...>& range, F&& f) +{ + integralRangeFor<std::size_t>(Indices::_0, hybridSize(range), [&](auto&& i) { + f(range[i], i); + }); +} + + + +/** + * \brief Hybrid for loop over sparse range + */ +template<class Range, class F> +void sparseRangeFor(Range&& range, F&& f) +{ + auto it = range.begin(); + auto end = range.end(); + for(; it!=end; ++it) + f(*it, it.index()); +} + + + } // namespace Solvers } // namespace Dune -- GitLab