AMDiS  0.1
The Adaptive Multi-Dimensional Simulation Toolbox
Traits.hpp
1 #pragma once
2 
3 #include <type_traits>
4 
5 #include <dune/typetree/treepath.hh>
6 #include <amdis/typetree/TreePath.hpp>
7 
8 namespace AMDiS
9 {
10  namespace Traits
11  {
12  template <class Tree, class TreePath, class NodeTag = typename Tree::NodeTag>
14 
15  // empty treepath
16  template <class Tree, class NodeTag>
17  struct IsValidTreePath<Tree, Dune::TypeTree::HybridTreePath<>, NodeTag>
18  : std::true_type {};
19 
20  // leaf nodes
21  template <class Tree, class I0, class... II>
22  struct IsValidTreePath<Tree, Dune::TypeTree::HybridTreePath<I0,II...>, Dune::TypeTree::LeafNodeTag>
23  : std::false_type {};
24 
25  // power nodes
26  template <class Tree, class I0, class... II>
27  struct IsValidTreePath<Tree, Dune::TypeTree::HybridTreePath<I0,II...>, Dune::TypeTree::PowerNodeTag>
28  : IsValidTreePath<typename Tree::ChildType, Dune::TypeTree::HybridTreePath<II...>> {};
29 
30  // composite node with integer index
31  template <class Tree, class I0, class... II>
32  struct IsValidTreePath<Tree, Dune::TypeTree::HybridTreePath<I0,II...>, Dune::TypeTree::CompositeNodeTag>
33  : std::false_type {};
34 
35  // composite node with integral-constant index
36  template <class Tree, class Int, Int i, class... II>
37  struct IsValidTreePath<Tree, Dune::TypeTree::HybridTreePath<std::integral_constant<Int,i>,II...>, Dune::TypeTree::CompositeNodeTag>
38  : std::conditional_t<(i >= 0 && i < Tree::degree()),
39  IsValidTreePath<typename Tree::template Child<(i >= 0 && i < Tree::degree()) ? i : 0>::Type, Dune::TypeTree::HybridTreePath<II...>>,
40  std::false_type> {};
41 
42  } // end namespace Traits
43 
44  namespace Concepts
45  {
47  template <class Tree, class Path>
48  static constexpr bool ValidTreePath = Traits::IsValidTreePath<Tree,TYPEOF(makeTreePath(std::declval<Path>()))>::value;
49  }
50 
51 } // end namespace AMDiS
Definition: AdaptiveGrid.hpp:373
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
Definition: Traits.hpp:13