#include <UUID.h>
Collaboration diagram for ACE_Utils::UUID_Generator:

| Public Types | |
| typedef ACE_UINT64 | UUID_time | 
| enum | { ACE_UUID_CLOCK_SEQ_MASK = 0x3FFF } | 
| Public Member Functions | |
| UUID_Generator () | |
| ~UUID_Generator () | |
| void | init (void) | 
| void | generateUUID (UUID &, ACE_UINT16 version=0x0001, u_char variant=0x80) | 
| UUID * | generateUUID (ACE_UINT16 version=0x0001, u_char variant=0x80) | 
| ACE_SYNCH_MUTEX * | lock (void) | 
| void | lock (ACE_SYNCH_MUTEX *lock, bool release_lock) | 
| Set a new locking strategy and return the old one. | |
| Private Member Functions | |
| void | get_timestamp (UUID_time ×tamp) | 
| void | get_systemtime (UUID_time &timeNow) | 
| the Christian calendar). | |
| Private Attributes | |
| UUID_time | timeLast_ | 
| The system time when that last uuid was generated. | |
| UUID_State | uuid_state_ | 
| The UUID generator persistent state. | |
| ACE_SYNCH_MUTEX * | lock_ | 
| bool | destroy_lock_ | 
| 
 | 
| Type to represent UTC as a count of 100 nanosecond intervals since 00:00:00.00, 15 October 1582. Definition at line 184 of file UUID.h. Referenced by generateUUID(), get_systemtime(), and get_timestamp(). | 
| 
 | 
| 
 Definition at line 166 of file UUID.h. 
 00166 {ACE_UUID_CLOCK_SEQ_MASK = 0x3FFF};
 | 
| 
 | 
| 
 Definition at line 349 of file UUID.cpp. References ACE_NEW, and ACE_SYNCH_MUTEX. 
 00350 : timeLast_ (0), 00351 destroy_lock_ (true) 00352 { 00353 ACE_NEW (lock_, 00354 ACE_SYNCH_MUTEX); 00355 } | 
| 
 | 
| 
 Definition at line 357 of file UUID.cpp. References destroy_lock_. 
 00358   {
00359     if (destroy_lock_)
00360       delete lock_;
00361   }
 | 
| 
 | ||||||||||||
| Format timestamp, clockseq, and nodeID into a VI UUID. For generating UUID's with thread and process ids use variant=0xc0 Definition at line 448 of file UUID.cpp. References ACE_NEW_RETURN, and generateUUID(). 
 00449   {
00450     UUID* uuid;
00451     ACE_NEW_RETURN (uuid,
00452                     UUID,
00453                     0);
00454 
00455     this->generateUUID (*uuid, version, variant);
00456     return uuid;
00457   }
 | 
| 
 | ||||||||||||||||
| Format timestamp, clockseq, and nodeID into an UUID of the specified version and variant. For generating UUID's with thread and process ids use variant=0xc0 Definition at line 406 of file UUID.cpp. References ACE_GUARD, ACE_SYNCH_MUTEX, ACE_Utils::UUID::clockSeqHiAndReserved(), ACE_Utils::UUID::clockSeqLow(), ACE_Utils::UUID_Generator::UUID_State::clockSequence, get_timestamp(), ACE_Utils::UUID_Generator::UUID_State::node, ACE_Utils::UUID::node(), ACE_Utils::UUID::pid(), ACE_OS::sprintf(), ACE_Utils::UUID::thr_id(), ACE_Utils::UUID::timeHiAndVersion(), ACE_Utils::UUID::timeLow(), ACE_Utils::UUID::timeMid(), ACE_Utils::UUID_Generator::UUID_State::timestamp, ACE_Thread_ID::to_string(), uuid_state_, and UUID_time. Referenced by generateUUID(). 
 00407   {
00408     UUID_time timestamp;
00409     this->get_timestamp (timestamp);
00410 
00411 
00412     // Construct a Version 1 UUID with the information in the arguements.
00413     uuid.timeLow (static_cast<ACE_UINT32> (timestamp & 0xFFFFFFFF));
00414     uuid.timeMid (static_cast<ACE_UINT16> ((timestamp >> 32) & 0xFFFF));
00415 
00416 
00417     ACE_UINT16 tHAV = static_cast<ACE_UINT16> ((timestamp >> 48) & 0xFFFF);
00418     tHAV |= (version << 12);
00419     uuid.timeHiAndVersion (tHAV);
00420 
00421     u_char cseqHAV;
00422     {
00423       ACE_GUARD (ACE_SYNCH_MUTEX, mon, *lock_);
00424       uuid.clockSeqLow (static_cast<u_char> (uuid_state_.clockSequence & 0xFF));
00425       cseqHAV = static_cast<u_char> ((uuid_state_.clockSequence & 0x3f00) >> 8);
00426       uuid_state_.timestamp = timestamp;
00427     }
00428 
00429     cseqHAV |= variant;
00430     uuid.clockSeqHiAndReserved (cseqHAV);
00431     uuid.node (&(uuid_state_.node));
00432 
00433     if (variant == 0xc0)
00434     {
00435       ACE_Thread_ID thread_id;
00436       char buf [BUFSIZ];
00437       thread_id.to_string (buf);
00438       uuid.thr_id (buf);
00439 
00440       ACE_OS::sprintf (buf,
00441                        "%d",
00442                        static_cast<int> (ACE_OS::getpid ()));
00443       uuid.pid (buf);
00444     }
00445   }
 | 
| 
 | 
