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 class L_HXBASIS HxRegData
00020 {
00021 public:
00022 HxRegData();
00023 HxRegData(HxString);
00024 HxRegData(int);
00025 HxRegData(const HxRegData&);
00026
00027 ~HxRegData();
00028
00029 HxRegData& operator=(const HxRegData&);
00030
00031 typedef enum { Int, String } RvType;
00032
00033 RvType type() const;
00034
00035 void setString(HxString);
00036 HxString getString() const;
00037
00038 void setInt(int);
00039 int getInt() const;
00040
00041 HxString toString() const;
00042
00043 STD_OSTREAM& put(STD_OSTREAM&, int cCode = 0) const;
00044
00045 private:
00046 RvType _type;
00047 union {
00048 char _str[sizeof(HxPnString)];
00049 int _int;
00050 } _val;
00051 };
00052
00053 inline HxString
00054 makeString(const HxRegData& data)
00055 {
00056 return data.toString();
00057 }
00058
00059 inline STD_OSTREAM&
00060 operator<<(STD_OSTREAM& os, const HxRegData& val)
00061 {
00062 return val.put(os);
00063 }
00064
00065 inline
00066 HxRegData::HxRegData()
00067 {
00068 _type = String;
00069 new((void*)&(_val._str[0])) HxPnString(HxString());
00070 }
00071
00072 inline
00073 HxRegData::HxRegData(HxString s)
00074 {
00075 _type = String;
00076 new((void*)&(_val._str[0])) HxPnString(s);
00077 }
00078
00079 inline
00080 HxRegData::HxRegData(int i)
00081 {
00082 _type = Int;
00083 _val._int = i;
00084 }
00085
00086 inline
00087 HxRegData::~HxRegData()
00088 {
00089 if (_type == String)
00090 ((HxPnString*)&(_val._str[0]))->~HxPnString();
00091 }
00092
00093 inline HxRegData::RvType
00094 HxRegData::type() const
00095 {
00096 return _type;
00097 }
00098
00099 inline void
00100 HxRegData::setString(HxString s)
00101 {
00102 if (_type == String)
00103 ((HxPnString*)&(_val._str[0]))->~HxPnString();
00104 new((void*)&(_val._str[0])) HxPnString(s);
00105 _type = String;
00106 }
00107
00108 inline HxString
00109 HxRegData::getString() const
00110 {
00111 return (_type == String) ?
00112 ((HxPnString*)&(_val._str[0]))->toString() :
00113 HxString();
00114 }
00115
00116 inline void
00117 HxRegData::setInt(int i)
00118 {
00119 if (_type == String)
00120 ((HxPnString*)&(_val._str[0]))->~HxPnString();
00121 _val._int = i;
00122 _type = Int;
00123 }
00124
00125 inline int
00126 HxRegData::getInt() const
00127 {
00128 return (_type == Int) ? _val._int : 0 ;
00129 }
00130
00131 #endif