You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2007/08/06 17:14:17 UTC

svn commit: r563167 - /activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/util/UUID.cpp

Author: tabish
Date: Mon Aug  6 08:14:16 2007
New Revision: 563167

URL: http://svn.apache.org/viewvc?view=rev&rev=563167
Log:
http://issues.apache.org/activemq/browse/AMQCPP-103

Implementing the UUID object

Modified:
    activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/util/UUID.cpp

Modified: activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/util/UUID.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/util/UUID.cpp?view=diff&rev=563167&r1=563166&r2=563167
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/util/UUID.cpp (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/util/UUID.cpp Mon Aug  6 08:14:16 2007
@@ -28,8 +28,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 UUID::UUID( long long mostSigBits, long long leastSigBits ) {
 
-    memcpy( &apr_uuid.data[0], &leastSigBits, sizeof( long long ) );
-    memcpy( &apr_uuid.data[sizeof(long long)], &mostSigBits, sizeof(long long ) );
+    memcpy( &apr_uuid.data[0], &mostSigBits, sizeof( long long ) );
+    memcpy( &apr_uuid.data[sizeof(long long)], &leastSigBits, sizeof(long long ) );
 
     this->mostSigBits = mostSigBits;
     this->leastSigBits = leastSigBits;
@@ -73,16 +73,14 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 long long UUID::getLeastSignificantBits() const {
-    long long result = 0;
-    memcpy( &result, &this->apr_uuid.data[0], sizeof(long long) );
-    return result;
+    return this->leastSigBits;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 long long UUID::getMostSignificantBits() const {
     long long result = 0;
     memcpy( &result, &this->apr_uuid.data[sizeof(long long)], sizeof(long long) );
-    return result;
+    return this->mostSigBits;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -154,19 +152,30 @@
     // Generate some random bytes.
     apr_uuid_get( &temp );
 
-    long long mostSigBits = 0;
-    long long leastSigBits = 0;
-
-    // Extract to data from the uuid data
-    memcpy( &leastSigBits, &temp.data[0], sizeof(long long) );
-    memcpy( &mostSigBits, &temp.data[sizeof(long long)], sizeof(long long) );
+    long long msb = 0;
+    long long lsb = 0;
 
-    // Set the variant and version fields, could compact but want to be clear
-    // on what is being set.
-    mostSigBits &= ( 0xFFFFFFFFFFFF0FFFULL | ( 0x4ULL << 12 ) );
-    leastSigBits &= ( 0x3FFFFFFFFFFFFFFFULL | ( 0x2ULL << 62 ) );
+    msb = (temp.data[0] & 0xFFLL) << 56;
+    msb |= (temp.data[1] & 0xFFLL) << 48;
+    msb |= (temp.data[2] & 0xFFLL) << 40;
+    msb |= (temp.data[3] & 0xFFLL) << 32;
+    msb |= (temp.data[4] & 0xFFLL) << 24;
+    msb |= (temp.data[5] & 0xFFLL) << 16;
+    msb |= (temp.data[6] & 0x0FLL) << 8;
+    msb |= (0x4LL << 12); // set the version to 4
+    msb |= (temp.data[7] & 0xFFLL);
+
+    lsb = (temp.data[8] & 0x3FLL) << 56;
+    lsb |= (0x2LL << 62); // set the variant to bits 01
+    lsb |= (temp.data[9] & 0xFFLL) << 48;
+    lsb |= (temp.data[10] & 0xFFLL) << 40;
+    lsb |= (temp.data[11] & 0xFFLL) << 32;
+    lsb |= (temp.data[12] & 0xFFLL) << 24;
+    lsb |= (temp.data[13] & 0xFFLL) << 16;
+    lsb |= (temp.data[14] & 0xFFLL) << 8;
+    lsb |= (temp.data[15] & 0xFFLL);
 
-    return UUID( mostSigBits, leastSigBits );
+    return UUID( msb, lsb );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -180,19 +189,30 @@
             "UUID::nameUUIDFromBytes - Failed to run MD5 encoder." );
     }
 
-    long long mostSigBits = 0;
-    long long leastSigBits = 0;
-
-    // Extract to data from the uuid data
-    memcpy( &leastSigBits, &temp.data[0], sizeof(long long) );
-    memcpy( &mostSigBits, &temp.data[sizeof(long long)], sizeof(long long) );
+    long long msb = 0;
+    long long lsb = 0;
 
-    // Set the variant and version fields, could compact but want to be clear
-    // on what is being set.
-    mostSigBits &= ( 0xFFFFFFFFFFFF0FFFULL | ( 0x3ULL << 12 ) );
-    leastSigBits &= ( 0x3FFFFFFFFFFFFFFFULL | ( 0x2ULL << 62 ) );
+    msb = (temp.data[0] & 0xFFLL) << 56;
+    msb |= (temp.data[1] & 0xFFLL) << 48;
+    msb |= (temp.data[2] & 0xFFLL) << 40;
+    msb |= (temp.data[3] & 0xFFLL) << 32;
+    msb |= (temp.data[4] & 0xFFLL) << 24;
+    msb |= (temp.data[5] & 0xFFLL) << 16;
+    msb |= (temp.data[6] & 0x0FLL) << 8;
+    msb |= (0x3LL << 12); // set the version to 3
+    msb |= (temp.data[7] & 0xFFLL);
+
+    lsb = (temp.data[8] & 0x3FLL) << 56;
+    lsb |= (0x2LL << 62); // set the variant to bits 01
+    lsb |= (temp.data[9] & 0xFFLL) << 48;
+    lsb |= (temp.data[10] & 0xFFLL) << 40;
+    lsb |= (temp.data[11] & 0xFFLL) << 32;
+    lsb |= (temp.data[12] & 0xFFLL) << 24;
+    lsb |= (temp.data[13] & 0xFFLL) << 16;
+    lsb |= (temp.data[14] & 0xFFLL) << 8;
+    lsb |= (temp.data[15] & 0xFFLL);
 
-    return UUID( mostSigBits, leastSigBits );
+    return UUID( msb, lsb );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -212,8 +232,8 @@
     long long leastSigBits = 0;
 
     // Extract to data from the uuid data
-    memcpy( &leastSigBits, &temp.data[0], sizeof(long long) );
-    memcpy( &mostSigBits, &temp.data[sizeof(long long)], sizeof(long long) );
+    memcpy( &mostSigBits, &temp.data[0], sizeof(long long) );
+    memcpy( &leastSigBits, &temp.data[sizeof(long long)], sizeof(long long) );
 
     return UUID( mostSigBits, leastSigBits );
 }