#include "xmlioserver_spl.hpp" #include "exception.hpp" #include "buffer_out.hpp" #include "buffer_client.hpp" #include "cxios.hpp" #include #include "tracer.hpp" namespace xios { CClientBuffer::CClientBuffer(MPI_Comm interComm_,int serverRank_) { bufferSizeByServer=CXios::bufferSize ; cout<<"bufferSizeByServer"<bufferSize) ERROR("CClientBuffer::hasSpace(int size)", <<"request size is too big for buffer, increase buffer client size"); if (size<=remain()) return true ; else return false ; } CBufferOut* CClientBuffer::getBuffer(int size) { if (size<=remain()) { retBuffer->realloc(buffer[current]+count,size) ; count+=size ; return retBuffer ; } else { ERROR("CBufferOut* CClientBuffer::getSpace(int size) ;", <<"No ennough space in buffer, that may not happen..."); return NULL ; } } bool CClientBuffer::checkBuffer(void) { MPI_Status status ; int flag ; if (pending) { traceOff() ; MPI_Test(&request,&flag,&status) ; traceOn() ; if (flag==true) pending=false ; } if (!pending) { if (count>0) { MPI_Issend(buffer[current],count,MPI_CHAR,serverRank,20,interComm,&request) ; pending=true ; if (current==1) current=0 ; else current=1 ; count=0 ; } } return pending ; } bool CClientBuffer::hasPendingRequest(void) { if (pending) return true ; else if (count>0) return true ; else return false ; } }