summaryrefslogtreecommitdiff
path: root/library/quuid.cpp
Side-by-side diff
Diffstat (limited to 'library/quuid.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/quuid.cpp133
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
@@ -48,58 +48,67 @@
/*!
\fn QUuid::QUuid( const QUuid &orig )
Creates a copy of the QUuid \a orig.
*/
+
#ifndef QT_NO_QUUID_STRING
+
/*!
Creates a QUuid object from the string \a text. Right now, the function
can only convert the format {12345678-1234-1234-1234-123456789ABC} and
will create the null UUID when the conversion fails.
*/
QUuid::QUuid( const QString &text )
{
bool ok;
QString temp = text.upper();
data1 = temp.mid( 1, 8 ).toULong( &ok, 16 );
- if ( !ok ) {
- *this = QUuid();
- return;
+ if ( !ok )
+ {
+ *this = QUuid();
+ return;
}
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
+
/*!
\fn QUuid QUuid::operator=(const QUuid &uuid )
Assigns the value of \a uuid to this QUuid object.
*/
@@ -111,13 +120,13 @@ QUuid::QUuid( const QString &text )
/*!
\fn bool QUuid::operator!=(const QUuid &other) const
Returns TRUE if this QUuid and the \a other QUuid are different, otherwise returns FALSE.
*/
-#ifndef QT_NO_QUUID_STRING
+
/*!
QString QUuid::toString() const
Returns a string in {12345678-1234-1234-1234-123456789ABC} format.
*/
QString QUuid::toString() const
@@ -127,20 +136,92 @@ QString QUuid::toString() const
result = "{" + QString::number( data1, 16 ).rightJustify( 8, '0' ) + "-";
result += QString::number( (int)data2, 16 ).rightJustify( 4, '0' ) + "-";
result += QString::number( (int)data3, 16 ).rightJustify( 4, '0' ) + "-";
result += QString::number( (int)data4[0], 16 ).rightJustify( 2, '0' );
result += QString::number( (int)data4[1], 16 ).rightJustify( 2, '0' ) + "-";
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' );
return result + "}";
}
#endif
+
/*!
Returns TRUE if this is the null UUID {00000000-0000-0000-0000-000000000000}, otherwise returns FALSE.
*/
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;
}