source: XIOS/dev/branch_yushan_merged/src/attribute_enum_impl.hpp @ 1205

Last change on this file since 1205 was 1134, checked in by yushan, 7 years ago

branch merged with trunk r1130

  • 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: 6.2 KB
Line 
1#ifndef __XIOS_ATTRIBUTE_ENUM_IMPL_HPP__
2#define __XIOS_ATTRIBUTE_ENUM_IMPL_HPP__
3
4#include "enum.hpp"
5#include "buffer_in.hpp"
6#include "buffer_out.hpp"
7#include "generate_interface.hpp"
8#include "attribute_enum.hpp"
9
10namespace xios
11{
12  /// ////////////////////// Définitions ////////////////////// ///
13  template <class T>
14  CAttributeEnum<T>::CAttributeEnum(const StdString & id)
15     : CAttribute(id)
16  { /* Ne rien faire de plus */ }
17
18  template <class T>
19  CAttributeEnum<T>::CAttributeEnum(const StdString & id, const T_enum & value)
20     : CAttribute(id)
21  {
22     this->setValue(value);
23  }
24
25  template <class T>
26  CAttributeEnum<T>::CAttributeEnum(const StdString & id,
27                                    xios_map<StdString, CAttribute*> & umap)
28     : CAttribute(id)
29  {
30     umap.insert(umap.end(), std::make_pair(id, this));
31  }
32 
33  template <class T>
34  CAttributeEnum<T>::CAttributeEnum
35        (const StdString & id, const T_enum & value,
36         xios_map<StdString, CAttribute*> & umap)
37     : CAttribute(id)
38  {
39     this->setValue(value);
40     umap.insert(umap.end(), std::make_pair(id, this));
41  }
42 
43  ///--------------------------------------------------------------
44  template <class T>
45  void CAttributeEnum<T>::reset(void)
46  {
47     CEnum<T>::reset();
48     inheritedValue.reset();
49  }
50
51  template <class T>
52  typename T::t_enum CAttributeEnum<T>::getValue(void) const
53  {
54     return CEnum<T>::get();
55  }
56 
57  template <class T>
58  string CAttributeEnum<T>::getStringValue(void) const
59  {
60    return CEnum<T>::toString();
61  }
62
63
64  template <class T>
65  void CAttributeEnum<T>::setValue(const typename T::t_enum & value)
66  {
67     CEnum<T>::set(value);
68  }
69
70  template <class T>
71  void CAttributeEnum<T>::set(const CAttribute& attr)
72  {
73     this->set(dynamic_cast<const CAttributeEnum<T>& >(attr));
74  }
75   
76  template <class T>
77  void CAttributeEnum<T>::set(const CAttributeEnum& attr)
78  {
79     CEnum<T>::set(attr);
80  }
81 
82  template <class T>
83  void CAttributeEnum<T>::setInheritedValue(const CAttribute& attr)
84  {
85     this->setInheritedValue(dynamic_cast<const CAttributeEnum<T>& >(attr));
86  }
87 
88  template <class T>
89  void CAttributeEnum<T>::setInheritedValue(const CAttributeEnum& attr)
90  {
91     if (this->isEmpty() && _canInherite && attr.hasInheritedValue()) inheritedValue.set(attr.getInheritedValue());
92  }
93 
94  template <class T>
95  typename T::t_enum CAttributeEnum<T>::getInheritedValue(void) const
96  {
97     if (this->isEmpty()) return inheritedValue.get();
98     else return getValue();
99  }
100
101  template <class T>
102      string CAttributeEnum<T>::getInheritedStringValue(void) const
103      {
104          if (this->isEmpty()) return inheritedValue.toString();
105          else return CEnum<T>::toString();;
106      }
107
108  template <class T>
109      bool CAttributeEnum<T>::hasInheritedValue(void) const
110      {
111          return !this->isEmpty() || !inheritedValue.isEmpty();
112      }
113
114  template <class T>
115      bool CAttributeEnum<T>::isEqual(const CAttribute& attr)
116      {
117          return (this->isEqual(dynamic_cast<const CAttributeEnum<T>& >(attr)));
118      }
119
120  template <class T>
121      bool CAttributeEnum<T>::isEqual(const CAttributeEnum& attr)
122      {
123          return ((dynamic_cast<const CEnum<T>& >(*this)) == (dynamic_cast<const CEnum<T>& >(attr)));
124      }
125
126  //---------------------------------------------------------------
127
128  template <class T>
129      CAttributeEnum<T>& CAttributeEnum<T>::operator=(const T_enum & value)
130      {
131          this->setValue(value);
132          return *this;
133      }
134
135  //---------------------------------------------------------------
136
137  template <class T>
138      StdString CAttributeEnum<T>::_toString(void) const
139      {
140          StdOStringStream oss;
141          if (!CEnum<T>::isEmpty() && this->hasId())
142              oss << this->getName() << "=\"" << CEnum<T>::toString() << "\"";
143          return (oss.str());
144      }
145
146  template <class T>
147      void CAttributeEnum<T>::_fromString(const StdString & str)
148      {
149          CEnum<T>::fromString(str);
150      }
151
152  template <class T>
153      bool CAttributeEnum<T>::_toBuffer (CBufferOut& buffer) const
154      {
155          return CEnum<T>::toBuffer(buffer);
156      }
157
158  template <class T>
159      bool CAttributeEnum<T>::_fromBuffer(CBufferIn& buffer)
160      {
161          return CEnum<T>::fromBuffer(buffer);
162      }
163
164  template <typename T>
165      void CAttributeEnum<T>::generateCInterface(ostream& oss,const string& className)
166      {
167          CInterface::AttributeCInterface<CEnumBase>(oss, className, this->getName());
168      }
169
170  template <typename T>
171      void CAttributeEnum<T>::generateFortran2003Interface(ostream& oss,const string& className)
172      {
173          CInterface::AttributeFortran2003Interface<string>(oss, className, this->getName());
174      }
175
176  template <typename T>
177      void CAttributeEnum<T>::generateFortranInterfaceDeclaration_(ostream& oss,const string& className)
178      {
179          CInterface::AttributeFortranInterfaceDeclaration<string>(oss, className, this->getName()+"_");
180      }
181
182  template <typename T>
183      void CAttributeEnum<T>::generateFortranInterfaceBody_(ostream& oss,const string& className)
184      {
185          CInterface::AttributeFortranInterfaceBody<string>(oss, className, this->getName());
186      }
187
188  template <typename T>
189      void CAttributeEnum<T>::generateFortranInterfaceDeclaration(ostream& oss,const string& className)
190      {
191          CInterface::AttributeFortranInterfaceDeclaration<string>(oss, className, this->getName());
192      }
193
194  template <typename T>
195      void CAttributeEnum<T>::generateFortranInterfaceGetDeclaration_(ostream& oss,const string& className)
196      {
197          CInterface::AttributeFortranInterfaceGetDeclaration<string>(oss, className, this->getName()+"_");
198      }
199
200  template <typename T>
201      void CAttributeEnum<T>::generateFortranInterfaceGetBody_(ostream& oss,const string& className)
202      {
203          CInterface::AttributeFortranInterfaceGetBody<string>(oss, className, this->getName());
204      }
205
206  template <typename T>
207      void CAttributeEnum<T>::generateFortranInterfaceGetDeclaration(ostream& oss,const string& className)
208      {
209          CInterface::AttributeFortranInterfaceGetDeclaration<string>(oss, className, this->getName());
210      }
211} // namespace xios
212
213#endif // __XIOS_ATTRIBUTE_ENUM_IMPL_HPP__
214
Note: See TracBrowser for help on using the repository browser.