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

Last change on this file since 219 was 219, checked in by hozdoba, 13 years ago

Préparation nouvelle arborescence

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(MPIComm 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.