Main Page   Class Overview   Pixels   Images   Geometry   Quick Index  

HxRegData.h

00001 /*
00002  *  Copyright (c) 1998, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *
00006  *  Author(s):
00007  *  Dennis Koelma (koelma@wins.uva.nl)
00008  *  Edo Poll (poll@wins.uva.nl)
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

Generated on Tue Jan 8 13:59:15 2002 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001