Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's 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 
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

Generated on Tue Feb 3 14:18:41 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001