Skip to content
Snippets Groups Projects
Commit 8ffed908 authored by Elias Pipping's avatar Elias Pipping
Browse files

Make IsMultiTypeBlockContainer look more duck-like

MultiTypeBlockContainer behave like tuples
parent bc6adb7c
Branches
No related tags found
No related merge requests found
...@@ -6,29 +6,16 @@ ...@@ -6,29 +6,16 @@
#include <type_traits> #include <type_traits>
#include <dune/common/hybridutilities.hh> #include <dune/common/hybridutilities.hh>
#include <dune/common/typetraits.hh>
#include <dune/istl/multitypeblockmatrix.hh>
#include <dune/istl/multitypeblockvector.hh>
namespace Dune { namespace Dune {
namespace MatrixVector { 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 * \brief Hybrid for loop over sparse range
*/ */
template <class Range, class F, 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) { void rangeForEach(const Range& range, F&& f) {
using namespace Dune::Hybrid; using namespace Dune::Hybrid;
forEach(integralRange(size(range)), [&](auto&& i) { f(range[i], i); }); forEach(integralRange(size(range)), [&](auto&& i) { f(range[i], i); });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment