Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TUUID.h
Go to the documentation of this file.
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 #include "Rtypes.h"
34 
35 // forward declaration
36 class TBuffer;
37 class TFile;
38 class TDirectory;
39 class TInetAddress;
40 class TDatime;
41 
42 class TUUID {
43 
44 protected:
45  UInt_t fUUIDIndex; //!index in the list of UUIDs in TProcessUUID
46  UInt_t fTimeLow; // 60 bit time, lower 32 bits
47  UShort_t fTimeMid; // middle 16 time bits
48  UShort_t fTimeHiAndVersion; // high 12 time bits + 4 UUID version bits
49  UChar_t fClockSeqHiAndReserved; // high 6 clock bits + 2 bits reserved
50  UChar_t fClockSeqLow; // low 8 clock bits
51  UChar_t fNode[6]; // 6 node id bytes
52 
53  struct uuid_time_t {
54  UInt_t high;
55  UInt_t low;
56  };
57 
58  Int_t CmpTime(uuid_time_t *t1, uuid_time_t *t2);
59  void Format(UShort_t clockseq, uuid_time_t ts);
60  void GetNodeIdentifier();
61  void GetCurrentTime(uuid_time_t *timestamp);
62  void GetSystemTime(uuid_time_t *timestamp);
63  void GetRandomInfo(UChar_t seed[16]);
64  void SetFromString(const char *uuid_str);
65 
66 public:
67  TUUID();
68  TUUID(const char *uuid_str);
69  virtual ~TUUID();
70 
71  const char *AsString() const;
72  Int_t Compare(const TUUID &u) const;
73  UShort_t Hash() const;
74  void Print() const;
75  TInetAddress GetHostAddress() const;
76  TDatime GetTime() const;
77  void GetUUID(UChar_t uuid[16]) const;
78  void SetUUID(const char *uuid_str);
79  UInt_t GetUUIDNumber() const { return fUUIDIndex; }
80  void SetUUIDNumber(UInt_t index) { fUUIDIndex = index; }
81 
82  void StreamerV1(TBuffer &b);
83  void FillBuffer(char *&buffer);
84  void ReadBuffer(char *&buffer);
85  Int_t Sizeof() const { return 18; }
86 
87  ClassDef(TUUID,1) // Universally Unique IDentifier
88 };
89 
90 
91 inline TBuffer &operator>>(TBuffer &buf, TUUID &uuid)
92 { uuid.Streamer(buf); return buf; }
93 
94 // Not inlined in order to avoid const casted away warning in user code.
95 TBuffer &operator<<(TBuffer &buf, const TUUID &uuid);
96 
97 inline Bool_t operator==(const TUUID &u1, const TUUID &u2)
98 { return (!u1.Compare(u2)) ? kTRUE : kFALSE; }
99 
100 inline Bool_t operator!=(const TUUID &u1, const TUUID &u2)
101 { return !(u1 == u2); }
102 
103 
104 #endif