00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HxRegData_h
00012 #define HxRegData_h
00013
00014
00015 #include "HxIoFwd.h"
00016 #include "HxString.h"
00017 #include "HxPnString.h"
00018
00019
00022 class L_HXBASIS HxRegData
00023 {
00024 public:
00026 HxRegData();
00028 HxRegData(HxString);
00030 HxRegData(int);
00032 HxRegData(const HxRegData&);
00033
00035 ~HxRegData();
00036
00038 HxRegData& operator=(const HxRegData&);
00039
00041 typedef enum { Int, String } RvType;
00042
00044 RvType type() const;
00045
00047 void setString(HxString);
00049 HxString getString() const;
00050
00052 void setInt(int);
00054 int getInt() const;
00055
00057 HxString toString() const;
00058
00060 STD_OSTREAM& put(STD_OSTREAM&, int cCode = 0) const;
00061
00062 private:
00063 RvType _type;
00064 union {
00065 char _str[sizeof(HxPnString)];
00066 int _int;
00067 } _val;
00068 };
00069
00070 inline HxString
00071 makeString(const HxRegData& data)
00072 {
00073 return data.toString();
00074 }
00075
00076 inline STD_OSTREAM&
00077 operator<<(STD_OSTREAM& os, const HxRegData& val)
00078 {
00079 return val.put(os);
00080 }
00081
00082 inline
00083 HxRegData::HxRegData()
00084 {
00085 _type = String;
00086 new((void*)&(_val._str[0])) HxPnString(HxString());
00087 }
00088
00089 inline
00090 HxRegData::HxRegData(HxString s)
00091 {
00092 _type = String;
00093 new((void*)&(_val._str[0])) HxPnString(s);
00094 }
00095
00096 inline
00097 HxRegData::HxRegData(int i)
00098 {
00099 _type = Int;
00100 _val._int = i;
00101 }
00102
00103 inline
00104 HxRegData::~HxRegData()
00105 {
00106 if (_type == String)
00107 ((HxPnString*)&(_val._str[0]))->~HxPnString();
00108 }
00109
00110 inline HxRegData::RvType
00111 HxRegData::type() const
00112 {
00113 return _type;
00114 }
00115
00116 inline void
00117 HxRegData::setString(HxString s)
00118 {
00119 if (_type == String)
00120 ((HxPnString*)&(_val._str[0]))->~HxPnString();
00121 new((void*)&(_val._str[0])) HxPnString(s);
00122 _type = String;
00123 }
00124
00125 inline HxString
00126 HxRegData::getString() const
00127 {
00128 return (_type == String) ?
00129 ((HxPnString*)&(_val._str[0]))->toString() :
00130 HxString();
00131 }
00132
00133 inline void
00134 HxRegData::setInt(int i)
00135 {
00136 if (_type == String)
00137 ((HxPnString*)&(_val._str[0]))->~HxPnString();
00138 _val._int = i;
00139 _type = Int;
00140 }
00141
00142 inline int
00143 HxRegData::getInt() const
00144 {
00145 return (_type == Int) ? _val._int : 0 ;
00146 }
00147
00148 #endif