3 #ifndef DUNE_GEOMETRY_GENERICGEOMETRY_HYBRIDMAPPING_HH
4 #define DUNE_GEOMETRY_GENERICGEOMETRY_HYBRIDMAPPING_HH
8 #include <dune/common/typetraits.hh>
17 namespace GenericGeometry
23 template<
unsigned int dim,
class GeometryTraits >
26 template<
class Topology,
class GeometryTraits >
35 template<
unsigned int dim,
class GeometryTraits,
unsigned int codim = dim >
36 class HybridMappingBase;
38 template<
unsigned int dim,
class GeometryTraits,
unsigned int codim >
39 class HybridMappingBase
40 :
public virtual HybridMappingBase< dim, GeometryTraits, static_cast<unsigned int>(codim-1) >
45 virtual ~HybridMappingBase() {}
48 using HybridMappingBase< dim, GeometryTraits, static_cast<unsigned int>(codim-1) >::trace;
51 trace ( integral_constant< int, codim >,
unsigned int i,
char *mappingStorage )
const = 0;
54 template<
unsigned int dim,
class GeometryTraits >
55 class HybridMappingBase< dim, GeometryTraits, 0 >
57 typedef HybridMapping< dim, GeometryTraits > Mapping;
60 virtual ~HybridMappingBase() {}
63 virtual HybridMapping< dim, GeometryTraits > *
64 trace ( integral_constant< int, 0 >,
unsigned int i,
char *mappingStorage )
const = 0;
67 template<
unsigned int dim,
class GeometryTraits >
68 class HybridMappingBase< dim, GeometryTraits, static_cast<unsigned int>(-1) >
70 typedef HybridMapping< dim, GeometryTraits > Mapping;
73 virtual ~HybridMappingBase() {}
76 virtual HybridMapping< dim, GeometryTraits > *
77 trace ( integral_constant< int, 0 >,
unsigned int i,
char *mappingStorage )
const = 0;
93 template<
unsigned int dim,
class GeometryTraits >
96 :
public virtual HybridMappingBase< dim, GeometryTraits >
99 typedef HybridMapping< dim, GeometryTraits > This;
115 template<
int codim >
121 typedef typename GeometryTraits::Caching
Caching;
122 typedef typename GeometryTraits::UserData
UserData;
128 virtual bool affine ()
const = 0;
213 using HybridMappingBase< dim, GeometryTraits >::trace;
216 virtual This *
clone ()
const = 0;
217 virtual This *
clone (
char *mappingStorage )
const = 0;
219 template<
int codim >
220 typename Codim< codim >::Trace *
trace (
unsigned int i,
char *mappingStorage )
const
222 integral_constant< int, codim > codimVariable;
223 return trace( codimVariable, i, mappingStorage );
239 template<
class Topology,
class GeometryTraits,
unsigned int codim = Topology::dimension >
240 class VirtualMappingBase;
242 template<
class Topology,
class GeometryTraits,
unsigned int codim >
243 class VirtualMappingBase
244 :
public VirtualMappingBase< Topology, GeometryTraits, codim-1 >,
245 public virtual HybridMappingBase< Topology::dimension, GeometryTraits, codim >
251 using VirtualMappingBase< Topology, GeometryTraits, codim-1 >::trace;
253 virtual HybridMapping< Topology::dimension - codim, GeometryTraits > *
254 trace ( integral_constant< int, codim >,
unsigned int i,
char *mappingStorage )
const
256 return static_cast< const VirtualMapping &
>( *this ).template trace< codim >( i, mappingStorage );
260 template<
class Topology,
class GeometryTraits >
261 class VirtualMappingBase< Topology, GeometryTraits, 0 >
262 :
public virtual HybridMappingBase< Topology::dimension, GeometryTraits, 0 >
264 typedef GenericGeometry::VirtualMapping< Topology, GeometryTraits >
268 virtual HybridMapping< Topology::dimension, GeometryTraits > *
269 trace ( integral_constant< int, 0 >,
unsigned int i,
char *mappingStorage )
const
271 return static_cast< const VirtualMapping &
>( *this ).template trace< 0 >( i, mappingStorage );
278 template<
class Topology,
class GeometryTraits >
280 :
public HybridMapping< Topology::dimension, GeometryTraits >,
282 public VirtualMappingBase< Topology, GeometryTraits >
285 typedef HybridMapping< Topology::dimension, GeometryTraits > Base;
286 typedef VirtualMapping< Topology, GeometryTraits > This;
290 typedef CachedMapping< Topology, GeometryTraits > Mapping;
305 template<
unsigned int codim >
311 typedef typename GeometryTraits::Caching
Caching;
313 template<
class CoordVector >
315 : mapping_( coordVector )
337 virtual Base*
clone (
char *mappingStorage )
const {
return new( mappingStorage )
This( *
this ); }
339 template<
int codim >
346 using VirtualMappingBase< Topology, GeometryTraits >::trace;
364 template<
class Topology,
class GeometryTraits >
387 template<
unsigned int codim >
393 typedef typename GeometryTraits::Caching
Caching;
394 typedef typename GeometryTraits::UserData
UserData;
396 template<
class CoordVector >
398 : mapping_( coordVector )
487 This *
clone (
char *mappingStorage )
const {
return new( mappingStorage )
This( *
this ); }
489 template<
int codim >
507 #endif // #ifndef DUNE_GEOMETRY_GENERICGEOMETRY_HYBRIDMAPPING_HH