source: XMLIO_V2/dev/common/src/xmlio/buffer_list.cpp @ 286

Last change on this file since 286 was 286, checked in by ymipsl, 13 years ago

reprise en main de la version de H. Ozdoba. Correction de différentes erreurs de conception et bug.
Version NEMO operationnel en client/server, interoperabilita avec OASIS, reconstition de fichiers via netcdf4/HDF5

YM

File size: 2.9 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                     //std::cout << "Données reçues de " << i << std::endl;
39                     CMPIManager::ReceiveCircularBuffer
40                        (com_client_server, i, SuperClass::operator[](i-1));
41                  }
42                  else
43                  {
44                     DEBUG ("Impossible d'écrire dans le tampon " << i
45                             << " (Taille requise : " << size << " octets,"
46                             << " Taille du buffer circulaire : "
47                             << SuperClass::operator[](i-1).getSize() << " octets)");
48                  }
49               }
50            }
51         }
52         
53         //static int u = 0;
54         //std::cout << "Nouvelle requête disponible " << u++ << std::endl;
55         /*if (u == 3046)
56            for (int i = 1; i < CMPIManager::GetCommSize(com_client_server); i++)
57            {
58               StdOStringStream oss; oss << "data/buffer"<<i<<".txt";
59               SuperClass::operator[](i-1).printToTextFile (oss.str());
60            }*/
61           
62         return (true);
63      }
64
65      void CBufferList::getRequests(std::vector<CLinearBuffer> & lbuffer)
66      {
67         for (StdSize i = 0; i < this->nbbuffer; i++)
68         {
69            //std::cout << "Récupération de la requête " << (i+1) << std::endl;
70            lbuffer.push_back(SuperClass::operator[](i).getNextRequest());
71         }
72      }
73
74      StdSize CBufferList::getNumberOfBuffers(void) const
75      { 
76         return (this->nbbuffer) ;
77      }
78
79      ///--------------------------------------------------------------
80
81   } // namespace tree
82} // namespace xmlioserver
83
Note: See TracBrowser for help on using the repository browser.