Changeset 178 for XMLIO_V2/dev/dev_rv/src/xmlio/buffer_pair.hpp
- Timestamp:
- 04/18/11 14:56:41 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/xmlio/buffer_pair.hpp
r157 r178 15 15 /// ////////////////////// Déclarations ////////////////////// /// 16 16 class CBufferPair 17 : public std::pair<CLinearBuffer, CLinearBuffer> // << pas une liste18 17 { 19 18 20 19 /// Définition de type /// 21 typedef std::pair<CLinearBuffer, CLinearBuffer> SuperClass;22 20 typedef CLinearBuffer BufferType; 23 21 … … 29 27 CBufferPair(const CBufferPair * const buffer_pair); // Not implemented yet. 30 28 29 template <typename A1, typename A2, typename A3, typename A4> 30 void prepareRequest(const long int & managerId, 31 const long int & methodId, 32 A1 * arg1 = CLinearBuffer::NULL_ARG, 33 A2 * arg2 = CLinearBuffer::NULL_ARG, 34 A3 * arg3 = CLinearBuffer::NULL_ARG, 35 A4 * arg4 = CLinearBuffer::NULL_ARG); 36 31 37 /// Destructeur /// 32 38 virtual ~CBufferPair(void); 39 40 protected : 41 42 /// Test /// 43 bool mustBeSent(void); 44 45 /// Traitements divers /// 46 void wait(void); 47 void sendCurrentBuffer(void); 48 49 /// Accesseur /// 50 CLinearBuffer & getCurrentBuffer(void); 33 51 34 52 private : 35 53 36 54 MPIComm com_client_server; 55 CLinearBuffer first, second; 56 MPIRequest first_request, second_request; 57 int currentBuffer; 37 58 38 59 }; // class CBufferPair 60 61 ///-------------------------------------------------------------- 62 63 template <typename A1, typename A2, typename A3, typename A4> 64 void CBufferPair::prepareRequest(const long int & managerId, 65 const long int & methodId, 66 A1 * arg1, A2 * arg2, A3 * arg3, A4 * arg4) 67 { 68 if (this->mustBeSent()) this->sendCurrentBuffer(); 69 70 CLinearBuffer & cbuffer = this->getCurrentBuffer(); 71 StdSize usize = cbuffer.getUnusedSize(); 72 StdSize rsize = cbuffer.getRequestedSize(arg1, arg2, arg3, arg4) ; 73 StdSize msize = cbuffer.getSize(); 74 75 long int nbargs = 0; 76 77 if (arg1 != CLinearBuffer::NULL_ARG) nbargs++; 78 if (arg2 != CLinearBuffer::NULL_ARG) nbargs++; 79 if (arg3 != CLinearBuffer::NULL_ARG) nbargs++; 80 if (arg4 != CLinearBuffer::NULL_ARG) nbargs++; 81 82 if (rsize > msize) 83 ERROR("CBufferPair::sendRequest(...)", << "Le tampon client est trop petit !"); 84 85 if (rsize <= usize) 86 { 87 cbuffer.appendRequestInfos(managerId, methodId, nbargs); 88 } 89 else 90 { 91 this->wait(); 92 this->prepareRequest(managerId, methodId, arg1, arg2, arg3, arg4); 93 } 94 } 95 96 ///-------------------------------------------------------------- 97 98 39 99 } // namespace comm 40 100 } // namespace xmlioserver
Note: See TracChangeset
for help on using the changeset viewer.