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

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

Change namespace xmlioserver -> xios

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/// xios 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 xios
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 xios
110
111#endif // __XMLIO_CAttribute__
Note: See TracBrowser for help on using the repository browser.