source: XIOS/dev/dev_olga/src/type/message.cpp @ 1158

Last change on this file since 1158 was 1158, checked in by oabramkina, 7 years ago

Two server levels: merging with trunk r1137.
There are bugs.

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
  • Property svn:eol-style set to native
File size: 2.3 KB
Line 
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
7namespace xios
8{
9
10   CMessage::CMessage(void) {}
11   
12   CMessage& CMessage::push(const CBaseType& type)
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   
65    void CMessage::clear()
66    {
67      list<CBaseType*>::iterator it; 
68      for(it=typeList.begin();it!=typeList.end();it++) delete *it ;
69      typeList.clear() ;
70    }
71
72    CMessage::~CMessage()
73    {
74      clear() ;
75    }
76   
77
78    CBufferOut& operator<<(CBufferOut& buffer, CMessage& msg)
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 
87    CBufferIn& operator>>(CBufferIn& buffer, CMessage& msg)
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
95  CMessage& operator<<(CMessage& msg,const CBaseType& type)
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}
Note: See TracBrowser for help on using the repository browser.