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

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

First working version with compression by secondary servers.

  • 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.4 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++)
30         retSize+=(*it)->size() ;
31     return retSize ;
32   }
33   
34    bool CMessage::fromBuffer(CBufferIn& buffer) const
35    {
36      list<CBaseType*>::const_iterator it; 
37     
38      if (buffer.remain()>=size())
39      {
40        for(it=typeList.begin();it!=typeList.end();it++) (*it)->fromBuffer(buffer) ;
41        return true ;
42      }
43      else
44      {
45        return false ;
46      }
47    }
48   
49
50    bool CMessage::toBuffer(CBufferOut& buffer) const
51    {
52      list<CBaseType*>::const_iterator it; 
53      if (buffer.remain()>=size())
54      {
55        for(it=typeList.begin();it!=typeList.end();it++) (*it)->toBuffer(buffer) ;
56        return true ;
57      }
58      else
59      {
60        return false ;
61      }
62
63    }
64
65   
66    void CMessage::clear()
67    {
68      list<CBaseType*>::iterator it; 
69      for(it=typeList.begin();it!=typeList.end();it++) delete *it ;
70      typeList.clear() ;
71    }
72
73    CMessage::~CMessage()
74    {
75      clear() ;
76    }
77   
78
79    CBufferOut& operator<<(CBufferOut& buffer, CMessage& msg)
80    {
81      if (!msg.toBuffer(buffer)) ERROR("CBufferOut& operator<<(CBufferOut& buffer, CMessage& msg)",
82                                       << "Not enough free space in buffer to queue the message.");
83    return buffer ;
84      return buffer ;
85    }
86
87 
88    CBufferIn& operator>>(CBufferIn& buffer, CMessage& msg)
89    {
90      if (!msg.fromBuffer(buffer)) ERROR("CBufferIn& operator>>(CBufferIn& buffer, CMessage& msg)",
91                                         << "Not enough data in buffer to unqueue the message.");
92    return buffer ;
93      return buffer ;
94    }
95
96  CMessage& operator<<(CMessage& msg,const CBaseType& type)
97 {
98    msg.push(type) ;
99    return msg ;
100  }
101
102//  CMessage& operator<<(CMessage& msg, const CBaseType&  type)
103//  {
104//    msg.push(*type.clone()) ;
105//    return msg ;
106//  }
107 
108}
Note: See TracBrowser for help on using the repository browser.