source: XIOS/dev/dev_olga/src/node/variable.hpp @ 1071

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

dev: test for secondary servers added.

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