diff --git a/dune/matrix-vector/algorithm.hh b/dune/matrix-vector/algorithm.hh index 526b542e19fc370db1f0d146a248039f35696fef..5a1c710734b166904e29ae3842954041fcd89134 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