1 /****************************************************************************
2 **
3 ** DQt - D bindings for the Qt Toolkit
4 **
5 ** GNU Lesser General Public License Usage
6 ** This file may be used under the terms of the GNU Lesser
7 ** General Public License version 3 as published by the Free Software
8 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
9 ** packaging of this file. Please review the following information to
10 ** ensure the GNU Lesser General Public License version 3 requirements
11 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
12 **
13 ****************************************************************************/
14 module qt.core.uuid;
15 extern(C++):
16
17 import qt.config;
18 import qt.core.bytearray;
19 import qt.core.global;
20 import qt.core.metatype;
21 import qt.core.namespace;
22 import qt.core.string;
23 import qt.core.stringview;
24 import qt.core.typeinfo;
25 import qt.helpers;
26 version(Cygwin){}else
27 version(Windows)
28 import core.stdc.config;
29
30 version(Cygwin){}else
31 version(Windows)
32 {
33 /+ #ifndef GUID_DEFINED +/
34 /+ #define GUID_DEFINED +/
35 struct _GUID
36 {
37 cpp_ulong Data1;
38 ushort Data2;
39 ushort Data3;
40 uchar[8] Data4;
41 }
42 alias GUID = _GUID/+ , +/;
43 alias REFGUID = _GUID */+ , +/;
44 alias LPGUID = _GUID *;
45 /+ #endif +/
46 }
47
48 /+ #if defined(Q_OS_DARWIN) || defined(Q_CLANG_QDOC)
49 Q_FORWARD_DECLARE_CF_TYPE(CFUUID);
50 Q_FORWARD_DECLARE_OBJC_CLASS(NSUUID);
51 #endif +/
52
53
54
55 @(QMetaType.Type.QUuid) @Q_PRIMITIVE_TYPE extern(C++, class) struct /+ Q_CORE_EXPORT +/ QUuid
56 {
57 private:
58 this(/+ Qt:: +/qt.core.namespace.Initialization) {}
59 public:
60 enum Variant {
61 VarUnknown =-1,
62 NCS = 0, // 0 - -
63 DCE = 2, // 1 0 -
64 Microsoft = 6, // 1 1 0
65 Reserved = 7 // 1 1 1
66 }
67
68 enum Version {
69 VerUnknown =-1,
70 Time = 1, // 0 0 0 1
71 EmbeddedPOSIX = 2, // 0 0 1 0
72 Md5 = 3, // 0 0 1 1
73 Name = Version.Md5,
74 Random = 4, // 0 1 0 0
75 Sha1 = 5 // 0 1 0 1
76 }
77
78 enum StringFormat {
79 WithBraces = 0,
80 WithoutBraces = 1,
81 Id128 = 3
82 }
83
84 /+ #if defined(Q_COMPILER_UNIFORM_INIT) && !defined(Q_CLANG_QDOC)
85
86 QUuid() noexcept : data1(0), data2(0), data3(0), data4{0,0,0,0,0,0,0,0} {}
87
88 QUuid(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3,
89 uchar b4, uchar b5, uchar b6, uchar b7, uchar b8) noexcept
90 : data1(l), data2(w1), data3(w2), data4{b1, b2, b3, b4, b5, b6, b7, b8} {}
91 #else +/
92 @disable this();
93 /+this()/+ noexcept+/
94 {
95 data1 = 0;
96 data2 = 0;
97 data3 = 0;
98 for(int i = 0; i < 8; i++)
99 data4[i] = 0;
100 }+/
101 this(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8)/+ noexcept+/
102 {
103 data1 = l;
104 data2 = w1;
105 data3 = w2;
106 data4[0] = b1;
107 data4[1] = b2;
108 data4[2] = b3;
109 data4[3] = b4;
110 data4[4] = b5;
111 data4[5] = b6;
112 data4[6] = b7;
113 data4[7] = b8;
114 }
115 /+ #endif +/
116
117 this(ref const(QString) );
118 static QUuid fromString(QStringView string)/+ noexcept+/;
119 static QUuid fromString(QLatin1String string)/+ noexcept+/;
120 this(const(char)* );
121 QString toString() const;
122 QString toString(StringFormat mode) const; // ### Qt6: merge with previous
123 this(ref const(QByteArray) );
124 QByteArray toByteArray() const;
125 QByteArray toByteArray(StringFormat mode) const; // ### Qt6: merge with previous
126 QByteArray toRfc4122() const;
127 static QUuid fromRfc4122(ref const(QByteArray) );
128 bool isNull() const/+ noexcept+/;
129
130 /+bool operator ==(ref const(QUuid) orig) const/+ noexcept+/
131 {
132 if (data1 != orig.data1 || data2 != orig.data2 ||
133 data3 != orig.data3)
134 return false;
135
136 for (uint i = 0; i < 8; i++)
137 if (data4[i] != orig.data4[i])
138 return false;
139
140 return true;
141 }+/
142
143 /+bool operator !=(ref const(QUuid) orig) const/+ noexcept+/
144 {
145 return !(this == orig);
146 }+/
147
148 /+bool operator <(ref const(QUuid) other) const/+ noexcept+/;+/
149 /+bool operator >(ref const(QUuid) other) const/+ noexcept+/;+/
150
151 /+ #if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
152 // On Windows we have a type GUID that is used by the platform API, so we
153 // provide convenience operators to cast from and to this type.
154 #if defined(Q_COMPILER_UNIFORM_INIT) && !defined(Q_CLANG_QDOC)
155 QUuid(const GUID &guid) noexcept
156 : data1(guid.Data1), data2(guid.Data2), data3(guid.Data3),
157 data4{guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
158 guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]} {}
159 #else +/
160 static if((versionIsSet!("Windows") && !versionIsSet!("Cygwin")))
161 {
162 this(ref const(GUID) guid)/+ noexcept+/
163 {
164 data1 = cast(uint)(guid.Data1);
165 data2 = guid.Data2;
166 data3 = guid.Data3;
167 for(int i = 0; i < 8; i++)
168 data4[i] = guid.Data4[i];
169 }
170 /+ #endif +/
171
172 /+ref QUuid operator =(ref const(GUID) guid)/+ noexcept+/
173 {
174 this = QUuid(guid);
175 return this;
176 }+/
177
178 /+ auto opCast(T : GUID)() const/+ noexcept+/
179 {
180 GUID guid = _GUID( data1, data2, data3, [ data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], data4[6], data4[7]] ) ;
181 return guid;
182 }+/
183
184 /+bool operator ==(ref const(GUID) guid) const/+ noexcept+/
185 {
186 return this == QUuid(guid);
187 }+/
188
189 /+bool operator !=(ref const(GUID) guid) const/+ noexcept+/
190 {
191 return !(this == guid);
192 }+/
193 }
194 /+ #endif +/
195 static QUuid createUuid();
196 /+ #ifndef QT_BOOTSTRAPPED +/
197 static QUuid createUuidV3(ref const(QUuid) ns, ref const(QByteArray) baseData);
198 /+ #endif +/
199 static QUuid createUuidV5(ref const(QUuid) ns, ref const(QByteArray) baseData);
200 /+ #ifndef QT_BOOTSTRAPPED +/
201 pragma(inline, true) static QUuid createUuidV3(ref const(QUuid) ns, ref const(QString) baseData)
202 {
203 auto tmp = baseData.toUtf8(); return QUuid.createUuidV3(ns, tmp);
204 }
205 /+ #endif +/
206
207 pragma(inline, true) static QUuid createUuidV5(ref const(QUuid) ns, ref const(QString) baseData)
208 {
209 auto tmp = baseData.toUtf8(); return QUuid.createUuidV5(ns, tmp);
210 }
211
212
213 QUuid.Variant variant() const/+ noexcept+/;
214 QUuid.Version version_() const/+ noexcept+/;
215
216 static if((versionIsSet!("OSX") || versionIsSet!("iOS") || versionIsSet!("TVOS") || versionIsSet!("WatchOS")))
217 {
218 /+ static QUuid fromCFUUID(CFUUIDRef uuid); +/
219 /+ CFUUIDRef toCFUUID() const Q_DECL_CF_RETURNS_RETAINED; +/
220 /+ static QUuid fromNSUUID(const NSUUID *uuid); +/
221 /+ NSUUID *toNSUUID() const Q_DECL_NS_RETURNS_AUTORELEASED; +/
222 }
223
224 uint data1;
225 ushort data2;
226 ushort data3;
227 uchar[8] data4;
228 }
229
230 /+ Q_DECLARE_TYPEINFO(QUuid, Q_PRIMITIVE_TYPE);
231
232 #ifndef QT_NO_DATASTREAM
233 Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QUuid &);
234 Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QUuid &);
235 #endif
236
237 #ifndef QT_NO_DEBUG_STREAM
238 Q_CORE_EXPORT QDebug operator<<(QDebug, const QUuid &);
239 #endif
240
241 Q_CORE_EXPORT uint qHash(const QUuid &uuid, uint seed = 0) noexcept; +/
242
243 /+pragma(inline, true) bool operator <=(ref const(QUuid) lhs, ref const(QUuid) rhs)/+ noexcept+/
244 { return !(rhs < lhs); }+/
245 /+pragma(inline, true) bool operator >=(ref const(QUuid) lhs, ref const(QUuid) rhs)/+ noexcept+/
246 { return !(lhs < rhs); }+/
247