source: XIOS/trunk/src/attribute_enum_impl.hpp @ 460

Last change on this file since 460 was 460, checked in by ymipsl, 11 years ago

New functionnalities : expression may combine fields after temporal operation (averaging, min, max ...) using the operator @

YM

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