00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef INC_MI32_HTMLENUM_H
00015 #define INC_MI32_HTMLENUM_H
00016
00017 namespace HTML {
00018
00022 template<typename _ET> class ENUM {
00023 public:
00024
00025 struct BINDING {
00026 const char* name;
00027 _ET val;
00028 };
00029
00031 ENUM() :
00032 m_Value(static_cast<_ET>(0)),
00033 m_bSet(false)
00034 { }
00035
00037 ENUM(_ET val) :
00038 m_Value(val),
00039 m_bSet(true)
00040 { }
00041
00043 ENUM(const ENUM<_ET>& rhs) :
00044 m_Value(rhs.m_Value),
00045 m_bSet(rhs.m_bSet)
00046 { }
00047
00049 operator _ET (
00050 ) const { return (m_Value); }
00051
00053 ENUM<_ET>& operator=(_ET val) {
00054 m_Value = val;
00055 m_bSet = true;
00056 return (*this);
00057 }
00058
00060 void Clear() {
00061 m_bSet = false;
00062 }
00063
00065 _ET GetValue (
00066 ) const { return (m_Value); }
00067
00069 bool IsSet (
00070 ) const { return (m_bSet); }
00071
00075 void Combine (
00076 const ENUM<_ET>& rhs
00077 ) {
00078 if (rhs.m_bSet) {
00079 m_Value = rhs.m_Value;
00080 m_bSet = true;
00081 }
00082 }
00083
00088 bool Parse (
00089 const char* str,
00090 const BINDING* bindings,
00091 bool bClearIfNotFound = true
00092 ) {
00093 for (int i = 0 ; bindings[i].name != 0 ; ++i) {
00094 #ifdef WIN32
00095 if (!_stricmp(bindings[i].name, str))
00096 #else
00097 if (!stricmp(bindings[i].name, str))
00098 #endif
00099 {
00100 *this = bindings[i].val;
00101 return (true);
00102 }
00103 }
00104 if (bClearIfNotFound) Clear();
00105 return (false);
00106 }
00107
00108 #ifndef GENERATING_DOXYGEN_OUTPUT
00109 private:
00110 _ET m_Value;
00111 bool m_bSet;
00112 #endif
00113 };
00114
00115
00116 }
00117
00118
00119 #endif
00120