From 7eefb6424831f18a09b533f82596b5fe61867683 Mon Sep 17 00:00:00 2001 From: Max Kahnt <max.kahnt@fu-berlin.de> Date: Thu, 28 Sep 2017 15:32:26 +0200 Subject: [PATCH] Add sparseRangeFirst hybrid applicator. --- dune/matrix-vector/algorithm.hh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dune/matrix-vector/algorithm.hh b/dune/matrix-vector/algorithm.hh index 526b542..5a1c710 100644 --- a/dune/matrix-vector/algorithm.hh +++ b/dune/matrix-vector/algorithm.hh @@ -36,7 +36,17 @@ void sparseRangeFor(Range&& range, F&& f) f(*it, it.index()); } - +//! \brief Hybrid access to first sparse range element (static/tuple-like candiate) +template <class Range, class F, std::enable_if_t<isTupleOrDerived<Range>(), int> = 0> +void sparseRangeFirst(Range&& range, F&& f) { + f(range[Indices::_0]); +} +//! \brief Hybrid access to first sparse range element (dynamic/sparse candiate) +template<class Range, class F, std::enable_if_t<not isTupleOrDerived<Range>(), int> = 0> +void sparseRangeFirst(Range&& range, F&& f) +{ + f(*range.begin()); +} } // namespace MatrixVector } // namespace Dune -- GitLab