XIOS  1.0
Xml I/O Server
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros
event_server.cpp
Aller à la documentation de ce fichier.
1 #include "xios_spl.hpp"
2 #include "buffer_in.hpp"
3 #include "type.hpp"
4 #include "event_server.hpp"
5 #include "buffer_server.hpp"
6 
7 namespace xios
8 {
9  void CEventServer::push(int rank, CServerBuffer* serverBuffer, char* startBuffer, int size)
10  {
11  CBufferIn buffer(startBuffer, size);
12  size_t timeLine;
13  int myClassId, myType, myNbSender;
14 
15  buffer >> size >> timeLine >> myNbSender >> myClassId >> myType;
16 
17  if (subEvents.empty())
18  {
19  nbSender = myNbSender;
20  classId = myClassId;
21  type = myType;
22  }
23  else
24  {
25  if (classId != myClassId || type != myType || nbSender != myNbSender)
26  ERROR("void CEventServer::push(int rank, CServerBuffer* serverBuffer, char* startBuffer, int size)",
27  << "The callers of event " << timeLine << " are not coherent." << std::endl
28  << "Received subevent: classId = " << myClassId << ", type = " << myType << ", nbSender = " << myNbSender << std::endl
29  << "Expected subevent: classId = " << classId << ", type = " << type << ", nbSender = " << nbSender);
30  }
31 
32  SSubEvent ev;
33  ev.rank = rank;
34  ev.serverBuffer = serverBuffer;
35  ev.buffer = new CBufferIn(buffer.ptr(), buffer.remain());
36  ev.size = size;
37  subEvents.push_back(ev);
38 
39  if (subEvents.size() > nbSender)
40  {
41  ERROR("void CEventServer::push(int rank, CServerBuffer* serverBuffer, char* startBuffer, int size)",
42  << "The callers of event " << timeLine << " are not coherent." << std::endl
43  << "Too many subevents have been received (" << subEvents.size() << " instead of " << nbSender << ").");
44  }
45  }
46 
48  {
49  return (nbSender == subEvents.size());
50  }
51 
53  {
54  list<SSubEvent>::iterator it;
55  for (it = subEvents.begin(); it != subEvents.end(); it++)
56  {
57  it->serverBuffer->freeBuffer(it->size);
58  delete it->buffer;
59  }
60  }
61 }
size_t remain(void)
Definition: buffer_in.cpp:46
#define xios(arg)
CATCH CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar *scalarDestination, CScalar *scalarSource, CReduceScalarToScalar *algo ERROR)("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)",<< "Operation must be defined."<< "Scalar source "<< scalarSource->getId()<< std::endl<< "Scalar destination "<< scalarDestination->getId())
list< SSubEvent > subEvents
void push(int rank, CServerBuffer *serverBuffer, char *startBuffer, int size)
Definition: event_server.cpp:9
void * ptr(void)
Definition: buffer_in.cpp:66