3 #ifndef DUNE_GEOGRID_DATAHANDLE_HH
4 #define DUNE_GEOGRID_DATAHANDLE_HH
6 #include <dune/common/typetraits.hh>
22 template<
class Gr
id,
class WrappedHandle >
24 :
public CommDataHandleIF< CommDataHandle< Grid, WrappedHandle >, typename WrappedHandle::DataType >
26 typedef typename std::remove_const< Grid >::type::Traits Traits;
31 wrappedHandle_( handle )
36 const bool contains = wrappedHandle_.contains( dim, codim );
38 assertHostEntity( dim, codim );
44 return wrappedHandle_.fixedSize( dim, codim );
47 template<
class HostEntity >
48 size_t size (
const HostEntity &hostEntity )
const
50 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::Entity
Entity;
51 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::EntityImpl EntityImpl;
52 Entity entity( EntityImpl( grid_, hostEntity ) );
53 return wrappedHandle_.size( entity );
56 template<
class MessageBuffer,
class HostEntity >
57 void gather ( MessageBuffer &buffer,
const HostEntity &hostEntity )
const
59 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::Entity
Entity;
60 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::EntityImpl EntityImpl;
61 Entity entity( EntityImpl( grid_, hostEntity ) );
62 wrappedHandle_.gather( buffer, entity );
65 template<
class MessageBuffer,
class HostEntity >
66 void scatter ( MessageBuffer &buffer,
const HostEntity &hostEntity,
size_t size )
68 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::Entity
Entity;
69 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::EntityImpl EntityImpl;
70 Entity entity( EntityImpl( grid_, hostEntity ) );
71 wrappedHandle_.scatter( buffer, entity,
size );
75 static void assertHostEntity (
int dim,
int codim )
78 DUNE_THROW( NotImplemented,
"Host grid has no entities for codimension " << codim <<
"." );
82 WrappedHandle &wrappedHandle_;
89 #endif // #ifndef DUNE_GEOGRID_DATAHANDLE_HH