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
message.cpp
Aller à la documentation de ce fichier.
1 #include "xios_spl.hpp"
2 #include "message.hpp"
3 #include "base_type.hpp"
4 #include "buffer_in.hpp"
5 #include "buffer_out.hpp"
6 
7 namespace xios
8 {
9 
11 
13  {
14  typeList.push_back(type.clone());
15  return *this ;
16  }
17 
18 // CMessage& CMessage::push(CBaseType& type)
19 // {
20 // typeList.push_back(&type);
21 // return *this ;
22 // }
23 
24  size_t CMessage::size(void) const
25  {
26  list<CBaseType*>::const_iterator it;
27  size_t retSize=0 ;
28 
29  for(it=typeList.begin();it!=typeList.end();it++) retSize+=(*it)->size() ;
30  return retSize ;
31  }
32 
33  bool CMessage::fromBuffer(CBufferIn& buffer) const
34  {
35  list<CBaseType*>::const_iterator it;
36 
37  if (buffer.remain()>=size())
38  {
39  for(it=typeList.begin();it!=typeList.end();it++) (*it)->fromBuffer(buffer) ;
40  return true ;
41  }
42  else
43  {
44  return false ;
45  }
46  }
47 
48 
49  bool CMessage::toBuffer(CBufferOut& buffer) const
50  {
51  list<CBaseType*>::const_iterator it;
52  if (buffer.remain()>=size())
53  {
54  for(it=typeList.begin();it!=typeList.end();it++) (*it)->toBuffer(buffer) ;
55  return true ;
56  }
57  else
58  {
59  return false ;
60  }
61 
62  }
63 
64 
66  {
67  list<CBaseType*>::iterator it;
68  for(it=typeList.begin();it!=typeList.end();it++) delete *it ;
69  typeList.clear() ;
70  }
71 
73  {
74  clear() ;
75  }
76 
77 
79  {
80  if (!msg.toBuffer(buffer)) ERROR("CBufferOut& operator<<(CBufferOut& buffer, CMessage& msg)",
81  << "Not enough free space in buffer to queue the message.");
82  return buffer ;
83  return buffer ;
84  }
85 
86 
88  {
89  if (!msg.fromBuffer(buffer)) ERROR("CBufferIn& operator>>(CBufferIn& buffer, CMessage& msg)",
90  << "Not enough data in buffer to unqueue the message.");
91  return buffer ;
92  return buffer ;
93  }
94 
96  {
97  msg.push(type) ;
98  return msg ;
99  }
100 
101 // CMessage& operator<<(CMessage& msg, const CBaseType& type)
102 // {
103 // msg.push(*type.clone()) ;
104 // return msg ;
105 // }
106 
107 }
virtual bool toBuffer(CBufferOut &buffer) const
Definition: message.cpp:49
size_t remain(void)
Definition: buffer_in.cpp:46
#define xios(arg)
list< CBaseType * > typeList
Definition: message.hpp:19
CBufferOut & operator<<(CBufferOut &buffer, const CArray< T_numtype, N_rank > &array)
Definition: array_new.hpp:657
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())
CMessage & push(const CBaseType &type)
Definition: message.cpp:12
CBufferIn & operator>>(CBufferIn &buffer, CArray< T_numtype, N_rank > &array)
Definition: array_new.hpp:664
virtual size_t size(void) const
Definition: message.cpp:24
virtual CBaseType * clone(void) const =0
CMessage(void)
Definition: message.cpp:10
size_t remain(void)
Definition: buffer_out.cpp:49
void clear(void)
Definition: message.cpp:65
virtual bool fromBuffer(CBufferIn &buffer) const
Definition: message.cpp:33