#ifndef __XIOS_ENUM__ #define __XIOS_ENUM__ #include "xios_spl.hpp" #include "exception.hpp" #include "buffer_in.hpp" #include "buffer_out.hpp" #include "base_type.hpp" #include "message.hpp" #define __INLINE__ inline namespace xios { class CEnumBase { } ; template class CEnum_ref ; template class CEnum : public virtual CBaseType, public T { public: typedef typename T::t_enum T_enum ; CEnum(void) ; __INLINE__ CEnum(const T_enum& val) ; __INLINE__ CEnum(const CEnum& type) ; __INLINE__ CEnum(const CEnum_ref& type) ; virtual ~CEnum() { _reset() ; } __INLINE__ T_enum& get(void) ; __INLINE__ const T_enum& get(void) const; __INLINE__ void set(const T_enum& val) ; __INLINE__ void set(const CEnum& val) ; __INLINE__ void set(const CEnum_ref& val) ; __INLINE__ CEnum& operator = (const T_enum& val) ; __INLINE__ CEnum& operator = (const CEnum& val) ; __INLINE__ CEnum& operator = (const CEnum_ref& val) ; __INLINE__ operator T_enum&() ; inline virtual CBaseType* clone(void) const { return _clone(); } virtual void fromString(const string& str) { _fromString(str); } virtual string toString(void) const { return _toString(); } virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer) ; } virtual bool toBuffer(CBufferOut& buffer) const { return _toBuffer(buffer); } virtual void reset(void) { _reset(); } virtual bool isEmpty() const { return _isEmpty(); } virtual size_t size(void) const { return _size(); } __INLINE__ void allocate(void) ; __INLINE__ void checkEmpty(void) const; T_enum* ptrValue ; bool empty ; friend class CEnum_ref ; private : __INLINE__ CEnum* _clone(void) const; __INLINE__ void _fromString(const string& str) ; __INLINE__ string _toString(void) const; __INLINE__ bool _fromBuffer(CBufferIn& buffer) ; __INLINE__ bool _toBuffer(CBufferOut& buffer) const; __INLINE__ void _reset(void) ; __INLINE__ bool _isEmpty() const ; __INLINE__ size_t _size(void) const ; } ; template class CEnum_ref : public virtual CBaseType, public T { public: typedef typename T::t_enum T_enum ; __INLINE__ CEnum_ref(void) ; __INLINE__ CEnum_ref(T_enum& val) ; __INLINE__ CEnum_ref(CEnum& type) ; __INLINE__ CEnum_ref(const CEnum_ref& type) ; virtual ~CEnum_ref() {}; __INLINE__ T_enum& get(void) const; __INLINE__ void set(const T_enum& val) const ; __INLINE__ void set(const CEnum& val) const ; __INLINE__ void set(const CEnum_ref& val) const ; __INLINE__ void set_ref(T_enum& val) ; __INLINE__ void set_ref(CEnum& val) ; __INLINE__ void set_ref(const CEnum_ref& val) ; __INLINE__ const CEnum_ref& operator = (T_enum& val) const ; __INLINE__ const CEnum_ref& operator = (CEnum& val) const ; __INLINE__ const CEnum_ref& operator = (const CEnum_ref& val) const; __INLINE__ operator T_enum&() const; inline virtual CBaseType* clone(void) const { return _clone(); } virtual void fromString(const string& str) { _fromString(str); } virtual void fromString(const string& str) const { _fromString(str); } virtual string toString(void) const { return _toString(); } virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer) ; } virtual bool fromBuffer(CBufferIn& buffer) const { return _fromBuffer(buffer); } virtual bool toBuffer(CBufferOut& buffer) const { return _toBuffer(buffer); } virtual void reset(void) { _reset(); } virtual bool isEmpty() const { return _isEmpty(); } virtual size_t size(void) const { return _size(); } __INLINE__ void checkEmpty(void) const; T_enum mutable * ptrValue ; bool empty ; friend class CEnum ; private : __INLINE__ CEnum_ref* _clone(void) const; __INLINE__ void _fromString(const string& str) ; __INLINE__ void _fromString(const string& str) const; __INLINE__ string _toString(void) const; __INLINE__ bool _fromBuffer(CBufferIn& buffer) ; __INLINE__ bool _fromBuffer(CBufferIn& buffer) const ; __INLINE__ bool _toBuffer(CBufferOut& buffer) const; __INLINE__ void _reset(void) ; __INLINE__ bool _isEmpty() const ; __INLINE__ size_t _size(void) const ; } ; template bool operator== (const CEnum& lhs, const typename T::t_enum& rhs); template bool operator== (const typename T::t_enum& lhs, const CEnum& rhs); template bool operator== (const CEnum& lhs, const CEnum& rhs); template bool operator== (const CEnum_ref& lhs, const CEnum_ref& rhs); template bool operator== (const CEnum_ref& lhs, const typename T::t_enum& rhs); template bool operator== (const typename T::t_enum& lhs, const CEnum_ref& rhs); template bool operator== (const CEnum& lhs, const CEnum_ref& rhs) {return (lhs.get() == rhs.get());} template bool operator== (const CEnum_ref& lhs, const CEnum& rhs) {return (rhs == lhs); } template __INLINE__ CBufferOut& operator<<(CBufferOut& buffer, const CEnum& type) ; template __INLINE__ CBufferOut& operator<<(CBufferOut& buffer, const typename T::t_enum & type) ; template __INLINE__ CBufferIn& operator>>(CBufferIn& buffer, CEnum& type) ; // template __INLINE__ CMessage& operator<<(CMessage& msg, const CEnum& type) ; template __INLINE__ CMessage& operator<<(CMessage& msg, const typename T::t_enum & type) ; template __INLINE__ CBufferOut& operator<<(CBufferOut& buffer, const CEnum& type) ; template __INLINE__ CBufferOut& operator<<(CBufferOut& buffer, const typename T::t_enum & type); template __INLINE__ CBufferIn& operator>>(CBufferIn& buffer, CEnum& type); // template __INLINE__ CMessage& operator<<(CMessage& msg, const CEnum& type); template __INLINE__ CMessage& operator<<(CMessage& msg, const typename T::t_enum & type); } # ifdef __INLINE__ # include "enum_impl.hpp" # include "enum_ref_impl.hpp" # endif #endif