source: XIOS/trunk/src/attribute.hpp @ 313

Last change on this file since 313 was 313, checked in by ymipsl, 12 years ago

Fortran attribut interface are now automaticaly generated.
Add get attribut fonctionnality from fortran.

YM

File size: 3.6 KB
Line 
1#ifndef __XMLIO_CAttribute__
2#define __XMLIO_CAttribute__
3
4/// boost headers ///
5#include <boost/any.hpp>
6
7/// xmlioserver headers ///
8#include "xmlioserver_spl.hpp"
9#include "object.hpp"
10#include "base_type.hpp"
11#include "message.hpp"
12#include "buffer_in.hpp"
13#include "buffer_out.hpp"
14
15namespace xmlioserver
16{
17   namespace tree
18   {
19      /// ////////////////////// Déclarations ////////////////////// ///
20      class CAttribute : public CObject, public CBaseType
21      {
22            typedef CObject SuperClass;
23
24         public :
25
26            /// Constructeurs ///
27            explicit CAttribute(const StdString & id);
28            CAttribute(const CAttribute & attribut);
29            CAttribute(const CAttribute * const attribut); // Not implemented.
30
31            /// Accesseurs ///
32            const StdString & getName(void) const;
33            const boost::any & getAnyValue(void) const;
34            template <typename T> inline T getValue(void) const;
35            template <typename T> inline T* getRef(void);
36
37            /// Mutateurs ///
38            template <typename T> inline void setValue(const T & value);
39            void setAnyValue(const boost::any & value);
40            void clear(void);
41
42            /// Test ///
43            bool isEmpty(void) const;
44            template <typename T> inline bool isType(void);
45
46            /// Destructeur ///
47            virtual ~CAttribute(void);
48
49            /// Autres ///
50            virtual StdString toString(void) const = 0;
51            virtual void fromString(const StdString & str) = 0;
52
53            virtual void toBinary  (StdOStream & os) const = 0;
54            virtual void fromBinary(StdIStream & is) = 0;
55            virtual void generateCInterface(ostream& oss, const string& className) = 0 ;
56            virtual void generateFortran2003Interface(ostream& oss, const string& className) = 0 ;
57            virtual void generateFortranInterfaceDeclaration_(ostream& oss,const string& className) = 0 ;
58            virtual void generateFortranInterfaceDeclaration(ostream& oss,const string& className) = 0 ;
59            virtual void generateFortranInterfaceBody_(ostream& oss,const string& className) = 0 ;
60            virtual void generateFortranInterfaceGetDeclaration_(ostream& oss,const string& className) = 0 ;
61            virtual void generateFortranInterfaceGetDeclaration(ostream& oss,const string& className) = 0 ;
62            virtual void generateFortranInterfaceGetBody_(ostream& oss,const string& className) = 0 ;
63
64
65           
66         protected :
67
68            /// Constructeurs ///
69            CAttribute(void);  // Not implemented.
70
71            /// Propriété ///
72            boost::any value;
73
74      }; // class CAttribute
75
76      /// ////////////////////// Définitions ////////////////////// ///
77      template <typename T>
78         T CAttribute::getValue(void) const
79      { 
80         return (boost::any_cast<T>(this->value)); 
81      }
82
83      template <typename T>
84         T* CAttribute::getRef(void)
85      { 
86         return (boost::any_cast<T>(&value)); 
87      }
88
89      template <typename T>
90         void CAttribute::setValue(const T & value)
91      { 
92         this->value = value; 
93      }
94
95      template<typename T>
96         bool CAttribute::isType(void)
97      { 
98         return (this->value.type() == typeid(T)); 
99      }
100
101   } // namespace tree
102 
103   CMessage& operator<<(CMessage& msg,tree::CAttribute& type) ;
104   CMessage& operator<<(CMessage& msg, const tree::CAttribute&  type) ;
105 
106   CBufferOut& operator<<(CBufferOut& buffer,tree::CAttribute& type) ;
107   CBufferIn& operator>>(CBufferIn& buffer, tree::CAttribute&  type) ;
108}
109  // namespace xmlioserver
110
111#endif // __XMLIO_CAttribute__
Note: See TracBrowser for help on using the repository browser.