NVIDIA Iray: Math API Home  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 1986, 2016 NVIDIA Corporation. All rights reserved.
3 //*****************************************************************************
9 //*****************************************************************************
10 
11 #ifndef MI_BASE_UUID_H
12 #define MI_BASE_UUID_H
13 
14 #include <mi/base/types.h>
15 
16 namespace mi {
17 namespace base {
18 
23 struct Uuid
28 {
33 };
34 
36 inline bool operator == ( const Uuid & id1, const Uuid & id2) {
37  if( id1.m_id1 != id2.m_id1 ) return false;
38  if( id1.m_id2 != id2.m_id2 ) return false;
39  if( id1.m_id3 != id2.m_id3 ) return false;
40  if( id1.m_id4 != id2.m_id4 ) return false;
41  return true;
42 }
43 
45 inline bool operator != ( const Uuid & id1, const Uuid & id2) {
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  if( id1.m_id1 < id2.m_id1 ) return true;
56  if( id1.m_id1 > id2.m_id1 ) return false;
57  if( id1.m_id2 < id2.m_id2 ) return true;
58  if( id1.m_id2 > id2.m_id2 ) return false;
59  if( id1.m_id3 < id2.m_id3 ) return true;
60  if( id1.m_id3 > id2.m_id3 ) return false;
61  if( id1.m_id4 < id2.m_id4 ) return true;
62  return false;
63 }
64 
66 inline bool operator > ( const Uuid & id1, const Uuid & id2) {
67  if( id1.m_id1 > id2.m_id1 ) return true;
68  if( id1.m_id1 < id2.m_id1 ) return false;
69  if( id1.m_id2 > id2.m_id2 ) return true;
70  if( id1.m_id2 < id2.m_id2 ) return false;
71  if( id1.m_id3 > id2.m_id3 ) return true;
72  if( id1.m_id3 < id2.m_id3 ) return false;
73  if( id1.m_id4 > id2.m_id4 ) return true;
74  return false;
75 }
76 
78 inline bool operator <= ( const Uuid & id1, const Uuid & id2) {
79  return !(id1 > id2);
80 }
81 
83 inline bool operator >= ( const Uuid & id1, const Uuid & id2) {
84  return !(id1 < id2);
85 }
86 
88 inline Uint32 uuid_hash32( const Uuid& id) {
89  return id.m_id1 ^ id.m_id2 ^ id.m_id3 ^ id.m_id4;
90 }
91 
92 
114 template <Uint32 id1, Uint16 id2, Uint16 id3
115  , Uint8 id4, Uint8 id5, Uint8 id6, Uint8 id7
116  , Uint8 id8, Uint8 id9, Uint8 id10, Uint8 id11>
117 class Uuid_t
118 {
119 public:
124  operator const Uuid & () const
125  {
126  static const Uuid uuid = {m_id1, m_id2, m_id3, m_id4};
127  return uuid;
128  }
129 
131  static const Uint32 m_id1 = id1;
132 
134  static const Uint32 m_id2 = (Uint32) (id2 | (id3 << 16));
135 
137  static const Uint32 m_id3 = (Uint32) (id4 | (id5 << 8) | (id6 << 16) | (id7 << 24));
138 
140  static const Uint32 m_id4 = (Uint32) (id8 | (id9 << 8) | (id10 << 16) | (id11 << 24));
141 
143  static const Uint32 hash32 = m_id1 ^ m_id2 ^ m_id3 ^ m_id4;
144 };
145  // end group mi_base_iinterface
147 
148 } // namespace base
149 } // namespace mi
150 
151 #endif // MI_BASE_UUID_H