1 // @(#)root/base:$Id$ 2 // Author: Fons Rademakers 30/9/2001 3 4 /************************************************************************* 5 * Copyright (C) 1995-2001, Rene Brun and Fons Rademakers. * 6 * All rights reserved. * 7 * * 8 * For the licensing terms see $ROOTSYS/LICENSE. * 9 * For the list of contributors see $ROOTSYS/README/CREDITS. * 10 *************************************************************************/ 11 12 #ifndef ROOT_TUUID 13 #define ROOT_TUUID 14 15 ////////////////////////////////////////////////////////////////////////// 16 // // 17 // TUUID // 18 // // 19 // This class defines a UUID (Universally Unique IDentifier), also // 20 // known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits // 21 // long, and if generated according to this algorithm, is either // 22 // guaranteed to be different from all other UUIDs/GUIDs generated // 23 // until 3400 A.D. or extremely likely to be different. UUIDs were // 24 // originally used in the Network Computing System (NCS) and // 25 // later in the Open Software Foundation's (OSF) Distributed Computing // 26 // Environment (DCE). // 27 // // 28 ////////////////////////////////////////////////////////////////////////// 29 30 #ifdef WIN32 31 #undef GetCurrentTime 32 #endif 33 #ifndef ROOT_Rtypes 34 #include "Rtypes.h" 35 #endif 36 37 // forward declaration 38 class TBuffer; 39 class TFile; 40 class TDirectory; 41 class TInetAddress; 42 class TDatime; 43 44 class TUUID { 45 46 protected: 47 UInt_t fUUIDIndex; //!index in the list of UUIDs in TProcessUUID 48 UInt_t fTimeLow; // 60 bit time, lower 32 bits 49 UShort_t fTimeMid; // middle 16 time bits 50 UShort_t fTimeHiAndVersion; // high 12 time bits + 4 UUID version bits 51 UChar_t fClockSeqHiAndReserved; // high 6 clock bits + 2 bits reserved 52 UChar_t fClockSeqLow; // low 8 clock bits 53 UChar_t fNode[6]; // 6 node id bytes 54 55 struct uuid_time_t { 56 UInt_t high; 57 UInt_t low; 58 }; 59 60 Int_t CmpTime(uuid_time_t *t1, uuid_time_t *t2); 61 void Format(UShort_t clockseq, uuid_time_t ts); 62 void GetNodeIdentifier(); 63 void GetCurrentTime(uuid_time_t *timestamp); 64 void GetSystemTime(uuid_time_t *timestamp); 65 void GetRandomInfo(UChar_t seed[16]); 66 void SetFromString(const char *uuid_str); 67 68 public: 69 TUUID(); 70 TUUID(const char *uuid_str); 71 virtual ~TUUID(); 72 73 const char *AsString() const; 74 Int_t Compare(const TUUID &u) const; 75 UShort_t Hash() const; 76 void Print() const; 77 TInetAddress GetHostAddress() const; 78 TDatime GetTime() const; 79 void GetUUID(UChar_t uuid[16]) const; 80 void SetUUID(const char *uuid_str); 81 UInt_t GetUUIDNumber() const { return fUUIDIndex; } 82 void SetUUIDNumber(UInt_t index) { fUUIDIndex = index; } 83 84 void StreamerV1(TBuffer &b); 85 void FillBuffer(char *&buffer); 86 void ReadBuffer(char *&buffer); 87 Int_t Sizeof() const { return 18; } 88 89 ClassDef(TUUID,1) // Universally Unique IDentifier 90 }; 91 92 93 inline TBuffer &operator>>(TBuffer &buf, TUUID &uuid) 94 { uuid.Streamer(buf); return buf; } 95 96 // Not inlined in order to avoid const casted away warning in user code. 97 TBuffer &operator<<(TBuffer &buf, const TUUID &uuid); 98 99 inline Bool_t operator==(const TUUID &u1, const TUUID &u2) 100 { return (!u1.Compare(u2)) ? kTRUE : kFALSE; } 101 102 inline Bool_t operator!=(const TUUID &u1, const TUUID &u2) 103 { return !(u1 == u2); } 104 105 106 #endif 107