source: XMLIO_V2/dev/common/src/buffer_list.cpp @ 300

Last change on this file since 300 was 300, checked in by ymipsl, 12 years ago

nouvelle version de developpement de xios

  • nouvelle interface fortran
  • recodage complet de la couche de communication
  • et bien d'autres choses...

YM

File size: 2.4 KB
Line 
1#include "buffer_list.hpp"
2
3namespace xmlioserver
4{
5   namespace comm
6   {
7      /// ////////////////////// Définitions ////////////////////// ///
8      CBufferList::CBufferList(MPI_Comm com_client_server)
9         : SuperClass(CMPIManager::GetCommSize(com_client_server) - 1)
10         , com_client_server(com_client_server)
11         , nbbuffer(CMPIManager::GetCommSize(com_client_server) - 1)
12      { /* Ne rien faire de plus */ }
13
14      CBufferList::~CBufferList(void)
15      { /* Ne rien faire de plus */ }
16
17      ///--------------------------------------------------------------
18
19      bool CBufferList::hasRequests(void) const
20      {
21         bool retvalue = SuperClass::operator[](0).hasRequest();
22         for (StdSize i = 1; i < this->nbbuffer; i++)
23            retvalue = retvalue && SuperClass::operator[](i).hasRequest();
24         return (retvalue);
25      }
26
27      bool CBufferList::recvRequests(void)
28      {
29         while (!this->hasRequests())
30         {
31            for (int i = 1; i < CMPIManager::GetCommSize(com_client_server); i++)
32            {
33               if (CMPIManager::HasReceivedData(com_client_server, i))
34               {
35                  StdSize size = CMPIManager::GetReceivedDataSize(com_client_server, i);
36                  if (SuperClass::operator[](i-1).isAvailable(size))
37                  {
38                     CMPIManager::ReceiveCircularBuffer
39                        (com_client_server, i, SuperClass::operator[](i-1));
40                  }
41                  else
42                  {
43                     DEBUG ("Impossible d'écrire dans le tampon " << i
44                             << " (Taille requise : " << size << " octets,"
45                             << " Taille du buffer circulaire : "
46                             << SuperClass::operator[](i-1).getSize() << " octets)");
47                  }
48               }
49            }
50         }
51         
52
53           
54         return (true);
55      }
56
57      void CBufferList::getRequests(std::vector<CLinearBuffer> & lbuffer)
58      {
59         for (StdSize i = 0; i < this->nbbuffer; i++)
60         {
61            lbuffer.push_back(SuperClass::operator[](i).getNextRequest());
62         }
63      }
64
65      StdSize CBufferList::getNumberOfBuffers(void) const
66      { 
67         return (this->nbbuffer) ;
68      }
69
70      ///--------------------------------------------------------------
71
72   } // namespace tree
73} // namespace xmlioserver
74
Note: See TracBrowser for help on using the repository browser.