#pragma once #include #include #include #include namespace AMDiS { namespace Impl { // Recursive template code derived from Matthieu M. template ::value - 1> struct HashTupleImpl { static void apply(size_t& seed, Tuple const& tuple) { HashTupleImpl::apply(seed, tuple); Dune::hash_combine(seed, std::get(tuple)); } }; template struct HashTupleImpl { static void apply(std::size_t& seed, Tuple const& tuple) { Dune::hash_combine(seed, std::get<0>(tuple)); } }; } // end namespace Impl template class Map> struct MapTuple; template class Map> using MapTuple_t = typename MapTuple::type; template class Map> struct MapTuple, Map> { using type = std::tuple...>; }; template class Map> struct IndexMapTuple; template class Map> using IndexMapTuple_t = typename IndexMapTuple::type; template class Map> struct IndexMapTuple, Map> { using type = std::tuple...>; }; } // end namespace AMDiS