dune-typetree  2.3.1
compositenodemacros.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 
4 #ifndef DUNE_TYPETREE_COMPOSITENODE_MACROS_HH
5 #define DUNE_TYPETREE_COMPOSITENODE_MACROS_HH
6 
7 #if HAVE_VARIADIC_TEMPLATES
8 
10 
11 #define DUNE_TYPETREE_COMPOSITENODE_TEMPLATE_CHILDREN typename... Children
12 
13 #define DUNE_TYPETREE_COMPOSITENODE_TEMPLATE_CHILDREN_FOR_SPECIALIZATION typename... Children
14 
15 #define DUNE_TYPETREE_COMPOSITENODE_CHILDTYPES Children...
16 
17 #define DUNE_TYPETREE_COMPOSITENODE_BASETYPE Dune::TypeTree::VariadicCompositeNode<Children...>
18 
19 #define DUNE_TYPETREE_COMPOSITENODE_CHILDVARIABLES children...
20 
21 #define DUNE_TYPETREE_COMPOSITENODE_CHILDVARIABLES_THROUGH_FUNCTION(f) f(children)...
22 
23 #define DUNE_TYPETREE_COMPOSITENODE_CONSTRUCTOR_SIGNATURE Children&... children
24 
25 #define DUNE_TYPETREE_COMPOSITENODE_STORAGE_CONSTRUCTOR_SIGNATURE Dune::shared_ptr<Children>... children
26 
27 #define DUNE_TYPETREE_COMPOSITENODE_CHILDVARIABLES_MEMBER(member) children.member...
28 
29 #define DUNE_TYPETREE_COMPOSITENODE_CHILDTYPES_NESTED_TYPE(nested_type) typename Children::nested_type...
30 
31 #define DUNE_TYPETREE_COMPOSITENODE_CHILDTYPES_NESTED_STATIC_MEMBER(member) Children::member...
32 
33 #define DUNE_TYPETREE_COMPOSITENODE_CHILDTYPES_THROUGH_META_FUNCTION(meta_function) typename meta_function::template apply<Children>::type...
34 
35 template<typename... T> struct extract_first_child;
36 
37 template<typename T0, typename... T>
38 struct extract_first_child<T0,T...>
39 {
40  typedef T0 type;
41 };
42 
43 #define DUNE_TYPETREE_COMPOSITENODE_FIRST_CHILD extract_first_child<Children...>::type
44 
45 #else
46 
48 
49 #define DUNE_TYPETREE_COMPOSITENODE_TEMPLATE_CHILDREN \
50  typename C0,\
51  typename C1 = Dune::TypeTree::EmptyNode, \
52  typename C2 = Dune::TypeTree::EmptyNode, \
53  typename C3 = Dune::TypeTree::EmptyNode, \
54  typename C4 = Dune::TypeTree::EmptyNode, \
55  typename C5 = Dune::TypeTree::EmptyNode, \
56  typename C6 = Dune::TypeTree::EmptyNode, \
57  typename C7 = Dune::TypeTree::EmptyNode, \
58  typename C8 = Dune::TypeTree::EmptyNode, \
59  typename C9 = Dune::TypeTree::EmptyNode
60 
61 #define DUNE_TYPETREE_COMPOSITENODE_TEMPLATE_CHILDREN_FOR_SPECIALIZATION \
62  typename C0,\
63  typename C1,\
64  typename C2,\
65  typename C3,\
66  typename C4,\
67  typename C5,\
68  typename C6,\
69  typename C7,\
70  typename C8,\
71  typename C9
72 
73 #define DUNE_TYPETREE_COMPOSITENODE_CHILDTYPES C0,C1,C2,C3,C4,C5,C6,C7,C8,C9
74 
75 #define DUNE_TYPETREE_COMPOSITENODE_BASETYPE Dune::TypeTree::CompositeNode<C0,C1,C2,C3,C4,C5,C6,C7,C8,C9>
76 
77 #define DUNE_TYPETREE_COMPOSITENODE_CHILDVARIABLES c0,c1,c2,c3,c4,c5,c6,c7,c8,c9
78 
79 #define DUNE_TYPETREE_COMPOSITENODE_CHILDVARIABLES_THROUGH_FUNCTION(f) f(c0),f(c1),f(c2),f(c3),f(c4),f(c5),f(c6),f(c7),f(c8),f(c9)
80 
81 #define DUNE_TYPETREE_COMPOSITENODE_CONSTRUCTOR_SIGNATURE \
82  C0& c0, \
83  typename Dune::TypeTree::OptionalChild<C1>::type c1 = Dune::TypeTree::OptionalChild<C1>::default_value(), \
84  typename Dune::TypeTree::OptionalChild<C2>::type c2 = Dune::TypeTree::OptionalChild<C2>::default_value(), \
85  typename Dune::TypeTree::OptionalChild<C3>::type c3 = Dune::TypeTree::OptionalChild<C3>::default_value(), \
86  typename Dune::TypeTree::OptionalChild<C4>::type c4 = Dune::TypeTree::OptionalChild<C4>::default_value(), \
87  typename Dune::TypeTree::OptionalChild<C5>::type c5 = Dune::TypeTree::OptionalChild<C5>::default_value(), \
88  typename Dune::TypeTree::OptionalChild<C6>::type c6 = Dune::TypeTree::OptionalChild<C6>::default_value(), \
89  typename Dune::TypeTree::OptionalChild<C7>::type c7 = Dune::TypeTree::OptionalChild<C7>::default_value(), \
90  typename Dune::TypeTree::OptionalChild<C8>::type c8 = Dune::TypeTree::OptionalChild<C8>::default_value(), \
91  typename Dune::TypeTree::OptionalChild<C9>::type c9 = Dune::TypeTree::OptionalChild<C9>::default_value()
92 
93 #define DUNE_TYPETREE_COMPOSITENODE_STORAGE_CONSTRUCTOR_SIGNATURE \
94  Dune::shared_ptr<C0> c0, \
95  Dune::shared_ptr<C1> c1, \
96  Dune::shared_ptr<C2> c2, \
97  Dune::shared_ptr<C3> c3, \
98  Dune::shared_ptr<C4> c4, \
99  Dune::shared_ptr<C5> c5, \
100  Dune::shared_ptr<C6> c6, \
101  Dune::shared_ptr<C7> c7, \
102  Dune::shared_ptr<C8> c8, \
103  Dune::shared_ptr<C9> c9
104 
105 #define DUNE_TYPETREE_COMPOSITENODE_CHILDVARIABLES_MEMBER(member) \
106  c0.member, \
107  c1.member, \
108  c2.member, \
109  c3.member, \
110  c4.member, \
111  c5.member, \
112  c6.member, \
113  c7.member, \
114  c8.member, \
115  c9.member
116 
117 #define DUNE_TYPETREE_COMPOSITENODE_CHILDTYPES_NESTED_TYPE(nested_type) \
118  typename C0::nested_type, \
119  typename C1::nested_type, \
120  typename C2::nested_type, \
121  typename C3::nested_type, \
122  typename C4::nested_type, \
123  typename C5::nested_type, \
124  typename C6::nested_type, \
125  typename C7::nested_type, \
126  typename C8::nested_type, \
127  typename C9::nested_type
128 
129 #define DUNE_TYPETREE_COMPOSITENODE_CHILDTYPES_NESTED_STATIC_MEMBER(member) \
130  C0::member, \
131  C1::member, \
132  C2::member, \
133  C3::member, \
134  C4::member, \
135  C5::member, \
136  C6::member, \
137  C7::member, \
138  C8::member, \
139  C9::member
140 
141 #define DUNE_TYPETREE_COMPOSITENODE_CHILDTYPES_THROUGH_META_FUNCTION(meta_function) \
142  typename meta_function::template apply<C0>::type, \
143  typename meta_function::template apply<C1>::type, \
144  typename meta_function::template apply<C2>::type, \
145  typename meta_function::template apply<C3>::type, \
146  typename meta_function::template apply<C4>::type, \
147  typename meta_function::template apply<C5>::type, \
148  typename meta_function::template apply<C6>::type, \
149  typename meta_function::template apply<C7>::type, \
150  typename meta_function::template apply<C8>::type, \
151  typename meta_function::template apply<C9>::type
152 
153 #define DUNE_TYPETREE_COMPOSITENODE_FIRST_CHILD C0
154 
155 #endif
156 
157 #endif // DUNE_TYPETREE_COMPOSITENODE_MACROS_HH