From 8ffed9086a285ffeb8c0f3714783dfb2d8ddf690 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Mon, 15 May 2017 21:05:21 +0200 Subject: [PATCH] Make IsMultiTypeBlockContainer look more duck-like MultiTypeBlockContainer behave like tuples --- dune/matrix-vector/algorithm.hh | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/dune/matrix-vector/algorithm.hh b/dune/matrix-vector/algorithm.hh index b9817e0..30d2cf0 100644 --- a/dune/matrix-vector/algorithm.hh +++ b/dune/matrix-vector/algorithm.hh @@ -6,29 +6,16 @@ #include <type_traits> #include <dune/common/hybridutilities.hh> - -#include <dune/istl/multitypeblockmatrix.hh> -#include <dune/istl/multitypeblockvector.hh> +#include <dune/common/typetraits.hh> namespace Dune { namespace MatrixVector { -template <class C> -struct IsMultiTypeBlockContainer : public std::false_type {}; - -template <class... Args> -struct IsMultiTypeBlockContainer<MultiTypeBlockMatrix<Args...>> - : public std::true_type {}; - -template <class... Args> -struct IsMultiTypeBlockContainer<MultiTypeBlockVector<Args...>> - : public std::true_type {}; - /** * \brief Hybrid for loop over sparse range */ template <class Range, class F, - typename = std::enable_if_t<IsMultiTypeBlockContainer<Range>::value>> + typename = std::enable_if_t<Dune::IsTupleOrDerived<Range>::value>> void rangeForEach(const Range& range, F&& f) { using namespace Dune::Hybrid; forEach(integralRange(size(range)), [&](auto&& i) { f(range[i], i); }); -- GitLab