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