3 #ifndef DUNE_GEOGRID_DATAHANDLE_HH
4 #define DUNE_GEOGRID_DATAHANDLE_HH
6 #include <dune/common/typetraits.hh>
19 template<
int codim,
class Gr
id >
22 typedef typename remove_const< Grid >::type::Traits Traits;
24 typedef typename Traits::template Codim< codim >::Entity Entity;
31 static void apply (
EntityImpl &entityImpl,
const HostEntity &hostEntity )
33 entityImpl.initialize( hostEntity );
40 static void apply (
EntityImpl &entityImpl,
const HostEntity &hostEntity )
42 DUNE_THROW( NotImplemented,
"Host grid has no entities for codimension " << codim <<
"." );
46 static const bool hasHostEntity = Capabilities::hasHostEntity< Grid, codim >::v;
47 typedef typename conditional< hasHostEntity, InitReal< true >, InitFake< false > >::type Init;
53 Init::apply( Grid::getRealImplementation( entity_ ), hostEntity );
70 template<
class Gr
id,
class WrappedHandle >
72 :
public CommDataHandleIF< CommDataHandle< Grid, WrappedHandle >, typename WrappedHandle::DataType >
74 typedef typename remove_const< Grid >::type::Traits Traits;
79 wrappedHandle_( handle )
84 const bool contains = wrappedHandle_.contains( dim, codim );
86 assertHostEntity( dim, codim );
92 return wrappedHandle_.fixedsize( dim, codim );
95 template<
class HostEntity >
96 size_t size (
const HostEntity &hostEntity )
const
99 return wrappedHandle_.size( *proxy );
102 template<
class MessageBuffer,
class HostEntity >
103 void gather ( MessageBuffer &buffer,
const HostEntity &hostEntity )
const
106 wrappedHandle_.gather( buffer, *proxy );
109 template<
class MessageBuffer,
class HostEntity >
110 void scatter ( MessageBuffer &buffer,
const HostEntity &hostEntity,
size_t size )
113 wrappedHandle_.scatter( buffer, *proxy, size );
117 static void assertHostEntity (
int dim,
int codim )
123 static void noEntity (
int codim )
125 DUNE_THROW( NotImplemented,
"Host grid has no entities for codimension " << codim <<
"." );
129 WrappedHandle &wrappedHandle_;
136 #endif // #ifndef DUNE_GEOGRID_DATAHANDLE_HH