source: XIOS/trunk/src/attribute_array_impl.hpp @ 445

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

Add possibility to make inheritance of attributes and reference before closing the context definition.
New fortran fonction : xios_solve inheritance()
After this call, the value of attribute have the inherited value of their parent.

YM

File size: 6.4 KB
Line 
1#ifndef __XIOS_ATTRIBUTE_ARRAY_IMPL_HPP__
2#define __XIOS_ATTRIBUTE_ARRAY_IMPL_HPP__
3
4#include "buffer_in.hpp"
5#include "buffer_out.hpp"
6#include "generate_interface.hpp"
7#include "attribute_array.hpp"
8
9 
10namespace xios
11{
12      /// ////////////////////// Définitions ////////////////////// ///
13      template <typename T_numtype, int N_rank>
14      CAttributeArray<T_numtype, N_rank>::CAttributeArray(const StdString & id)
15         : CAttribute(id)
16      { /* Ne rien faire de plus */ }
17
18      template <typename T_numtype, int N_rank>
19      CAttributeArray<T_numtype,N_rank>::CAttributeArray(const StdString & id, const CArray<T_numtype,N_rank>& value)
20         : CAttribute(id)
21      {
22         this->setValue(value);
23      }
24
25      template <typename T_numtype, int N_rank>
26      CAttributeArray<T_numtype, N_rank>::CAttributeArray(const StdString & id, xios_map<StdString, CAttribute*> & umap)
27         : CAttribute(id)
28      {
29         umap.insert(umap.end(), std::make_pair(id, this));
30      }
31
32      template <typename T_numtype, int N_rank>
33      CAttributeArray<T_numtype, N_rank>::CAttributeArray (const StdString & id, const CArray<T_numtype,N_rank>& value,
34                                                           xios_map<StdString, CAttribute*> & umap)
35         : CAttribute(id)
36      {
37         this->setValue(value);
38         umap.insert(umap.end(), std::make_pair(id, this));
39      }
40
41      ///--------------------------------------------------------------
42
43      template <typename T_numtype, int N_rank>
44      CArray<T_numtype,N_rank> CAttributeArray<T_numtype, N_rank>::getValue(void) const
45      {
46        return this->copy() ;
47      }
48
49      template <typename T_numtype, int N_rank>
50      void CAttributeArray<T_numtype,N_rank>::setValue(const CArray<T_numtype,N_rank>& value)
51      {
52        this->resize(value.shape()) ;
53        *this=value ;
54      }
55
56    template <typename T_numtype, int N_rank>
57    void CAttributeArray<T_numtype,N_rank>::set(const CAttribute& attr)
58    {
59      this->set(dynamic_cast<const CAttributeArray<T_numtype,N_rank>& >(attr)) ;
60    } 
61
62    template <typename T_numtype, int N_rank>
63    void CAttributeArray<T_numtype,N_rank>::set(const CAttributeArray& attr)
64    {
65      this->setValue(attr) ;
66    } 
67   
68   
69    template <typename T_numtype, int N_rank>
70    void CAttributeArray<T_numtype,N_rank>::setInheritedValue(const CAttribute& attr)
71    {
72      this->setInheritedValue(dynamic_cast<const CAttributeArray<T_numtype,N_rank>& >(attr)) ;
73    } 
74
75    template <typename T_numtype, int N_rank>
76    void CAttributeArray<T_numtype,N_rank>::setInheritedValue(const CAttributeArray& attr)
77    {
78      if (this->isEmpty() && attr.hasInheritedValue()) inheritedValue=attr ;
79     } 
80
81    template <typename T_numtype, int N_rank>
82    CArray<T_numtype,N_rank> CAttributeArray<T_numtype,N_rank>::getInheritedValue(void) const
83    {
84      if (this->isEmpty()) return inheritedValue.copy() ;
85      else return getValue() ;
86    } 
87   
88    template <typename T_numtype, int N_rank>
89    bool CAttributeArray<T_numtype,N_rank>::hasInheritedValue(void) const
90    {
91      return !this->isEmpty() || !inheritedValue.isEmpty() ;
92    } 
93   
94
95    template <typename T_numtype, int N_rank>
96    StdString CAttributeArray<T_numtype,N_rank>::_toString(void) const
97    {
98      StdOStringStream oss;
99      if (! isEmpty() && this->hasId()) oss << this->getName() << "=\"" << CArray<T_numtype, N_rank>::toString() << "\"";
100      return (oss.str());
101    }
102
103      template <typename T_numtype, int N_rank>
104         void CAttributeArray<T_numtype, N_rank>::_fromString(const StdString & str)
105      {
106        CArray<T_numtype, N_rank>::fromString(str) ;
107      }
108
109      template <typename T_numtype, int N_rank>
110      bool CAttributeArray<T_numtype, N_rank>::_toBuffer (CBufferOut& buffer) const
111      {
112         return CArray<T_numtype, N_rank>::toBuffer(buffer) ;
113      }
114
115      template <typename T_numtype, int N_rank>
116      bool CAttributeArray<T_numtype, N_rank>::_fromBuffer(CBufferIn& buffer)
117      {
118        return CArray<T_numtype, N_rank>::fromBuffer(buffer) ;
119      }
120
121      template <typename T_numtype, int N_rank>
122      void CAttributeArray<T_numtype, N_rank>::generateCInterface(ostream& oss,const string& className)
123      {
124        CInterface::AttributeCInterface<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
125      }
126     
127      template <typename T_numtype, int N_rank>
128      void CAttributeArray<T_numtype, N_rank>::generateFortran2003Interface(ostream& oss,const string& className)
129      {
130        CInterface::AttributeFortran2003Interface<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
131      }
132     
133      template <typename T_numtype, int N_rank>
134      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceDeclaration_(ostream& oss,const string& className)
135      {
136        CInterface::AttributeFortranInterfaceDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()+"_") ;
137      }
138 
139      template <typename T_numtype, int N_rank>
140      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceBody_(ostream& oss,const string& className)
141      {
142        CInterface::AttributeFortranInterfaceBody<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
143      }
144
145      template <typename T_numtype, int N_rank>
146      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceDeclaration(ostream& oss,const string& className)
147      {
148        CInterface::AttributeFortranInterfaceDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
149      }
150     
151      template <typename T_numtype, int N_rank>
152      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceGetDeclaration_(ostream& oss,const string& className)
153      {
154        CInterface::AttributeFortranInterfaceGetDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()+"_") ;
155      }
156 
157      template <typename T_numtype, int N_rank>
158      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceGetBody_(ostream& oss,const string& className)
159      {
160        CInterface::AttributeFortranInterfaceGetBody<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
161      }
162
163      template <typename T_numtype, int N_rank>
164      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceGetDeclaration(ostream& oss,const string& className)
165      {
166        CInterface::AttributeFortranInterfaceGetDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
167      }
168} // namespace xios
169
170#endif // __XIOS_ATTRIBUTE_ENUM_IMPL_HPP__
Note: See TracBrowser for help on using the repository browser.