]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Variadic extraction of RankInfo:: rank and map.
authorLuca Heltai <luca.heltai@sissa.it>
Fri, 27 Oct 2017 11:59:25 +0000 (13:59 +0200)
committerLuca Heltai <luca.heltai@sissa.it>
Sat, 28 Oct 2017 17:57:07 +0000 (19:57 +0200)
include/deal.II/base/patterns.h

index 2066fc155c4729c06532dc57bf60eda1bed3e83c..184d2a352b24b30ffcd735d9c3cc148e5a8f103a 100644 (file)
@@ -1441,6 +1441,34 @@ namespace Patterns
 
     namespace internal
     {
+      // Helper function for list_rank
+      template <class T>
+      constexpr int max_list_rank()
+      {
+        return RankInfo<T>::list_rank;
+      };
+
+      template <class T1, class T2, class... Types>
+      constexpr int max_list_rank()
+      {
+        return std_cxx14::max(RankInfo<T1>::list_rank,
+                              max_list_rank<T2,Types...>());
+      };
+
+      // Helper function for map_rank
+      template <class T>
+      constexpr int max_map_rank()
+      {
+        return RankInfo<T>::map_rank;
+      };
+
+      template <class T1, class T2, class... Types>
+      constexpr int max_map_rank()
+      {
+        return std_cxx14::max(RankInfo<T1>::map_rank,
+                              max_map_rank<T2,Types...>());
+      };
+
       // Rank of vector types
       template <class T>
       struct RankInfo<T,
@@ -1457,13 +1485,9 @@ namespace Patterns
       struct RankInfo<T, typename std::enable_if<is_map_compatible<T>::value>::type>
       {
         static constexpr int list_rank =
-          std_cxx14::max(internal::RankInfo<typename T::key_type>::list_rank,
-                         RankInfo<typename T::mapped_type>::list_rank) +
-          1;
+          max_list_rank<typename T::key_type, typename T::mapped_type>() + 1;
         static constexpr int map_rank =
-          std_cxx14::max(internal::RankInfo<typename T::key_type>::map_rank,
-                         RankInfo<typename T::mapped_type>::map_rank) +
-          1;
+          max_map_rank<typename T::key_type, typename T::mapped_type>() + 1;
       };
 
       // Rank of Tensor types

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.