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
variable.hpp
Aller à la documentation de ce fichier.
1 #ifndef __XIOS_CVariable__
2 #define __XIOS_CVariable__
3 
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 #include "declare_attribute.hpp"
12 
13 namespace xios
14 {
16 
17  class CVariableGroup;
18  class CVariableAttributes;
19  class CVariable;
20  class CContext;
22 
23  // Declare/Define CVarAttribute
25 #include "var_attribute.conf"
26  END_DECLARE_ATTRIBUTE_MAP(CVariable)
27 
28 
29 
30  class CVariable
31  : public CObjectTemplate<CVariable>
32  , public CVariableAttributes
33  {
36  typedef CVariableAttributes SuperClassAttribute;
37 
38  public :
39  enum EEventId
40  {
41  EVENT_ID_VARIABLE_VALUE
42  };
43 
44  friend class CVariableGroup;
45 
46  public :
47 
48  typedef CVariableAttributes RelAttributes;
49  typedef CVariableGroup RelGroup;
50 
52  CVariable(void);
53  explicit CVariable(const StdString & id);
54  CVariable(const CVariable & var); // Not implemented yet.
55  CVariable(const CVariable * const var); // Not implemented yet.
56 
58  virtual ~CVariable(void);
59 
60  public :
62  virtual void parse(xml::CXMLNode & node);
63  virtual StdString toString(void) const;
64 
66  const StdString& getVariableOutputName(void) const;
67  const StdString & getContent (void) const;
68 
69  void setContent(const StdString& content);
70 
71 
72  template <typename T> inline T getData(void) const;
73  template <typename T> inline void setData(T data);
74 
75  template <typename T, StdSize N>
76  inline void getData(CArray<T, N>& _data_array) const;
77 
78  static bool dispatchEvent(CEventServer& event) ;
79 
81  void sendValue();
82  void sendValue(CContextClient* client, bool clientPrim = false);
83 
84  static void recvValue(CEventServer& event) ;
85  void recvValue(CBufferIn& buffer) ;
86 
87  public :
88 
90  static StdString GetName(void);
91  static StdString GetDefName(void);
92  static ENodeType GetType(void);
93 
94  private :
95 
97 
98  }; // class CVar
99 
100  template <typename T>
101  inline T CVariable::getData(void) const
102  {
103  T retval ;
104  std::stringstream sstr(std::stringstream::in | std::stringstream::out);
105  sstr<<content ;
106  sstr>>retval ;
107  if (sstr.fail()) ERROR("CVariable::getdata()",
108  << "Cannot convert string <" << content << "> into type required" );
109  return retval ;
110  }
111 
112  template<>
113  inline bool CVariable::getData(void) const
114  {
115  if (content.compare("true")==0 || content.compare(".true.")==0 || content.compare(".TRUE.")==0) return true ;
116  else if (content.compare("false")==0 || content.compare(".false.")==0 || content.compare(".FALSE.")==0) return false ;
117  else ERROR("CVariable::getdata()",
118  << "Cannot convert string <" << content << "> into type required" );
119  return false ;
120  }
121 
122  template<>
123  inline std::string CVariable::getData(void) const
124  { return content; }
125 
126  template<>
127  inline void CVariable::setData(bool data)
128  {
129  if (true == data) content.assign("true");
130  else content.assign("false");
131  }
132 
133  template <typename T>
134  inline void CVariable::setData(T data)
135  {
136  std::stringstream sstr;
137  sstr<<data;
138  content = sstr.str();
139  }
140 
142 
143  // Declare/Define CVarGroup and CVarDefinition
145 } // namespace xios
146 
147 #endif // __XIOS_CVariable__
CVariableAttributes SuperClassAttribute
Definition: variable.hpp:36
#define END_DECLARE_ATTRIBUTE_MAP(type)
void setData(T data)
Definition: variable.hpp:134
CVariableGroup RelGroup
Definition: variable.hpp:49
std::string StdString
Definition: xios_spl.hpp:48
#define xios(arg)
DECLARE_GROUP_PARSE_REDEF(CVariable)
#define BEGIN_DECLARE_ATTRIBUTE_MAP(type)
CObjectTemplate< CVariable > SuperClass
typedef ///
Definition: variable.hpp:35
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())
A context can be both on client and on server side.
////////////////////// Déclarations ////////////////////// ///
////////////////////// Déclarations ////////////////////// ///
Definition: array.hpp:25
T getData(void) const
Definition: variable.hpp:101
CVariableAttributes RelAttributes
Definition: variable.hpp:48
enum xios::_node_type ENodeType
////////////////////// Définitions ////////////////////// ///
StdString content
Definition: variable.hpp:96