ESyS-Particle  2.3
mpisgvbuf.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2014 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __MPISGVBUF_H
14 #define __MPISGVBUF_H
15 
16 #include "Parallel/mpisgbuf.h"
17 #include <string>
18 
28 {
29 private:
30  char* m_vbuffer;
33  int *m_position;
34  int *m_rpos;
35 
37  int *m_displ; //<! the diplacements of the slices in the buffer
38  int m_ndummy;
39 
40 
41  protected:
42  void grow();
43  void growTo(int);
44 
45  public:
46  CMPIVarSGBufferRoot(MPI_Comm,int isize=16);
47  virtual ~CMPIVarSGBufferRoot();
48 
49  virtual void clear();
50  virtual void gather();
51  virtual void scatter();
52  virtual void append(int,int);
53  virtual void append(double,int);
54  virtual void append(const char*,int);
55  virtual int pop_int(int);
56  virtual double pop_double(int);
57  virtual void pop_doubles(int,double *,int);
58 };
59 
69 {
70  private:
71  char* m_vbuffer;
73  int m_position;
75 
76  protected:
77  void grow();
78  void growTo(int);
79 
80  public:
81  CMPIVarSGBufferLeaf(MPI_Comm,int,int isize=16);
82  virtual ~CMPIVarSGBufferLeaf();
83 
84  virtual void clear();
85  virtual void send();
86  virtual void receive();
87  virtual void append(int);
88  virtual void append(double);
89  virtual void append(const char*);
90  virtual int pop_int();
91  virtual double pop_double();
92  virtual void pop_doubles(double *,int);
93  virtual std::string pop_string();
94 };
95 
96 
97 
98 #endif // __MPISGVBUF_H
int * m_displ
Definition: mpisgvbuf.h:37
void growTo(int)
Definition: mpisgvbuf.cpp:268
virtual int pop_int()
Definition: mpisgvbuf.cpp:364
int * m_recvcount
the buffer for the transfer of the size of the vbuffer
Definition: mpisgvbuf.h:36
virtual double pop_double()
Definition: mpisgvbuf.cpp:379
int m_position
the current end of the content
Definition: mpisgvbuf.h:73
virtual void gather()
Definition: mpisgvbuf.cpp:100
virtual ~CMPIVarSGBufferRoot()
Definition: mpisgvbuf.cpp:44
virtual void scatter()
Definition: mpisgvbuf.cpp:124
int * m_rpos
the number of bytes in the slice (i.e. m_position-m_displ)
Definition: mpisgvbuf.h:34
int * m_position
the current end of the content in each slice
Definition: mpisgvbuf.h:33
virtual void clear()
Definition: mpisgvbuf.cpp:279
virtual void receive()
Definition: mpisgvbuf.cpp:299
class for variable size scatter/gather buffer, leaf component
Definition: mpisgvbuf.h:68
virtual void pop_doubles(double *, int)
Definition: mpisgvbuf.cpp:387
int m_ndummy
Definition: mpisgvbuf.h:38
char * m_dummy_vbuffer
dummy buffer sent by root to itself
Definition: mpisgvbuf.h:31
virtual void append(int, int)
Definition: mpisgvbuf.cpp:147
void grow()
Definition: mpisgvbuf.cpp:61
int m_vbuffersize
the size of the buffer per slice
Definition: mpisgvbuf.h:32
virtual std::string pop_string()
Definition: mpisgvbuf.cpp:402
CMPIVarSGBufferRoot(MPI_Comm, int isize=16)
Definition: mpisgvbuf.cpp:25
virtual void send()
Definition: mpisgvbuf.cpp:287
void growTo(int)
Definition: mpisgvbuf.cpp:75
Abstract base class for scatter/gather buffer, leaf component.
Definition: mpisgbuf.h:63
virtual ~CMPIVarSGBufferLeaf()
Definition: mpisgvbuf.cpp:245
char * m_vbuffer
Definition: mpisgvbuf.h:30
int m_data_size
Definition: mpisgvbuf.h:74
int m_vbuffersize
the size of the buffer
Definition: mpisgvbuf.h:72
virtual int pop_int(int)
Definition: mpisgvbuf.cpp:201
virtual double pop_double(int)
Definition: mpisgvbuf.cpp:216
virtual void clear()
Definition: mpisgvbuf.cpp:91
void grow()
Definition: mpisgvbuf.cpp:253
Abstract base class for scatter/gather buffer, root component.
Definition: mpisgbuf.h:28
virtual void append(int)
Definition: mpisgvbuf.cpp:319
class for variable size scatter/gather buffer, root component
Definition: mpisgvbuf.h:27
virtual void pop_doubles(int, double *, int)
Definition: mpisgvbuf.cpp:224
CMPIVarSGBufferLeaf(MPI_Comm, int, int isize=16)
Definition: mpisgvbuf.cpp:238
char * m_vbuffer
Definition: mpisgvbuf.h:71