OMKPvmIncomingMessage.cxx

Go to the documentation of this file.
00001 #include "OMKPvmIncomingMessage.h"
00002 
00003 #include <cassert>
00004 #include <pvm3.h>
00005 
00006 #include "OMKController.h"
00007 #include "OMKPvmException.h"
00008 #include "OMKBasicTypes.h"
00009 
00010 using namespace std ;
00011 using namespace OMK ;
00012 
00013 int PvmIncomingMessage::pvmActiveBuffer = 0 ;
00014 
00015 PvmIncomingMessage::PvmIncomingMessage() :
00016    IncomingSynchronisationMessage (),
00017    PvmMessage (0)
00018 {
00019 
00020 }
00021 
00022 
00023   
00024 PvmIncomingMessage::PvmIncomingMessage(int bufId) :
00025    IncomingSynchronisationMessage (),
00026    PvmMessage (bufId)
00027 {
00028   pvmActiveBuffer = bufId ;
00029 }
00030 
00031 
00032 
00033 void PvmIncomingMessage::initialise ( int bufId )
00034 {
00035   _currentBuffer = bufId ;
00036   pvmActiveBuffer = bufId ;
00037   if (_myis != 0 )
00038     {
00039       delete _myis ;
00040       _myis = 0 ;
00041     }
00042   if (_currentBuffer != 0) _messageTimestamp.unpack(*this) ;
00043 }
00044 
00045 void PvmIncomingMessage::deleteCurrentBuffer()
00046 {
00047   pvm_freebuf(_currentBuffer);
00048 }
00049 
00050 
00051 //--------------------------------------------------------------------
00052 PvmIncomingMessage::~PvmIncomingMessage ()
00053 {
00054 
00055 }
00056 
00057 const Date & PvmIncomingMessage::getMessageDate()
00058 {
00059    return _messageTimestamp ;
00060 }
00061 
00062 bool PvmIncomingMessage::hasMessage () const 
00063 {
00064    return _currentBuffer != 0 ;
00065 }
00066 
00067 
00068 //--------------------------------------------------------------------
00069 void PvmIncomingMessage::checkForGetErrors( int info)
00070 {
00071   if (info < 0 )
00072     {
00073       cerr<<"PvmIncomingMessage::checkForGetErrors ERROR ";
00074       assert ( false ) ;
00075       switch ( info ) 
00076         {
00077         case PvmNoData:
00078           cerr<<"Reading beyond the end of the receive buffer. Most likely cause is trying to get more items than were originally packed into the buffer. This can also happen if a new reception without buffer saving happened in the course of geting all the data of a previous message";
00079           break;
00080         case PvmNoBuf:
00081           cerr<<"There is no active receive buffer to get.";
00082           break;
00083         case PvmBadMsg:
00084            cerr<<"The received message can to be decoded. Most likely because the hosts are heterogeneous and the users specified an incompatible encoding.";
00085           break;
00086         default:
00087           cerr<<"unexpected error: ";
00088         }
00089       cerr<<endl;         
00090         OMASSERT( false ) ;
00091     }
00092 }
00093 
00094 
00095 
00096 void PvmIncomingMessage::get (bool & val)
00097 {
00098    assert ( pvmActiveBuffer == _currentBuffer ) ;
00099    char realVal ;
00100    int info = pvm_upkbyte ( &realVal, 1, 1 ) ;
00101    val = realVal ;
00102 #ifdef _DEBUGPVMMESS
00103   cerr<<"PvmIncomingMessage::get (char & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00104 #endif
00105    checkForGetErrors ( info ) ;
00106 }
00107 
00108 
00109 void PvmIncomingMessage::get (char & val)
00110 {
00111    assert ( pvmActiveBuffer == _currentBuffer ) ;
00112    int info = pvm_upkbyte ( &val, 1, 1 ) ;
00113 #ifdef _DEBUGPVMMESS
00114   cerr<<"PvmIncomingMessage::get (char & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00115 #endif
00116    checkForGetErrors ( info ) ;
00117 }
00118 
00119 
00120 void PvmIncomingMessage::get (long & val)
00121 {
00122    assert ( pvmActiveBuffer == _currentBuffer ) ;
00123    int info = pvm_upklong ( &val, 1, 1 ) ;
00124 #ifdef _DEBUGPVMMESS
00125   cerr<<"PvmIncomingMessage::get (long & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00126 #endif
00127    checkForGetErrors ( info ) ;
00128 }
00129 
00130 
00131 
00132 
00133 void PvmIncomingMessage::get (unsigned long & val)
00134 {
00135   assert ( pvmActiveBuffer == _currentBuffer );
00136   int info = pvm_upkulong ( &val, 1, 1 ) ;
00137 #ifdef _DEBUGPVMMESS
00138   cerr<<"PvmIncomingMessage::get (unsigned long & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00139 #endif
00140   checkForGetErrors ( info ) ;
00141 }
00142 
00143 
00144 
00145 
00146 
00147 void PvmIncomingMessage::get (int & val)
00148 {
00149   assert ( pvmActiveBuffer == _currentBuffer );
00150   int info = pvm_upkint ( &val, 1, 1 ) ;
00151 #ifdef _DEBUGPVMMESS
00152   cerr<<"PvmIncomingMessage::get (int & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00153 #endif
00154   checkForGetErrors ( info ) ;
00155 }
00156 
00157 
00158 
00159 void PvmIncomingMessage::get (unsigned int & val)
00160 {
00161   assert ( pvmActiveBuffer == _currentBuffer );
00162   int info = pvm_upkuint ( &val, 1, 1 ) ;
00163 #ifdef _DEBUGPVMMESS
00164   cerr<<"PvmIncomingMessage::get (unsigned int & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00165 #endif
00166   checkForGetErrors ( info ) ;
00167 }
00168 
00169 
00170 
00171 
00172 void PvmIncomingMessage::get (float & val)
00173 {
00174   assert ( pvmActiveBuffer == _currentBuffer );
00175   int info = pvm_upkfloat ( &val, 1, 1 ) ;
00176 #ifdef _DEBUGPVMMESS
00177   cerr<<"PvmIncomingMessage::get (float & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00178 #endif
00179   checkForGetErrors ( info ) ;
00180 }
00181 
00182 
00183 
00184 
00185 void PvmIncomingMessage::get (double & val)
00186 {
00187   assert ( pvmActiveBuffer == _currentBuffer );
00188   int info = pvm_upkdouble ( &val, 1, 1 ) ;
00189 #ifdef _DEBUGPVMMESS
00190   cerr<<"PvmIncomingMessage::get (double & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00191 #endif
00192   checkForGetErrors ( info ) ;
00193 }
00194 
00195 
00196 
00197 
00198 void PvmIncomingMessage::get (short & val)
00199 {
00200   assert ( pvmActiveBuffer == _currentBuffer );
00201   int info = pvm_upkshort ( &val, 1, 1 ) ;
00202 #ifdef _DEBUGPVMMESS
00203   cerr<<"PvmIncomingMessage::get (short & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00204 #endif
00205   checkForGetErrors ( info ) ;
00206 }
00207 
00208 
00209 
00210 void PvmIncomingMessage::get (unsigned short & val)
00211 {
00212   assert ( pvmActiveBuffer == _currentBuffer );
00213   int info = pvm_upkushort ( &val, 1, 1 ) ;
00214 #ifdef _DEBUGPVMMESS
00215   cerr<<"PvmIncomingMessage::get (unsigned short & "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00216 #endif
00217   checkForGetErrors ( info ) ;
00218 }
00219 
00220 
00221 
00222 void PvmIncomingMessage::get (char * ch)
00223 {
00224   assert ( pvmActiveBuffer == _currentBuffer );
00225   int info = pvm_upkstr ( ch ) ;
00226 #ifdef _DEBUGPVMMESS
00227   cerr<<"PvmIncomingMessage::get (char * "<<ch<<" )"<< " Buffer " << _currentBuffer << endl;
00228 #endif
00229   checkForGetErrors ( info ) ;
00230 }
00231 
00232 
00233 void PvmIncomingMessage::get (std::string & str)
00234 {
00235   assert ( pvmActiveBuffer == _currentBuffer );
00236 
00237   unsigned int stringSize ;
00238   int info = pvm_upkuint ( &stringSize, 1, 1 ) ;
00239   checkForGetErrors ( info ) ;
00240 
00241   char * Cstr = new char [stringSize] ;
00242 
00243   info = pvm_upkstr ( Cstr ) ;
00244   checkForGetErrors ( info ) ;
00245   assert (Cstr[stringSize-1] == '\0' ) ;
00246 
00247   str = Cstr ;
00248 #ifdef _DEBUGPVMMESS
00249   cerr<<"PvmIncomingMessage::get (std::string & "<<str<<" )"<< " Buffer " << _currentBuffer << endl;
00250 #endif
00251   delete [] Cstr ;
00252 
00253 }
00254 void PvmIncomingMessage::get (char * val, int cnt)
00255 {
00256    assert ( pvmActiveBuffer == _currentBuffer ) ;
00257    int info = pvm_upkbyte ( val, cnt, 1 ) ;
00258 #ifdef _DEBUGPVMMESS
00259   cerr<<"PvmIncomingMessage::get (char * "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00260 #endif
00261    checkForGetErrors ( info ) ;
00262 }
00263 
00264 
00265 void PvmIncomingMessage::get (long * val, int cnt)
00266 {
00267    assert ( pvmActiveBuffer == _currentBuffer ) ;
00268    int info = pvm_upklong ( val, cnt, 1 ) ;
00269 #ifdef _DEBUGPVMMESS
00270   cerr<<"PvmIncomingMessage::get (long * "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00271 #endif
00272    checkForGetErrors ( info ) ;
00273 }
00274 
00275 
00276 
00277 
00278 void PvmIncomingMessage::get (unsigned long * val, int cnt)
00279 {
00280   assert ( pvmActiveBuffer == _currentBuffer );
00281   int info = pvm_upkulong ( val, cnt, 1 ) ;
00282 #ifdef _DEBUGPVMMESS
00283   cerr<<"PvmIncomingMessage::get (unsigned long * "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00284 #endif
00285   checkForGetErrors ( info ) ;
00286 }
00287 
00288 
00289 
00290 
00291 
00292 void PvmIncomingMessage::get (int * val, int cnt)
00293 {
00294   assert ( pvmActiveBuffer == _currentBuffer );
00295   int info = pvm_upkint ( val, cnt, 1 ) ;
00296 #ifdef _DEBUGPVMMESS
00297   cerr<<"PvmIncomingMessage::get (int * "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00298 #endif
00299   checkForGetErrors ( info ) ;
00300 }
00301 
00302 
00303 
00304 void PvmIncomingMessage::get (unsigned int * val, int cnt)
00305 {
00306   assert ( pvmActiveBuffer == _currentBuffer );
00307   int info = pvm_upkuint ( val, cnt, 1 ) ;
00308 #ifdef _DEBUGPVMMESS
00309   cerr<<"PvmIncomingMessage::get (unsigned int * "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00310 #endif
00311   checkForGetErrors ( info ) ;
00312 }
00313 
00314 
00315 
00316 
00317 void PvmIncomingMessage::get (float * val, int cnt)
00318 {
00319   assert ( pvmActiveBuffer == _currentBuffer );
00320   int info = pvm_upkfloat ( val, cnt, 1 ) ;
00321 #ifdef _DEBUGPVMMESS
00322   cerr<<"PvmIncomingMessage::get (float * "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00323 #endif
00324   checkForGetErrors ( info ) ;
00325 }
00326 
00327 
00328 
00329 
00330 void PvmIncomingMessage::get (double * val, int cnt)
00331 {
00332   assert ( pvmActiveBuffer == _currentBuffer );
00333   int info = pvm_upkdouble ( val, 1, 1 ) ;
00334 #ifdef _DEBUGPVMMESS
00335   cerr<<"PvmIncomingMessage::get (double * "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00336 #endif
00337   checkForGetErrors ( info ) ;
00338 }
00339 
00340 
00341 
00342 
00343 void PvmIncomingMessage::get (short * val, int cnt)
00344 {
00345   assert ( pvmActiveBuffer == _currentBuffer );
00346   int info = pvm_upkshort ( val, cnt, 1 ) ;
00347 #ifdef _DEBUGPVMMESS
00348   cerr<<"PvmIncomingMessage::get (short * "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00349 #endif
00350   checkForGetErrors ( info ) ;
00351 }
00352 
00353 
00354 
00355 void PvmIncomingMessage::get (unsigned short * val, int cnt)
00356 {
00357   assert ( pvmActiveBuffer == _currentBuffer );
00358   int info = pvm_upkushort ( val, cnt, 1 ) ;
00359 #ifdef _DEBUGPVMMESS
00360   cerr<<"PvmIncomingMessage::get (unsigned short * "<<val<<" )"<< " Buffer " << _currentBuffer << endl;
00361 #endif
00362   checkForGetErrors ( info ) ;
00363 }
00364 
00365 

logo OpenMask

Documentation generated on Mon Jun 9 11:45:57 2008

Generated with doxygen by Dimitri van Heesch ,   1997-2007