| the Christian calendar). Obtain the system time in UTC as a count of 100 nanosecond intervals since 00:00:00.00, 15 October 1582 (the date of Gregorian reform to Definition at line 493 of file UUID.cpp. References ACE_INT64_LITERAL, ACE_UINT64, ACE_UINT64_LITERAL, ACE_OS::gettimeofday(), ACE_Time_Value::to_usec(), and UUID_time. Referenced by get_timestamp(). 
 00494   {
00495     const UUID_time timeOffset =
00496 #if defined (ACE_LACKS_UNSIGNEDLONGLONG_T)
00497       ACE_U_LongLong (ACE_INT64_LITERAL (0x1B21DD213814000));
00498 #elif defined (ACE_LACKS_LONGLONG_T)
00499       ACE_U_LongLong (0x13814000u, 0x1B21DD2u);
00500 #else
00501       ACE_UINT64_LITERAL (0x1B21DD213814000);
00502 #endif  /* ACE_LACKS_UNSIGNEDLONGLONG_T */
00503 
00504     /// Get the time of day, convert to 100ns ticks then add the offset.
00505     ACE_Time_Value now = ACE_OS::gettimeofday();
00506     ACE_UINT64 time;
00507     now.to_usec (time);
00508     time = time * 10;
00509     timestamp = time + timeOffset;
00510 }
 | 
| 
 | 
| Obtain a UUID timestamp. Compensate for the fact that the time obtained from getSystem time has a resolution less than 100ns. Definition at line 462 of file UUID.cpp. References ACE_GUARD, ACE_SYNCH_MUTEX, ACE_UUID_CLOCK_SEQ_MASK, ACE_Utils::UUID_Generator::UUID_State::clockSequence, get_systemtime(), timeLast_, uuid_state_, and UUID_time. Referenced by generateUUID(), and init(). 
 00463   {
00464     ACE_GUARD (ACE_SYNCH_MUTEX, mon, *lock_);
00465 
00466     this->get_systemtime(timestamp);
00467 
00468     // Account for the clock being set back. Increment the clock /
00469     // sequence.
00470     if (timestamp <= timeLast_)
00471       uuid_state_.clockSequence = static_cast<u_char> ((uuid_state_.clockSequence + 1) & ACE_UUID_CLOCK_SEQ_MASK);
00472 
00473     // If the system time ticked since the last UUID was
00474     // generated. Set / the clock sequence back.
00475     else if (timestamp > timeLast_)
00476       uuid_state_.clockSequence = 0;
00477 
00478     timeLast_ = timestamp;
00479   }
 | 
| 
 | 
| 
 Definition at line 364 of file UUID.cpp. References ACE_GUARD, ACE_SYNCH_MUTEX, get_timestamp(), ACE_OS::getmacaddress(), ACE_OS::memcpy(), ACE_Utils::UUID_Generator::UUID_State::node, ACE_OS::macaddr_node_t::node, ACE_Utils::UUID_node::nodeID(), ACE_Utils::UUID_node::NodeID, ACE_OS::rand(), timeLast_, ACE_Utils::UUID_Generator::UUID_State::timestamp, and uuid_state_. 
 00365   {
00366     ACE_OS::macaddr_node_t macaddress;
00367     int result = ACE_OS::getmacaddress (&macaddress);
00368 
00369     UUID_node::NodeID nodeID;
00370     if (result != -1)
00371       {
00372 //         ACE_DEBUG ((LM_DEBUG,
00373 //                     "%02X-%02X-%02X-%02X-%02X-%02X\n",
00374 //                     macaddress.node [0],
00375 //                     macaddress.node [1],
00376 //                     macaddress.node [2],
00377 //                     macaddress.node [3],
00378 //                     macaddress.node [4],
00379 //                     macaddress.node [5]));
00380 
00381         ACE_OS::memcpy (&nodeID,
00382                         macaddress.node,
00383                         sizeof (nodeID));
00384       }
00385     else
00386       {
00387         nodeID [0] = static_cast<u_char> (ACE_OS::rand());
00388         nodeID [1] = static_cast<u_char> (ACE_OS::rand());
00389         nodeID [2] = static_cast<u_char> (ACE_OS::rand());
00390         nodeID [3] = static_cast<u_char> (ACE_OS::rand());
00391         nodeID [4] = static_cast<u_char> (ACE_OS::rand());
00392         nodeID [5] = static_cast<u_char> (ACE_OS::rand());
00393       }
00394 
00395     this->get_timestamp (timeLast_);
00396 
00397     {
00398       ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, *lock_);
00399       uuid_state_.timestamp = timeLast_;
00400       uuid_state_.node.nodeID (nodeID);
00401     }
00402   }
 | 
| 
 | ||||||||||||
| Set a new locking strategy and return the old one. 
 Definition at line 519 of file UUID.cpp. References destroy_lock_. 
 00521   {
00522     if (this->destroy_lock_)
00523       delete this->lock_;
00524 
00525     this->lock_ = lock;
00526     this->destroy_lock_ = release_lock;
00527   }
 | 
| 
 | 
| The locking strategy prevents multiple generators from accessing the UUID_state at the same time. Get the locking strategy. Definition at line 513 of file UUID.cpp. 
 00514   {
00515     return this->lock_;
00516   }
 | 
| 
 | 
| 
 Definition at line 221 of file UUID.h. Referenced by lock(), and ~UUID_Generator(). | 
| 
 | 
| 
 | 
| 
 | 
| The system time when that last uuid was generated. 
 Definition at line 197 of file UUID.h. Referenced by get_timestamp(), and init(). | 
| 
 | 
| The UUID generator persistent state. 
 Definition at line 218 of file UUID.h. Referenced by generateUUID(), get_timestamp(), and init(). | 
 1.3.6
 
1.3.6