source: XIOS/trunk/src/node/variable.hpp @ 501

Last change on this file since 501 was 501, checked in by ymipsl, 10 years ago

Add licence copyright to all file ond directory src using the command :
svn propset -R copyright -F header_licence src

XIOS is now officialy under CeCILL licence

YM

  • 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
File size: 4.2 KB
Line 
1#ifndef __XMLIO_CVariable__
2#define __XMLIO_CVariable__
3
4/// xios headers ///
5#include "xmlioserver_spl.hpp"
6#include "declare_group.hpp"
7#include "group_template.hpp"
8#include "array_new.hpp"
9
10namespace xios
11{
12      /// ////////////////////// Déclarations ////////////////////// ///
13
14      class CVariableGroup;
15      class CVariableAttributes;
16      class CVariable;
17      class CContext;
18      ///--------------------------------------------------------------
19
20      // Declare/Define CVarAttribute
21      BEGIN_DECLARE_ATTRIBUTE_MAP(CVariable)
22#include "var_attribute.conf"
23      END_DECLARE_ATTRIBUTE_MAP(CVariable)
24
25      ///--------------------------------------------------------------
26
27      class CVariable
28         : public CObjectTemplate<CVariable>
29         , public CVariableAttributes
30      {
31            enum EEventId
32            {
33             EVENT_ID_VARIABLE_VALUE
34            };
35
36            /// typedef ///
37            typedef CObjectTemplate<CVariable>   SuperClass;
38            typedef CVariableAttributes SuperClassAttribute;
39
40            friend class CVariableGroup;
41
42         public :
43
44            typedef CVariableAttributes RelAttributes;
45            typedef CVariableGroup      RelGroup;
46
47            /// Constructeurs ///
48            CVariable(void);
49            explicit CVariable(const StdString & id);
50            CVariable(const CVariable & var);       // Not implemented yet.
51            CVariable(const CVariable * const var); // Not implemented yet.
52
53            /// Destructeur ///
54            virtual ~CVariable(void);
55
56         public :
57            enum EVarType
58            {  t_int, t_short_int, t_long_int, t_float, t_double, t_long_double, t_bool, t_string, t_undefined } ;
59
60
61            /// Autres ///
62            virtual void parse(xml::CXMLNode & node);
63            virtual StdString toString(void) const;
64
65            /// Accesseur ///
66            const StdString & getContent (void) const;
67
68            void setContent(const StdString& content);
69
70
71            template <typename T> inline T getData(void) const;
72            template <typename T> inline void setData(T data);
73
74            template <typename T, StdSize N>
75            inline void getData(CArray<T, N>& _data_array) const;
76
77            EVarType getVarType(void) const ;
78
79            static bool dispatchEvent(CEventServer& event) ;
80
81            //! Sending a request to set up variable data
82            void sendValue();
83
84            static void recvValue(CEventServer& event) ;
85            void recvValue(CBufferIn& buffer) ;
86
87         public :
88
89            /// Accesseurs statiques ///
90            static StdString GetName(void);
91            static StdString GetDefName(void);
92            static ENodeType GetType(void);
93
94         private :
95
96            StdString content;
97
98      }; // class CVar
99
100      template<>
101      inline bool CVariable::getData(void) const
102      {
103         if (content.compare("true")==0 || content.compare(".true.")==0 || content.compare(".TRUE.")==0) return true ;
104         else if (content.compare("false")==0 || content.compare(".false.")==0 || content.compare(".FALSE.")==0) return false ;
105         else ERROR("CVariable::getdata()",
106               << "Cannot convert string <" << content << "> into type required" );
107         return false ;
108      }
109
110      template <typename T>
111      inline T CVariable::getData(void) const
112      {
113         T retval ;
114         std::stringstream sstr(std::stringstream::in | std::stringstream::out);
115         sstr<<content ;
116         sstr>>retval ;
117         if (sstr.fail()) ERROR("CVariable::getdata()",
118               << "Cannot convert string <" << content << "> into type required" );
119         return retval ;
120      }
121
122      template<>
123      inline void CVariable::setData(bool data)
124      {
125        if (true == data) content.assign("true");
126        else content.assign("false");
127      }
128
129      template <typename T>
130      inline void CVariable::setData(T data)
131      {
132        std::stringstream sstr;
133        sstr<<data;
134        content = sstr.str();
135      }
136
137      ///--------------------------------------------------------------
138
139      // Declare/Define CVarGroup and CVarDefinition
140      DECLARE_GROUP_PARSE_REDEF(CVariable);
141
142
143
144} // namespace xios
145
146#endif // __XMLIO_CVariable__
Note: See TracBrowser for help on using the repository browser.