NVIDIA IndeX: Base API nvidia_logo_transpbg.gif Up
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
uuid.h
Go to the documentation of this file.
1 /***************************************************************************************************
2  * Copyright 2020 NVIDIA Corporation. All rights reserved.
3  **************************************************************************************************/
8 
9 #ifndef MI_BASE_UUID_H
10 #define MI_BASE_UUID_H
11 
12 #include <mi/base/types.h>
13 
14 namespace mi {
15 namespace base {
16 
21 struct Uuid
26 {
31 };
32 
34 inline bool operator== ( const Uuid & id1, const Uuid & id2)
35 {
36  if( id1.m_id1 != id2.m_id1 ) return false;
37  if( id1.m_id2 != id2.m_id2 ) return false;
38  if( id1.m_id3 != id2.m_id3 ) return false;
39  if( id1.m_id4 != id2.m_id4 ) return false;
40  return true;
41 }
42 
44 inline bool operator!= ( const Uuid & id1, const Uuid & id2)
45 {
46  if( id1.m_id1 != id2.m_id1 ) return true;
47  if( id1.m_id2 != id2.m_id2 ) return true;
48  if( id1.m_id3 != id2.m_id3 ) return true;
49  if( id1.m_id4 != id2.m_id4 ) return true;
50  return false;
51 }
52 
54 inline bool operator< ( const Uuid & id1, const Uuid & id2)
55 {
56  if( id1.m_id1 < id2.m_id1 ) return true;
57  if( id1.m_id1 > id2.m_id1 ) return false;
58  if( id1.m_id2 < id2.m_id2 ) return true;
59  if( id1.m_id2 > id2.m_id2 ) return false;
60  if( id1.m_id3 < id2.m_id3 ) return true;
61  if( id1.m_id3 > id2.m_id3 ) return false;
62  if( id1.m_id4 < id2.m_id4 ) return true;
63  return false;
64 }
65 
67 inline bool operator > ( const Uuid & id1, const Uuid & id2) {
68  if( id1.m_id1 > id2.m_id1 ) return true;
69  if( id1.m_id1 < id2.m_id1 ) return false;
70  if( id1.m_id2 > id2.m_id2 ) return true;
71  if( id1.m_id2 < id2.m_id2 ) return false;
72  if( id1.m_id3 > id2.m_id3 ) return true;
73  if( id1.m_id3 < id2.m_id3 ) return false;
74  if( id1.m_id4 > id2.m_id4 ) return true;
75  return false;
76 }
77 
79 inline bool operator<= ( const Uuid & id1, const Uuid & id2)
80 {
81  return !(id1 > id2);
82 }
83 
85 inline bool operator >= ( const Uuid & id1, const Uuid & id2)
86 {
87  return !(id1 < id2);
88 }
89 
91 inline Uint32 uuid_hash32( const Uuid& id)
92 {
93  return id.m_id1 ^ id.m_id2 ^ id.m_id3 ^ id.m_id4;
94 }
95 
96 
118 template <Uint32 id1, Uint16 id2, Uint16 id3
119  , Uint8 id4, Uint8 id5, Uint8 id6, Uint8 id7
120  , Uint8 id8, Uint8 id9, Uint8 id10, Uint8 id11>
121 class Uuid_t
122 {
123 public:
128  operator const Uuid & () const
129  {
130  static const Uuid uuid = {m_id1, m_id2, m_id3, m_id4};
131  return uuid;
132  }
133 
135  static const Uint32 m_id1 = id1;
136 
138  static const Uint32 m_id2 = static_cast<Uint32>( id2 | (id3 << 16));
139 
141  static const Uint32 m_id3
142  = static_cast<Uint32>( id4 | (id5 << 8) | (id6 << 16) | (id7 << 24));
143 
145  static const Uint32 m_id4
146  = static_cast<Uint32>( id8 | (id9 << 8) | (id10 << 16) | (id11 << 24));
147 
149  static const Uint32 hash32 = m_id1 ^ m_id2 ^ m_id3 ^ m_id4;
150 };
151  // end group mi_base_iinterface
153 
154 } // namespace base
155 } // namespace mi
156 
157 #endif // MI_BASE_UUID_H