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

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

bugfix : array was corretcly resized

YM

File size: 6.5 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()) 
79      {
80        inheritedValue.resize(attr.shape()) ;
81        inheritedValue=attr ;
82      }
83    } 
84
85    template <typename T_numtype, int N_rank>
86    CArray<T_numtype,N_rank> CAttributeArray<T_numtype,N_rank>::getInheritedValue(void) const
87    {
88      if (this->isEmpty()) return inheritedValue.copy() ;
89      else return getValue() ;
90    } 
91   
92    template <typename T_numtype, int N_rank>
93    bool CAttributeArray<T_numtype,N_rank>::hasInheritedValue(void) const
94    {
95      return !this->isEmpty() || !inheritedValue.isEmpty() ;
96    } 
97   
98
99    template <typename T_numtype, int N_rank>
100    StdString CAttributeArray<T_numtype,N_rank>::_toString(void) const
101    {
102      StdOStringStream oss;
103      if (! isEmpty() && this->hasId()) oss << this->getName() << "=\"" << CArray<T_numtype, N_rank>::toString() << "\"";
104      return (oss.str());
105    }
106
107      template <typename T_numtype, int N_rank>
108         void CAttributeArray<T_numtype, N_rank>::_fromString(const StdString & str)
109      {
110        CArray<T_numtype, N_rank>::fromString(str) ;
111      }
112
113      template <typename T_numtype, int N_rank>
114      bool CAttributeArray<T_numtype, N_rank>::_toBuffer (CBufferOut& buffer) const
115      {
116         return CArray<T_numtype, N_rank>::toBuffer(buffer) ;
117      }
118
119      template <typename T_numtype, int N_rank>
120      bool CAttributeArray<T_numtype, N_rank>::_fromBuffer(CBufferIn& buffer)
121      {
122        return CArray<T_numtype, N_rank>::fromBuffer(buffer) ;
123      }
124
125      template <typename T_numtype, int N_rank>
126      void CAttributeArray<T_numtype, N_rank>::generateCInterface(ostream& oss,const string& className)
127      {
128        CInterface::AttributeCInterface<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
129      }
130     
131      template <typename T_numtype, int N_rank>
132      void CAttributeArray<T_numtype, N_rank>::generateFortran2003Interface(ostream& oss,const string& className)
133      {
134        CInterface::AttributeFortran2003Interface<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
135      }
136     
137      template <typename T_numtype, int N_rank>
138      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceDeclaration_(ostream& oss,const string& className)
139      {
140        CInterface::AttributeFortranInterfaceDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()+"_") ;
141      }
142 
143      template <typename T_numtype, int N_rank>
144      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceBody_(ostream& oss,const string& className)
145      {
146        CInterface::AttributeFortranInterfaceBody<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
147      }
148
149      template <typename T_numtype, int N_rank>
150      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceDeclaration(ostream& oss,const string& className)
151      {
152        CInterface::AttributeFortranInterfaceDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
153      }
154     
155      template <typename T_numtype, int N_rank>
156      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceGetDeclaration_(ostream& oss,const string& className)
157      {
158        CInterface::AttributeFortranInterfaceGetDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()+"_") ;
159      }
160 
161      template <typename T_numtype, int N_rank>
162      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceGetBody_(ostream& oss,const string& className)
163      {
164        CInterface::AttributeFortranInterfaceGetBody<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
165      }
166
167      template <typename T_numtype, int N_rank>
168      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceGetDeclaration(ostream& oss,const string& className)
169      {
170        CInterface::AttributeFortranInterfaceGetDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
171      }
172} // namespace xios
173
174#endif // __XIOS_ATTRIBUTE_ENUM_IMPL_HPP__
Note: See TracBrowser for help on using the repository browser.