OpenLexocad  27.1
GUID.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Base/String.h>
4 
5 #include "base_defines.h"
6 
7 class QUuid;
8 
9 namespace Base
10 {
12 // //
13 // --------------------- BEGIN API --------------------- //
14 // //
15 // ATTENTION: DO NOT CHANGE ANY SIGNATURES IN THE API ! //
16 // //
18 
19 class LX_BASE_EXPORT GUID_Policy
20 {
21 public:
24  enum Policy
25  {
26  COPY, // A copy of the object is created with a new GUID
27  REPLACE, // The object with this GUID is replaced
28  REJECT // No replacement and no copying is done. The operation is rejected.
29  };
30 
31  GUID_Policy::GUID_Policy() { on_GUID_conflict = GUID_Policy::REJECT; }
32 
33  GUID_Policy::GUID_Policy(GUID_Policy::Policy aPolicy) : on_GUID_conflict(aPolicy) {}
34 
35 
36  bool saveSettingsForThisSession = false;
38 };
39 
40 template <typename T>
42 {
43 public:
44  GUID_Policy_scoped(T* aDoc, const GUID_Policy& aPolicy, const Base::String& aSuffix = L"") : doc(aDoc), scoped_policy(aPolicy), suffix(aSuffix)
45  {
46  if (suffix == L"")
47  {
48  old_policy = doc->getGuidPolicy();
49  doc->setGuidPolicy(scoped_policy);
50  }
51  else
52  {
53  bool ok = doc->getGuidPolicy(suffix, old_policy);
54  if (ok)
55  doc->setGuidPolicy(suffix, scoped_policy);
56  }
57  }
59  {
60  // Setting old policy
61  if (suffix == L"")
62  doc->setGuidPolicy(old_policy);
63  else
64  doc->setGuidPolicy(suffix, old_policy);
65  }
66 
67  T* doc;
71 };
72 
73 class LX_BASE_EXPORT GUID
74 {
75 public:
76  GUID()
77  {
78  data1 = 0;
79  data2 = 0;
80  data3 = 0;
81  for (int i = 0; i < 8; i++)
82  data4[i] = 0;
83  }
84 
86  GUID(const Base::String& base64);
87 
89  GUID(const char* aGUID);
90 
91  bool isNull() const
92  {
93  return (data1 == 0 && data2 == 0 && data3 == 0 && data4[0] == 0 && data4[1] == 0 && data4[2] == 0 && data4[3] == 0 && data4[4] == 0 &&
94  data4[5] == 0 && data4[6] == 0 && data4[7] == 0);
95  }
96 
98  static GUID createGUID();
100  static GUID fromQUuid(const QUuid& uuid);
102  static void toQUuid(const GUID& in, QUuid& uuid);
104  void toQUuid(QUuid& uuid) const;
105 
106 
107  Base::String toBase64() const;
108  Base::String toString() const;
109 
110  unsigned int data1;
111  unsigned short data2;
112  unsigned short data3;
113  unsigned char data4[8];
114 
115  bool operator==(const GUID& rhs) const
116  {
117  unsigned int i;
118  if (data1 != rhs.data1 || data2 != rhs.data2 || data3 != rhs.data3)
119  return false;
120 
121  for (i = 0; i < 8; i++)
122  if (data4[i] != rhs.data4[i])
123  return false;
124 
125  return true;
126  }
127 
128  bool operator!=(const GUID& rhs) const { return !(*this == rhs); }
129 
130  bool operator<(const GUID& rhs) const;
131  bool operator>(const GUID& rhs) const;
132 };
133 } // namespace Base
GUID()
Definition: GUID.h:76
unsigned char data4[8]
Definition: GUID.h:113
Definition: GUID.h:27
unsigned int data1
Definition: GUID.h:110
Definition: GUID.h:28
~GUID_Policy_scoped()
Definition: GUID.h:58
A Utf-16 (windows) or ucs4 (unix) encoded string class.
Definition: String.h:23
bool operator==(const GUID &rhs) const
Definition: GUID.h:115
GUID_Policy old_policy
Definition: GUID.h:69
Definition: GUID.h:19
bool operator!=(const GUID &rhs) const
Definition: GUID.h:128
Definition: GUID.h:73
GUID_Policy::Policy on_GUID_conflict
Definition: GUID.h:37
unsigned short data3
Definition: GUID.h:112
GUID_Policy scoped_policy
Definition: GUID.h:68
Definition: GUID.h:41
Definition: GUID.h:26
Policy
Definition: GUID.h:24
Base::String suffix
Definition: GUID.h:70
GUID_Policy_scoped(T *aDoc, const GUID_Policy &aPolicy, const Base::String &aSuffix=L"")
Definition: GUID.h:44
T * doc
Definition: GUID.h:67
Definition: AbstractXMLReader.h:5
unsigned short data2
Definition: GUID.h:111
bool isNull() const
Definition: GUID.h:91