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

Last change on this file since 775 was 775, checked in by mhnguyen, 7 years ago

Implementing the reading of attributes of an axis from a file

+) 3d grid can be read directly from a file
+) Clean some redundant codes
+) Add new attribute declaration that allows to output only desired attributes

Test
+) On Curie
+) test_remap passes and result is correct

  • 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: 7.0 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      void CAttributeArray<T_numtype, N_rank>::reset(void)
45      {
46        CArray<T_numtype, N_rank>::reset() ;
47        inheritedValue.reset() ;
48      }
49
50      template <typename T_numtype, int N_rank>
51      CArray<T_numtype,N_rank> CAttributeArray<T_numtype, N_rank>::getValue(void) const
52      {
53        return this->copy() ;
54      }
55
56      template <typename T_numtype, int N_rank>
57      void CAttributeArray<T_numtype,N_rank>::setValue(const CArray<T_numtype,N_rank>& value)
58      {
59        this->resize(value.shape()) ;
60        *this=value ;
61      }
62
63    template <typename T_numtype, int N_rank>
64    void CAttributeArray<T_numtype,N_rank>::set(const CAttribute& attr)
65    {
66      this->set(dynamic_cast<const CAttributeArray<T_numtype,N_rank>& >(attr)) ;
67    }
68
69    template <typename T_numtype, int N_rank>
70    void CAttributeArray<T_numtype,N_rank>::set(const CAttributeArray& attr)
71    {
72      this->setValue(attr) ;
73    }
74
75
76    template <typename T_numtype, int N_rank>
77    void CAttributeArray<T_numtype,N_rank>::setInheritedValue(const CAttribute& attr)
78    {
79      this->setInheritedValue(dynamic_cast<const CAttributeArray<T_numtype,N_rank>& >(attr)) ;
80    }
81
82    template <typename T_numtype, int N_rank>
83    void CAttributeArray<T_numtype,N_rank>::setInheritedValue(const CAttributeArray& attr)
84    {
85      if (this->isEmpty() && attr.hasInheritedValue())
86      {
87        inheritedValue.resize(attr.shape()) ;
88        inheritedValue=attr ;
89      }
90    }
91
92    template <typename T_numtype, int N_rank>
93    CArray<T_numtype,N_rank> CAttributeArray<T_numtype,N_rank>::getInheritedValue(void) const
94    {
95      if (this->isEmpty()) return inheritedValue.copy() ;
96      else return getValue() ;
97    }
98
99    template <typename T_numtype, int N_rank>
100    bool CAttributeArray<T_numtype,N_rank>::hasInheritedValue(void) const
101    {
102      return !this->isEmpty() || !inheritedValue.isEmpty() ;
103    }
104
105
106    template <typename T_numtype, int N_rank>
107    StdString CAttributeArray<T_numtype,N_rank>::_toString(void) const
108    {
109      StdOStringStream oss;
110      if (! isEmpty() && this->hasId()) oss << this->getName() << "=\"" << CArray<T_numtype, N_rank>::toString() << "\"";
111      return (oss.str());
112    }
113
114      template <typename T_numtype, int N_rank>
115         void CAttributeArray<T_numtype, N_rank>::_fromString(const StdString & str)
116      {
117        CArray<T_numtype, N_rank>::fromString(str) ;
118      }
119
120      template <typename T_numtype, int N_rank>
121      bool CAttributeArray<T_numtype, N_rank>::_toBuffer (CBufferOut& buffer) const
122      {
123         return CArray<T_numtype, N_rank>::toBuffer(buffer) ;
124      }
125
126      template <typename T_numtype, int N_rank>
127      bool CAttributeArray<T_numtype, N_rank>::_fromBuffer(CBufferIn& buffer)
128      {
129        return CArray<T_numtype, N_rank>::fromBuffer(buffer) ;
130      }
131
132      template <typename T_numtype, int N_rank>
133      void CAttributeArray<T_numtype, N_rank>::generateCInterface(ostream& oss,const string& className)
134      {
135        if (this->isAttributePublic())
136          CInterface::AttributeCInterface<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>::generateFortran2003Interface(ostream& oss,const string& className)
141      {
142        if (this->isAttributePublic())
143          CInterface::AttributeFortran2003Interface<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
144      }
145
146      template <typename T_numtype, int N_rank>
147      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceDeclaration_(ostream& oss,const string& className)
148      {
149        if (this->isAttributePublic())
150          CInterface::AttributeFortranInterfaceDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()+"_") ;
151      }
152
153      template <typename T_numtype, int N_rank>
154      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceBody_(ostream& oss,const string& className)
155      {
156        if (this->isAttributePublic())
157          CInterface::AttributeFortranInterfaceBody<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
158      }
159
160      template <typename T_numtype, int N_rank>
161      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceDeclaration(ostream& oss,const string& className)
162      {
163        if (this->isAttributePublic())
164          CInterface::AttributeFortranInterfaceDeclaration<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        if (this->isAttributePublic())
171          CInterface::AttributeFortranInterfaceGetDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()+"_") ;
172      }
173
174      template <typename T_numtype, int N_rank>
175      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceGetBody_(ostream& oss,const string& className)
176      {
177        if (this->isAttributePublic())
178          CInterface::AttributeFortranInterfaceGetBody<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
179      }
180
181      template <typename T_numtype, int N_rank>
182      void CAttributeArray<T_numtype, N_rank>::generateFortranInterfaceGetDeclaration(ostream& oss,const string& className)
183      {
184        if (this->isAttributePublic())
185          CInterface::AttributeFortranInterfaceGetDeclaration<CArray<T_numtype, N_rank> >(oss, className, this->getName()) ;
186      }
187} // namespace xios
188
189#endif // __XIOS_ATTRIBUTE_ENUM_IMPL_HPP__
Note: See TracBrowser for help on using the repository browser.