From a1ef1c3fe8700a16329358288299276fd16c8fa0 Mon Sep 17 00:00:00 2001 From: ar Date: Sun, 06 Jun 2004 19:43:58 +0000 Subject: - solve problems with padded memory - dont use memcpy --- (limited to 'library/quuid.h') diff --git a/library/quuid.h b/library/quuid.h index 841a00f..1575711 100644 --- a/library/quuid.h +++ b/library/quuid.h @@ -25,49 +25,45 @@ #include #endif // QT_H -#include - -#if defined(Q_OS_WIN32) -#ifndef GUID_DEFINED -#define GUID_DEFINED -typedef struct _GUID -{ - ulong Data1; - ushort Data2; - ushort Data3; - uchar Data4[ 8 ]; -} GUID; -#endif -#endif - -#if defined( Q_WS_QWS ) && !defined( UUID_H_INCLUDED ) -typedef unsigned char uuid_t[16]; -#endif - struct Q_EXPORT QUuid { + enum Variant { + VarUnknown =-1, + NCS = 0, // 0 - - + DCE = 2, // 1 0 - + Microsoft = 6, // 1 1 0 + Reserved = 7 // 1 1 1 + }; + QUuid() { - memset( this, 0, sizeof(QUuid) ); + memset( this, 0, sizeof(QUuid) ); } QUuid( uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8 ) { - data1 = l; - data2 = w1; - data3 = w2; - data4[0] = b1; - data4[1] = b2; - data4[2] = b3; - data4[3] = b4; - data4[4] = b5; - data4[5] = b6; - data4[6] = b7; - data4[7] = b8; + data1 = l; + data2 = w1; + data3 = w2; + data4[0] = b1; + data4[1] = b2; + data4[2] = b3; + data4[3] = b4; + data4[4] = b5; + data4[5] = b6; + data4[6] = b7; + data4[7] = b8; } QUuid( const QUuid &uuid ) { - memcpy( this, &uuid, sizeof(QUuid) ); + uint i; + + data1 = uuid.data1; + data2 = uuid.data2; + data3 = uuid.data3; + for( i = 0; i < 8; i++ ) + data4[ i ] = uuid.data4[ i ]; } + #ifndef QT_NO_QUUID_STRING QUuid( const QString & ); QString toString() const; @@ -76,84 +72,41 @@ struct Q_EXPORT QUuid QUuid &operator=(const QUuid &orig ) { - memcpy( this, &orig, sizeof(QUuid) ); - return *this; - } + uint i; - bool operator==(const QUuid &orig ) const - { - return !memcmp( this, &orig, sizeof(QUuid) ); - } + data1 = orig.data1; + data2 = orig.data2; + data3 = orig.data3; + for( i = 0; i < 8; i++ ) + data4[ i ] = orig.data4[ i ]; - bool operator!=(const QUuid &orig ) const - { - return !( *this == orig ); + return *this; } - inline bool operator<(const QUuid &orig) const - { - return ( memcmp(this, &orig, sizeof(QUuid)) < 0); - } - - inline bool operator>(const QUuid &orig) const - { - return ( memcmp(this, &orig, sizeof(QUuid) ) > 0); - } - -#if defined(Q_OS_WIN32) - // On Windows we have a type GUID that is used by the platform API, so we - // provide convenience operators to cast from and to this type. - QUuid( const GUID &guid ) + bool operator==(const QUuid &orig ) const { - memcpy( this, &guid, sizeof(GUID) ); - } + uint i; + if ( data1 != orig.data1 || data2 != orig.data2 || + data3 != orig.data3 ) + return FALSE; - QUuid &operator=(const GUID &orig ) - { - memcpy( this, &orig, sizeof(QUuid) ); - return *this; - } + for( i = 0; i < 8; i++ ) + if ( data4[i] != orig.data4[i] ) + return FALSE; - operator GUID() const - { - GUID guid = { data1, data2, data3, { data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], data4[6], data4[7] } }; - return guid; + return TRUE; } - bool operator==( const GUID &guid ) const + bool operator!=(const QUuid &orig ) const { - return !memcmp( this, &guid, sizeof(QUuid) ); + return !( *this == orig ); } - bool operator!=( const GUID &guid ) const - { - return !( *this == guid ); - } - - inline bool operator<(const QUuid &orig) const - { - return ( memcmp(this, &orig, sizeof(QUuid) ) < 0); - } - - inline bool operator>(const QUuid &orig) const - { - return ( memcmp(this, &orig, sizeof(QUuid) ) > 0); - } - -#endif -#if defined (Q_WS_QWS) - QUuid( uuid_t uuid ) - { - memcpy( this, uuid, sizeof(uuid_t) ); - } + bool operator<(const QUuid &other ) const; + bool operator>(const QUuid &other ) const; + + QUuid::Variant variant() const; - QUuid &operator=(const uuid_t &orig ) - { - memcpy( this, &orig, sizeof(uuid_t) ); - return *this; - } -#endif - ulong data1; ushort data2; ushort data3; -- cgit v0.9.0.2