CrossFramework Library
|
00001 00006 #if defined(XBASE_INCLUDED_ENUM_HPP) 00007 #else 00008 #define XBASE_INCLUDED_ENUM_HPP 00009 00010 //------------------------------------------------------------ 00011 #include <XBase/BuiltInTypes.hpp> 00012 00013 //------------------------------------------------------------ 00014 namespace XBase { 00016 00017 00020 template< typename ENUM_TYPE , typename DATA_TYPE > 00021 struct EnumPODTmpl 00022 { 00023 //============================================================ 00024 // private 00025 DATA_TYPE val_; 00026 00027 //============================================================ 00028 // public 00029 00031 00032 typedef ENUM_TYPE EnumType; 00033 typedef DATA_TYPE DataType; 00035 00037 00038 00055 EnumPODTmpl< ENUM_TYPE , DATA_TYPE >& operator=( const ENUM_TYPE aVal ) 00056 { 00057 val_ = DataType( aVal ); 00058 return *this; 00059 } 00060 00072 operator ENUM_TYPE()const 00073 { 00074 return ENUM_TYPE( val_ ); 00075 } 00077 }; 00078 00087 template< typename ENUM_TYPE , typename DATA_TYPE > 00088 class EnumTmpl : public EnumPODTmpl< ENUM_TYPE , DATA_TYPE > 00089 { 00090 public: 00092 00093 00094 EnumTmpl() 00095 { 00096 EnumPODTmpl< ENUM_TYPE , DATA_TYPE >::val_ = 0; 00097 } 00098 00100 EnumTmpl( const ENUM_TYPE aVal ) 00101 { 00102 EnumPODTmpl< ENUM_TYPE , DATA_TYPE >::val_ = DataType( aVal ); 00103 } 00105 }; 00106 00108 00109 template< typename ENUM_TYPE > class Enum8 : public EnumTmpl< ENUM_TYPE , s8 > { public: Enum8(){}; Enum8( const ENUM_TYPE aVal ) { EnumTmpl< ENUM_TYPE , s8 >::val_ = s8( aVal ); } }; 00110 template< typename ENUM_TYPE > class Enum16 : public EnumTmpl< ENUM_TYPE , s16 > { public: Enum16(){}; Enum16( const ENUM_TYPE aVal ) { EnumTmpl< ENUM_TYPE , s16 >::val_ = s16( aVal ); } }; 00111 template< typename ENUM_TYPE > class Enum32 : public EnumTmpl< ENUM_TYPE , s32 > { public: Enum32(){}; Enum32( const ENUM_TYPE aVal ) { EnumTmpl< ENUM_TYPE , s32 >::val_ = s32( aVal ); } }; 00112 template< typename ENUM_TYPE > class Enum64 : public EnumTmpl< ENUM_TYPE , s64 > { public: Enum64(){}; Enum64( const ENUM_TYPE aVal ) { EnumTmpl< ENUM_TYPE , s64 >::val_ = s64( aVal ); } }; 00113 00114 template< typename ENUM_TYPE > class Enum : public Enum8< ENUM_TYPE > { public: Enum( const ENUM_TYPE aVal ) { Enum8< ENUM_TYPE >::val_ = aVal; } }; 00115 00116 00118 } 00119 //------------------------------------------------------------ 00120 #endif 00121 // EOF