Ignore:
Timestamp:
04/18/11 14:56:41 (13 years ago)
Author:
hozdoba
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/xmlio/buffer_pair.hpp

    r157 r178  
    1515      /// ////////////////////// Déclarations ////////////////////// /// 
    1616      class CBufferPair 
    17          : public std::pair<CLinearBuffer, CLinearBuffer>   // << pas une liste 
    1817      { 
    1918 
    2019            /// Définition de type /// 
    21             typedef std::pair<CLinearBuffer, CLinearBuffer> SuperClass; 
    2220            typedef CLinearBuffer BufferType; 
    2321 
     
    2927            CBufferPair(const CBufferPair * const buffer_pair); // Not implemented yet. 
    3028 
     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                                   
    3137            /// Destructeur /// 
    3238            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); 
    3351 
    3452         private : 
    3553 
    3654            MPIComm com_client_server; 
     55            CLinearBuffer first, second; 
     56            MPIRequest first_request, second_request; 
     57            int currentBuffer; 
    3758 
    3859      }; // 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       
    3999   } // namespace comm 
    40100} // namespace xmlioserver 
Note: See TracChangeset for help on using the changeset viewer.