Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef GUIDWrapperH
00033 #define GUIDWrapperH
00034
00035 #include <zeusbase/System/Interfaces/IZUnknown.hpp>
00036 #include <zeusbase/System/String.h>
00037 #include <string.h>
00038
00039 #if defined(ENABLE_WIN32_BINDING)
00040
00041 #ifdef USE_WINDOWS_H
00042 #include <windows.h>
00043 #else
00044 #include <guiddef.h>
00045 #endif
00046
00047 #elif defined(ENABLE_LINUX_BINDING)
00048 #if defined(ENABLE_UUID)
00049 #include <uuid/uuid.h>
00050 #endif
00051 #endif
00052
00053
00054 BEGIN_NAMESPACE_Zeus
00055
00056 class TGUIDWrapper;
00057
00058 typedef TGUIDWrapper TIID;
00059
00060
00063
00064 zeusbase_class TGUIDWrapper
00065 {
00066 public:
00067 TGUIDWrapper();
00068 TGUIDWrapper(const TypGUID& rGUID);
00069
00070
00073
00074 inline TGUIDWrapper(const TGUIDWrapper& rGUIDWrapper)
00075 {
00076 m_GUID = rGUIDWrapper.m_GUID;
00077 }
00078
00079
00082
00083 inline TGUIDWrapper( Uint32 ulData1,
00084 Uint16 usData2,
00085 Uint16 usData3,
00086 Uint8 ucData4_1,
00087 Uint8 ucData4_2,
00088 Uint8 ucData4_3,
00089 Uint8 ucData4_4,
00090 Uint8 ucData4_5,
00091 Uint8 ucData4_6,
00092 Uint8 ucData4_7,
00093 Uint8 ucData4_8)
00094 {
00095 m_GUID.ulData1 = ulData1;
00096 m_GUID.usData2 = usData2;
00097 m_GUID.usData3 = usData3;
00098 m_GUID.aucData4[0] = ucData4_1;
00099 m_GUID.aucData4[1] = ucData4_2;
00100 m_GUID.aucData4[2] = ucData4_3;
00101 m_GUID.aucData4[3] = ucData4_4;
00102 m_GUID.aucData4[4] = ucData4_5;
00103 m_GUID.aucData4[5] = ucData4_6;
00104 m_GUID.aucData4[6] = ucData4_7;
00105 m_GUID.aucData4[7] = ucData4_8;
00106 }
00107
00108
00111
00112 inline virtual ~TGUIDWrapper() {}
00113
00114
00115 TString toString() const;
00116
00117
00118
00121
00122 inline bool isZero() const
00123 {
00124 TypGUID guidRef;
00125 #ifdef __BCPLUSPLUS__
00126 std::memset(&guidRef, 0x00, sizeof(TypGUID));
00127 return (std::memcmp(&m_GUID, &guidRef, sizeof(TypGUID)) == 0);
00128 #else
00129 memset(&guidRef, 0x00, sizeof(TypGUID));
00130 return (memcmp(&m_GUID, &guidRef, sizeof(TypGUID)) == 0);
00131 #endif
00132 }
00133
00134
00137
00138 inline TGUIDWrapper& operator=(const TypGUID& rGuid)
00139 {
00140 m_GUID = rGuid;
00141 return *this;
00142 }
00143
00144
00147
00148 inline TGUIDWrapper& operator=(const TGUIDWrapper& rGuidWrapper)
00149 {
00150 m_GUID = rGuidWrapper.m_GUID;
00151 return *this;
00152 }
00153
00154
00157
00158 inline operator const TypGUID& () const { return m_GUID; }
00159
00160
00163
00164 inline operator TypGUID& () { return m_GUID; }
00165
00166
00169
00170 inline const TypGUID* operator &() const { return &m_GUID; }
00171
00172
00175
00176 inline TypGUID* operator &() { return &m_GUID; }
00177
00178
00179
00180 static TGUIDWrapper createGUID();
00181 inline static TGUIDWrapper createZeroGUID() { return TGUIDWrapper(); }
00182
00183
00186
00187 inline static bool isEqual(const TypGUID& rID1, const TypGUID& rID2)
00188 {
00189 #ifdef __BCPLUSPLUS__
00190 bool bRetval = (std::memcmp(&rID1, &rID2, sizeof(TypGUID)) == 0);
00191 #else
00192 bool bRetval = (memcmp(&rID1, &rID2, sizeof(TypGUID)) == 0);
00193 #endif
00194 return bRetval;
00195 }
00196
00197
00200
00201 inline static bool isEqualInterface(const InterfaceID& rID1, const InterfaceID& rID2)
00202 {
00203 #ifdef __BCPLUSPLUS__
00204 bool bRetval = (std::memcmp(&rID1, &rID2, sizeof(InterfaceID)) == 0);
00205 #else
00206 bool bRetval = (memcmp(&rID1, &rID2, sizeof(InterfaceID)) == 0);
00207 #endif
00208 return bRetval;
00209 }
00210
00211
00214
00215 inline static bool isIZUnknown(const InterfaceID& rID1)
00216 {
00217 #ifdef __BCPLUSPLUS__
00218 bool bRetval = (std::memcmp(&rID1, &INTERFACE_IZUnknown, sizeof(InterfaceID)) == 0);
00219 #else
00220 bool bRetval = (memcmp(&rID1, &INTERFACE_IZUnknown, sizeof(InterfaceID)) == 0);
00221 #endif
00222 return bRetval;
00223 }
00224
00225
00228
00229 inline static TString toString(const InterfaceID& rID)
00230 {
00231 return TGUIDWrapper(rID).toString();
00232 }
00233
00234
00235
00236
00237 #ifdef ENABLE_WIN32_BINDING
00238
00241
00242 inline TGUIDWrapper(const GUID& rGUID) { assign(rGUID); }
00243
00244 void assign(const GUID& rGUID);
00245
00246 #elif defined(ENABLE_LINUX_BINDING) && defined(ENABLE_UUID)
00247
00250
00251 inline TGUIDWrapper(const uuid_t Guid) { assign(Guid); }
00252
00253 void assign(const uuid_t Guid);
00254 #endif
00255
00256 private:
00258 TypGUID m_GUID;
00259 };
00260
00261
00262
00265
00266 inline bool operator==(const TypGUID& rGUID1, const TypGUID& rGUID2)
00267 {
00268 return TGUIDWrapper::isEqualInterface(rGUID1, rGUID2);
00269 }
00270
00271
00274
00275 inline bool operator!=(const TypGUID& rGUID1, const TypGUID& rGUID2)
00276 {
00277 return !(rGUID1 == rGUID2);
00278 }
00279
00280
00283
00284 inline bool operator<(const TypGUID& rGUID1, const TypGUID& rGUID2)
00285 {
00286 #ifdef __BCPLUSPLUS__
00287 return (std::memcmp(&rGUID1, &rGUID2, sizeof(TypGUID)) < 0);
00288 #else
00289 return (memcmp(&rGUID1, &rGUID2, sizeof(TypGUID)) < 0);
00290 #endif
00291 }
00292
00293
00294 END_NAMESPACE_Zeus
00295 #endif