ESyS-Particle
4.0.1
|
00001 00002 // // 00003 // Copyright (c) 2003-2011 by The University of Queensland // 00004 // Earth Systems Science Computational Centre (ESSCC) // 00005 // http://www.uq.edu.au/esscc // 00006 // // 00007 // Primary Business: Brisbane, Queensland, Australia // 00008 // Licensed under the Open Software License version 3.0 // 00009 // http://www.opensource.org/licenses/osl-3.0.php // 00010 // // 00012 00013 #ifndef __MPISGVBUF_H 00014 #define __MPISGVBUF_H 00015 00016 #include "Parallel/mpisgbuf.h" 00017 #include <string> 00018 00027 class CMPIVarSGBufferRoot: public AMPISGBufferRoot 00028 { 00029 private: 00030 char* m_vbuffer; 00031 char* m_dummy_vbuffer; 00032 int m_vbuffersize; 00033 int *m_position; 00034 int *m_rpos; 00035 00036 int *m_recvcount; 00037 int *m_displ; //<! the diplacements of the slices in the buffer 00038 int m_ndummy; 00039 00040 00041 protected: 00042 void grow(); 00043 void growTo(int); 00044 00045 public: 00046 CMPIVarSGBufferRoot(MPI_Comm,int isize=16); 00047 virtual ~CMPIVarSGBufferRoot(); 00048 00049 virtual void clear(); 00050 virtual void gather(); 00051 virtual void scatter(); 00052 virtual void append(int,int); 00053 virtual void append(double,int); 00054 virtual void append(const char*,int); 00055 virtual int pop_int(int); 00056 virtual double pop_double(int); 00057 virtual void pop_doubles(int,double *,int); 00058 }; 00059 00068 class CMPIVarSGBufferLeaf: public AMPISGBufferLeaf 00069 { 00070 private: 00071 char* m_vbuffer; 00072 int m_vbuffersize; 00073 int m_position; 00074 int m_data_size; 00075 00076 protected: 00077 void grow(); 00078 void growTo(int); 00079 00080 public: 00081 CMPIVarSGBufferLeaf(MPI_Comm,int,int isize=16); 00082 virtual ~CMPIVarSGBufferLeaf(); 00083 00084 virtual void clear(); 00085 virtual void send(); 00086 virtual void receive(); 00087 virtual void append(int); 00088 virtual void append(double); 00089 virtual void append(const char*); 00090 virtual int pop_int(); 00091 virtual double pop_double(); 00092 virtual void pop_doubles(double *,int); 00093 virtual std::string pop_string(); 00094 }; 00095 00096 00097 00098 #endif // __MPISGVBUF_H