1 #ifndef DUNE_GEOMETRY_GENERICGEOMETRY_TRACEPROVIDER_HH
2 #define DUNE_GEOMETRY_GENERICGEOMETRY_TRACEPROVIDER_HH
4 #include <dune/common/forloop.hh>
5 #include <dune/common/typetraits.hh>
13 namespace GenericGeometry
19 template<
class Topology,
class GeometryTraits >
20 class NonHybridMapping;
22 template<
unsigned int dim,
class GeometryTraits >
25 template<
class Topology,
class GeometryTraits >
33 template<
class Topology,
class GeometryTraits,
unsigned int codim,
bool forceHybr
id >
50 static const unsigned int numSubTopologies = Mapping::ReferenceElement::template Codim< codimension >::size;
60 typedef typename Factory::Trace
Trace;
64 return (*instance().construct_[ i ])( mapping, traceStorage );
68 typedef Trace *(*Construct) (
const Mapping &mapping,
char *traceStorage );
72 ForLoop< Builder, 0, numSubTopologies-1 >::apply( construct_ );
75 static const This &instance ()
77 static This theInstance;
81 Construct construct_[ numSubTopologies ];
89 template<
class Topology,
class GeometryTraits,
unsigned int codim,
bool forceHybr
id >
93 template<
unsigned int i >
107 return new( traceStorage ) TraceImpl( mapping.template trace< codim, i >() );
116 template<
class Topology,
class GeometryTraits,
unsigned int codim,
bool forceHybr
id >
128 return new( traceStorage )
Trace( mapping.template trace< codim, i >() );
137 template<
class Topology,
class GeometryTraits,
unsigned int codim,
bool forceHybr
id >
141 static void apply ( Construct (&
construct)[ numSubTopologies ] )
143 construct[ i ] = &(Factory::template construct< i >);
151 #endif // #ifndef DUNE_GEOMETRY_GENERICGEOMETRY_TRACEPROVIDER_HH