4#ifndef DUNE_TYPETREE_GENERICTRANSFORMATIONDESCRIPTORS_HH
5#define DUNE_TYPETREE_GENERICTRANSFORMATIONDESCRIPTORS_HH
10#include <dune/typetree/nodeinterface.hh>
11#include <dune/typetree/nodetags.hh>
12#include <dune/typetree/powercompositenodetransformationtemplates.hh>
24 template<
typename SourceNode,
typename Transformation,
typename TransformedNode>
25 struct GenericLeafNodeTransformation
28 static const bool recursive =
false;
30 typedef TransformedNode transformed_type;
31 typedef std::shared_ptr<transformed_type> transformed_storage_type;
33 static transformed_type transform(
const SourceNode& s,
const Transformation& t)
35 return transformed_type(s,t);
38 static transformed_type transform(std::shared_ptr<const SourceNode> s,
const Transformation& t)
40 return transformed_type(s,t);
43 static transformed_storage_type transform_storage(std::shared_ptr<const SourceNode> s,
const Transformation& t)
45 return std::make_shared<transformed_type>(s,t);
51 template<
typename SourceNode,
typename Transformation,
template<
typename Child>
class TransformedNodeTemplate>
52 struct TemplatizedGenericPowerNodeTransformation
55 static const bool recursive =
true;
60 typedef typename TransformedNodeTemplate<TC>::type type;
61 typedef std::shared_ptr<type> storage_type;
62 static const std::size_t
degree = StaticDegree<type>::value;
66 static typename result<TC>::type transform(
const SourceNode& s,
const Transformation& t,
const std::array<std::shared_ptr<TC>,
result<TC>::degree>& children)
68 return typename result<TC>::type(s,t,children);
72 static typename result<TC>::type transform(std::shared_ptr<const SourceNode> s,
const Transformation& t,
const std::array<std::shared_ptr<TC>,
result<TC>::degree>& children)
74 return typename result<TC>::type(s,t,children);
78 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)
80 return std::make_shared<typename result<TC>::type>(s,t,children);
86 template<
typename SourceNode,
typename Transformation,
template<
typename,
typename,std::
size_t>
class TransformedNode>
87 struct GenericPowerNodeTransformation
88 :
public TemplatizedGenericPowerNodeTransformation<SourceNode,
90 GenericPowerNodeTransformationTemplate<SourceNode,
92 TransformedNode>::template result
97 template<
typename SourceNode,
typename Transformation,
template<
typename...>
class TransformedNodeTemplate>
98 struct TemplatizedGenericCompositeNodeTransformation
101 static const bool recursive =
true;
103 template<
typename... TC>
106 typedef typename TransformedNodeTemplate<TC...>::type type;
107 typedef std::shared_ptr<type> storage_type;
110 template<
typename... TC>
111 static typename result<TC...>::type transform(
const SourceNode& s,
const Transformation& t, std::shared_ptr<TC>... children)
113 return typename result<TC...>::type(s,t,children...);
116 template<
typename... TC>
117 static typename result<TC...>::type transform(std::shared_ptr<const SourceNode> s,
const Transformation& t, std::shared_ptr<TC>... children)
119 return typename result<TC...>::type(s,t,children...);
122 template<
typename... TC>
123 static typename result<TC...>::storage_type transform_storage(std::shared_ptr<const SourceNode> s,
const Transformation& t, std::shared_ptr<TC>... children)
125 return std::make_shared<
typename result<TC...>::type>(s,t,children...);
131 template<
typename SourceNode,
typename Transformation,
template<
typename,
typename...>
class TransformedNode>
132 struct GenericCompositeNodeTransformation
133 :
public TemplatizedGenericCompositeNodeTransformation<SourceNode,
135 GenericCompositeNodeTransformationTemplate<SourceNode,
137 TransformedNode>::template result
A few common exception classes.
std::size_t degree(const Node &node)
Returns the degree of node as run time information.
Definition: nodeinterface.hh:71
Dune namespace.
Definition: alignedallocator.hh:14