-rw-r--r-- | library/quuid.cpp | 133 |
1 files changed, 107 insertions, 26 deletions
diff --git a/library/quuid.cpp b/library/quuid.cpp index 46fd816..36469a8 100644 --- a/library/quuid.cpp +++ b/library/quuid.cpp @@ -53,3 +53,5 @@ */ + #ifndef QT_NO_QUUID_STRING + /*! @@ -65,5 +67,6 @@ QUuid::QUuid( const QString &text ) data1 = temp.mid( 1, 8 ).toULong( &ok, 16 ); - if ( !ok ) { - *this = QUuid(); - return; + if ( !ok ) + { + *this = QUuid(); + return; } @@ -71,30 +74,36 @@ QUuid::QUuid( const QString &text ) data2 = temp.mid( 10, 4 ).toUInt( &ok, 16 ); - if ( !ok ) { - *this = QUuid(); - return; + if ( !ok ) + { + *this = QUuid(); + return; } data3 = temp.mid( 15, 4 ).toUInt( &ok, 16 ); - if ( !ok ) { - *this = QUuid(); - return; + if ( !ok ) + { + *this = QUuid(); + return; } data4[0] = temp.mid( 20, 2 ).toUInt( &ok, 16 ); - if ( !ok ) { - *this = QUuid(); - return; + if ( !ok ) + { + *this = QUuid(); + return; } data4[1] = temp.mid( 22, 2 ).toUInt( &ok, 16 ); - if ( !ok ) { - *this = QUuid(); - return; + if ( !ok ) + { + *this = QUuid(); + return; } - for ( int i = 2; i<8; i++ ) { - data4[i] = temp.mid( 25 + (i-2)*2, 2 ).toUShort( &ok, 16 ); - if ( !ok ) { - *this = QUuid(); - return; - } + for ( int i = 2; i<8; i++ ) + { + data4[i] = temp.mid( 25 + (i-2)*2, 2 ).toUShort( &ok, 16 ); + if ( !ok ) + { + *this = QUuid(); + return; + } } } -#endif + /*! @@ -116,3 +125,3 @@ QUuid::QUuid( const QString &text ) */ -#ifndef QT_NO_QUUID_STRING + /*! @@ -132,3 +141,3 @@ QString QUuid::toString() const for ( int i = 2; i < 8; i++ ) - result += QString::number( (int)data4[i], 16 ).rightJustify( 2, '0' ); + result += QString::number( (int)data4[i], 16 ).rightJustify( 2, '0' ); @@ -137,2 +146,3 @@ QString QUuid::toString() const #endif + /*! @@ -143,4 +153,75 @@ bool QUuid::isNull() const return data4[0] == 0 && data4[1] == 0 && data4[2] == 0 && data4[3] == 0 && - data4[4] == 0 && data4[5] == 0 && data4[6] == 0 && data4[7] == 0 && - data1 == 0 && data2 == 0 && data3 == 0; + data4[4] == 0 && data4[5] == 0 && data4[6] == 0 && data4[7] == 0 && + data1 == 0 && data2 == 0 && data3 == 0; +} + + +/*! + \fn QUuid::Variant QUuid::variant() const + + Returns the variant of the UUID. + The null UUID is considered to be of an unknown variant. + + \sa version() +*/ +QUuid::Variant QUuid::variant() const +{ + if ( isNull() ) + return VarUnknown; + // Check the 3 MSB of data4[0] + if ( (data4[0] & 0x80) == 0x00 ) return NCS; + else if ( (data4[0] & 0xC0) == 0x80 ) return DCE; + else if ( (data4[0] & 0xE0) == 0xC0 ) return Microsoft; + else if ( (data4[0] & 0xE0) == 0xE0 ) return Reserved; + return VarUnknown; +} + +/*! + \fn bool QUuid::operator<(const QUuid &other) const + + Returns TRUE if this QUuid is of the same variant, + and lexicographically before the \a other QUuid; + otherwise returns FALSE. + + \sa variant() +*/ +#define ISLESS(f1, f2) if (f1!=f2) return (f1<f2); +bool QUuid::operator<(const QUuid &other ) const +{ + if ( variant() != other.variant() ) + return FALSE; + + ISLESS( data1, other.data1 ); + ISLESS( data2, other.data2 ); + ISLESS( data3, other.data3 ); + for ( int n = 0; n < 8; n++ ) + { + ISLESS( data4[n], other.data4[n] ); + } + return FALSE; +} + +/*! + \fn bool QUuid::operator>(const QUuid &other) const + + Returns TRUE if this QUuid is of the same variant, + and lexicographically after the \a other QUuid; + otherwise returns FALSE. + + \sa variant() +*/ +#define ISMORE(f1, f2) if (f1!=f2) return (f1>f2); +bool QUuid::operator>(const QUuid &other ) const +{ + if ( variant() != other.variant() ) + return FALSE; + + ISMORE( data1, other.data1 ); + ISMORE( data2, other.data2 ); + ISMORE( data3, other.data3 ); + for ( int n = 0; n < 8; n++ ) + { + ISMORE( data4[n], other.data4[n] ); + } + return FALSE; } |