"Fossies" - the Fresh Open Source Software Archive 
Member "dune-typetree-2.8.0/dune/typetree/simpletransformationdescriptors.hh" (31 Aug 2021, 4118 Bytes) of package /linux/misc/dune/dune-typetree-2.8.0.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "simpletransformationdescriptors.hh" see the
Fossies "Dox" file reference documentation.
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_SIMPLETRANSFORMATIONDESCRIPTORS_HH
5 #define DUNE_TYPETREE_SIMPLETRANSFORMATIONDESCRIPTORS_HH
6
7 #include <array>
8 #include <memory>
9
10 #include <dune/typetree/nodeinterface.hh>
11 #include <dune/typetree/nodetags.hh>
12 #include <dune/common/exceptions.hh>
13
14
15 namespace Dune {
16 namespace TypeTree {
17
18 /** \addtogroup Transformation
19 * \ingroup TypeTree
20 * \{
21 */
22
23 template<typename SourceNode, typename Transformation, typename TransformedNode>
24 struct SimpleLeafNodeTransformation
25 {
26
27 static const bool recursive = false;
28
29 typedef TransformedNode transformed_type;
30 typedef std::shared_ptr<transformed_type> transformed_storage_type;
31
32 static transformed_type transform(const SourceNode& s, const Transformation& t)
33 {
34 return transformed_type();
35 }
36
37 static transformed_storage_type transform_storage(std::shared_ptr<const SourceNode> s, const Transformation& t)
38 {
39 return std::make_shared<transformed_type>();
40 }
41
42 };
43
44
45 template<typename SourceNode, typename Transformation, template<typename Child, std::size_t> class TransformedNode>
46 struct SimplePowerNodeTransformation
47 {
48
49 static const bool recursive = true;
50
51 template<typename TC>
52 struct result
53 {
54 typedef TransformedNode<TC, StaticDegree<SourceNode>::value> type;
55 typedef std::shared_ptr<type> storage_type;
56 static const std::size_t degree = StaticDegree<type>::value;
57 };
58
59 template<typename TC>
60 static typename result<TC>::type transform(const SourceNode& s, const Transformation& t, const std::array<std::shared_ptr<TC>,result<TC>::degree>& children)
61 {
62 return typename result<TC>::type(children);
63 }
64
65 template<typename TC>
66 static typename result<TC>::storage_type transform_storage(std::shared_ptr<const SourceNode> s, const Transformation& t, const std::array<std::shared_ptr<TC>,result<TC>::degree>& children)
67 {
68 return std::make_shared<typename result<TC>::type>(children);
69 }
70
71 };
72
73
74 template<typename SourceNode, typename Transformation, template<typename Child> class TransformedNode>
75 struct SimpleDynamicPowerNodeTransformation
76 {
77
78 static const bool recursive = true;
79
80 template<typename TC>
81 struct result
82 {
83 typedef TransformedNode<TC> type;
84 typedef std::shared_ptr<type> storage_type;
85 };
86
87 template<typename TC>
88 static typename result<TC>::type transform(const SourceNode& s, const Transformation& t, const std::vector<std::shared_ptr<TC>>& children)
89 {
90 return typename result<TC>::type(children);
91 }
92
93 template<typename TC>
94 static typename result<TC>::storage_type transform_storage(std::shared_ptr<const SourceNode> s, const Transformation& t, const std::vector<std::shared_ptr<TC>>& children)
95 {
96 return std::make_shared<typename result<TC>::type>(children);
97 }
98
99 };
100
101
102 template<typename SourceNode, typename Transformation, template<typename...> class TransformedNode>
103 struct SimpleCompositeNodeTransformation
104 {
105
106 static const bool recursive = true;
107
108 template<typename... TC>
109 struct result
110 {
111 typedef TransformedNode<TC...> type;
112 typedef std::shared_ptr<type> storage_type;
113 };
114
115 template<typename... TC>
116 static typename result<TC...>::type transform(const SourceNode& s, const Transformation& t, std::shared_ptr<TC>... children)
117 {
118 return typename result<TC...>::type(children...);
119 }
120
121 template<typename... TC>
122 static typename result<TC...>::storage_type transform_storage(std::shared_ptr<const SourceNode> s, const Transformation& t, std::shared_ptr<TC>... children)
123 {
124 return std::make_shared<typename result<TC...>::type>(children...);
125 }
126
127 };
128
129 //! \} group Transformation
130
131 } // namespace TypeTree
132 } //namespace Dune
133
134 #endif // DUNE_TYPETREE_SIMPLETRANSFORMATIONDESCRIPTORS_HH