Dune Core Modules (2.4.2)

datahandleif.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_DATAHANDLEIF_HH
4 #define DUNE_DATAHANDLEIF_HH
5 
13 
14 namespace Dune
15 {
16 
29  template <class MessageBufferImp>
31  {
32  MessageBufferImp & buff_;
33  public:
35  MessageBufferIF(MessageBufferImp & buff) : buff_(buff) {}
36 
42  template <class T>
43  void write(const T & val)
44  {
45  buff_.write(val);
46  }
47 
53  template <class T>
54  void read(T & val) const
55  {
56  buff_.read(val);
57  }
58  }; // end class MessageBufferIF
59 
60 
71  template <class DataHandleImp, class DataTypeImp>
73  {
74  public:
76  typedef DataTypeImp DataType;
77 
78  protected:
79  // one should not create an explicit instance of this interface object
80  CommDataHandleIF() {}
81 
82  public:
88  bool contains (int dim, int codim) const
89  {
90  CHECK_INTERFACE_IMPLEMENTATION((asImp().contains(dim,codim)));
91  return asImp().contains(dim,codim);
92  }
93 
99  bool fixedsize (int dim, int codim) const
100  {
101  CHECK_INTERFACE_IMPLEMENTATION((asImp().fixedsize(dim,codim)));
102  return asImp().fixedsize(dim,codim);
103  }
104 
109  template<class EntityType>
110  size_t size (const EntityType& e) const
111  {
112  CHECK_INTERFACE_IMPLEMENTATION((asImp().size(e)));
113  return asImp().size(e);
114  }
115 
120  template<class MessageBufferImp, class EntityType>
121  void gather (MessageBufferImp& buff, const EntityType& e) const
122  {
124  CHECK_AND_CALL_INTERFACE_IMPLEMENTATION((asImp().gather(buffIF,e)));
125  }
126 
132  template<class MessageBufferImp, class EntityType>
133  void scatter (MessageBufferImp& buff, const EntityType& e, size_t n)
134  {
136  CHECK_AND_CALL_INTERFACE_IMPLEMENTATION((asImp().scatter(buffIF,e,n)));
137  }
138 
139  private:
141  DataHandleImp& asImp () {return static_cast<DataHandleImp &> (*this);}
143  const DataHandleImp& asImp () const
144  {
145  return static_cast<const DataHandleImp &>(*this);
146  }
147  }; // end class CommDataHandleIF
148 
149 #undef CHECK_INTERFACE_IMPLEMENTATION
150 #undef CHECK_AND_CALL_INTERFACE_IMPLEMENTATION
151 
152 } // end namespace Dune
153 #endif
Provides check for implementation of interface methods when using static polymorphism,...
#define CHECK_AND_CALL_INTERFACE_IMPLEMENTATION(__interface_method_to_call__)
Definition: bartonnackmanifcheck.hh:59
CommDataHandleIF describes the features of a data handle for communication in parallel runs using the...
Definition: datahandleif.hh:73
bool fixedsize(int dim, int codim) const
returns true if size of data per entity of given dim and codim is a constant
Definition: datahandleif.hh:99
void scatter(MessageBufferImp &buff, const EntityType &e, size_t n)
unpack data from message buffer to user.
Definition: datahandleif.hh:133
bool contains(int dim, int codim) const
returns true if data for given valid codim should be communicated
Definition: datahandleif.hh:88
size_t size(const EntityType &e) const
how many objects of type DataType have to be sent for a given entity
Definition: datahandleif.hh:110
void gather(MessageBufferImp &buff, const EntityType &e) const
pack data from user to message buffer
Definition: datahandleif.hh:121
DataTypeImp DataType
data type of data to communicate
Definition: datahandleif.hh:76
Communication message buffer interface. This class describes the interface for reading and writing da...
Definition: datahandleif.hh:31
MessageBufferIF(MessageBufferImp &buff)
stores reference to original buffer buff
Definition: datahandleif.hh:35
void read(T &val) const
just wraps the call of the internal buffer method read which reads the data of type T from the buffer...
Definition: datahandleif.hh:54
void write(const T &val)
just wraps the call of the internal buffer method write which writes the data of type T from the buff...
Definition: datahandleif.hh:43
Dune namespace.
Definition: alignment.hh:10
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 16, 22:29, 2024)