Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
quuid.h
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QUUID_H
6#define QUUID_H
7
8#include <QtCore/qcompare.h>
9#include <QtCore/qendian.h>
10#include <QtCore/qstring.h>
11#include <QtCore/qsystemdetection.h>
12
13#if defined(Q_OS_WIN) || defined(Q_QDOC)
14#ifndef GUID_DEFINED
15#define GUID_DEFINED
16typedef struct _GUID
17{
21 uchar Data4[8];
22} GUID, *REFGUID, *LPGUID;
23#endif
24#endif
25
26#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
29#endif
30
32
33class Q_CORE_EXPORT QUuid
34{
35 QUuid(Qt::Initialization) {}
36public:
37 enum Variant {
38 VarUnknown =-1,
39 NCS = 0, // 0 - -
40 DCE = 2, // 1 0 -
41 Microsoft = 6, // 1 1 0
42 Reserved = 7 // 1 1 1
43 };
44
45 enum Version {
47 Time = 1, // 0 0 0 1
48 EmbeddedPOSIX = 2, // 0 0 1 0
49 Md5 = 3, // 0 0 1 1
51 Random = 4, // 0 1 0 0
52 Sha1 = 5, // 0 1 0 1
53 UnixEpoch = 7, // 0 1 1 1
54 };
55
61
62 union alignas(16) Id128Bytes {
67#if defined(QT_COMPILER_SUPPORTS_INT128)
69QT_WARNING_DISABLE_GCC("-Wpedantic") // ISO C++ does not support ‘__int128’ for ‘data128’
70 unsigned __int128 data128[1];
72#elif defined(QT_SUPPORTS_INT128)
73# error "struct QUuid::Id128Bytes should not depend on QT_SUPPORTS_INT128 for ABI reasons."
74# error "Adjust the declaration of the `data128` member above so it is always defined if it's "
75 "supported by the current compiler/architecture in any configuration."
76#endif
77
78 constexpr explicit operator QByteArrayView() const noexcept
79 {
80 return QByteArrayView(data, sizeof(data));
81 }
82
83 friend constexpr Id128Bytes qbswap(Id128Bytes b) noexcept
84 {
85 // 128-bit byte swap
86 auto b0 = qbswap(b.data64[0]);
87 auto b1 = qbswap(b.data64[1]);
88 b.data64[0] = b1;
89 b.data64[1] = b0;
90 return b;
91 }
92 };
93
94 constexpr QUuid() noexcept : data1(0), data2(0), data3(0), data4{0,0,0,0,0,0,0,0} {}
95
96 constexpr QUuid(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3,
97 uchar b4, uchar b5, uchar b6, uchar b7, uchar b8) noexcept
98 : data1(l), data2(w1), data3(w2), data4{b1, b2, b3, b4, b5, b6, b7, b8} {}
99 explicit inline QUuid(Id128Bytes id128, QSysInfo::Endian order = QSysInfo::BigEndian) noexcept;
100
101 explicit QUuid(QAnyStringView string) noexcept
102 : QUuid{fromString(string)} {}
103 static QUuid fromString(QAnyStringView string) noexcept;
104#if QT_CORE_REMOVED_SINCE(6, 3)
105 explicit QUuid(const QString &);
106 static QUuid fromString(QStringView string) noexcept;
107 static QUuid fromString(QLatin1StringView string) noexcept;
108 explicit QUuid(const char *);
109 explicit QUuid(const QByteArray &);
110#endif
111 QString toString(StringFormat mode = WithBraces) const;
113 inline Id128Bytes toBytes(QSysInfo::Endian order = QSysInfo::BigEndian) const noexcept;
114 QByteArray toRfc4122() const;
115
116 static inline QUuid fromBytes(const void *bytes, QSysInfo::Endian order = QSysInfo::BigEndian);
117#if QT_CORE_REMOVED_SINCE(6, 3)
118 static QUuid fromRfc4122(const QByteArray &);
119#endif
120 static QUuid fromRfc4122(QByteArrayView) noexcept;
121
122#if QT_CORE_REMOVED_SINCE(6, 9)
123 bool isNull() const noexcept;
124#endif
125 constexpr bool isNull(QT6_DECL_NEW_OVERLOAD) const noexcept
126 {
127#if defined(__cpp_lib_bit_cast) && defined(QT_SUPPORTS_INT128)
128 return std::bit_cast<quint128>(*this) == 0;
129#else
130 // QNX fails to compile
131 // data4[0] == 0 && data4[1] == 0 && ...
132 // in constexpr context, so rewrite it using a loop. This way we have
133 // only single data4[i] != 0 check at each iteration
134 for (size_t i = 0; i < 8; ++i) {
135 if (data4[i] != 0)
136 return false;
137 }
138 return data1 == 0 && data2 == 0 && data3 == 0;
139#endif
140 }
141
142#ifdef QT_SUPPORTS_INT128
143 static constexpr QUuid fromUInt128(quint128 uuid, QSysInfo::Endian order = QSysInfo::BigEndian) noexcept;
144 constexpr quint128 toUInt128(QSysInfo::Endian order = QSysInfo::BigEndian) const noexcept;
145#endif
146
147private:
148 friend constexpr bool comparesEqual(const QUuid &lhs, const QUuid &rhs) noexcept
149 {
150 return is_eq(compareThreeWay_helper(lhs, rhs));
151 }
152 static constexpr Qt::strong_ordering
153 compareThreeWay_helper(const QUuid &lhs, const QUuid &rhs) noexcept
154 {
155#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
156 if (const auto c = Qt::compareThreeWay(lhs.data1, rhs.data1); !is_eq(c))
157 return c;
158 if (const auto c = Qt::compareThreeWay(lhs.data2, rhs.data2); !is_eq(c))
159 return c;
160 if (const auto c = Qt::compareThreeWay(lhs.data3, rhs.data3); !is_eq(c))
161 return c;
162#elif defined(__cpp_lib_bit_cast) && defined(QT_SUPPORTS_INT128)
163 quint128 lu = qFromBigEndian(std::bit_cast<quint128>(lhs));
164 quint128 ru = qFromBigEndian(std::bit_cast<quint128>(rhs));
165 return Qt::compareThreeWay(lu, ru);
166#else
167 auto make_int = [](const QUuid &u) {
168 quint64 result = quint64(u.data3) << 48;
169 result |= quint64(u.data2) << 32;
170 return qFromBigEndian(result | u.data1);
171 };
172 if (const auto c = Qt::compareThreeWay(make_int(lhs), make_int(rhs)); !is_eq(c))
173 return c;
174#endif
175 for (unsigned i = 0; i < sizeof(lhs.data4); ++i) {
176 if (const auto c = Qt::compareThreeWay(lhs.data4[i], rhs.data4[i]); !is_eq(c))
177 return c;
178 }
179 return Qt::strong_ordering::equal;
180 }
181 friend constexpr Qt::strong_ordering compareThreeWay(const QUuid &lhs, const QUuid &rhs) noexcept
182 {
183#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
184 // Keep the old sorting order from before Qt 6.8, which sorted first on
185 // variant(). We don't need the exact algorithm to achieve same results.
186 auto fastVariant = [](const QUuid &uuid) {
187 quint8 v = uuid.data4[0];
188 // i.e.: return v >= Microsoft ? v : v >= DCE ? DCE : NCS;
189 return v >= 0xC0 ? v & 0xE0 : v >= 0x80 ? 0x80 : 0;
190 };
191 if (const auto c = Qt::compareThreeWay(fastVariant(lhs), fastVariant(rhs)); !is_eq(c))
192 return c;
193#endif
194 return compareThreeWay_helper(lhs, rhs);
195 }
196
197public:
198/* To prevent a meta-type creation ambiguity on Windows, we put comparison
199 macros under NOT QT_CORE_REMOVED_SINCE(6, 8) part. */
200#if QT_CORE_REMOVED_SINCE(6, 8)
201 constexpr bool operator==(const QUuid &orig) const noexcept
202 {
203 return comparesEqual(*this, orig);
204 }
205
206 constexpr bool operator!=(const QUuid &orig) const noexcept
207 {
208 return !operator==(orig);
209 }
210
211 bool operator<(const QUuid &other) const noexcept;
212 bool operator>(const QUuid &other) const noexcept;
213#else
214 Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QUuid)
215#endif // QT_CORE_REMOVED_SINCE(6, 8)
216#if defined(Q_OS_WIN) || defined(Q_QDOC)
217 // On Windows we have a type GUID that is used by the platform API, so we
218 // provide convenience operators to cast from and to this type.
219 constexpr QUuid(const GUID &guid) noexcept
220 : data1(guid.Data1), data2(guid.Data2), data3(guid.Data3),
221 data4{guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
222 guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]} {}
223
224 constexpr QUuid &operator=(const GUID &guid) noexcept
225 {
226 *this = QUuid(guid);
227 return *this;
228 }
229
230 constexpr operator GUID() const noexcept
231 {
232 GUID guid = { data1, data2, data3, { data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], data4[6], data4[7] } };
233 return guid;
234 }
235private:
236 friend constexpr bool comparesEqual(const QUuid &lhs, const GUID &rhs) noexcept
237 {
238 return comparesEqual(lhs, QUuid(rhs));
239 }
240public:
241/* To prevent a meta-type creation ambiguity on Windows, we put comparison
242 macros under NOT QT_CORE_REMOVED_SINCE(6, 8) part. */
243#if QT_CORE_REMOVED_SINCE(6, 8)
244 constexpr bool operator==(const GUID &guid) const noexcept
245 {
246 return comparesEqual(*this, QUuid(guid));
247 }
248
249 constexpr bool operator!=(const GUID &guid) const noexcept
250 {
251 return !operator==(guid);
252 }
253#else
254 Q_DECLARE_EQUALITY_COMPARABLE_LITERAL_TYPE(QUuid, GUID)
255#endif // !QT_CORE_REMOVED_SINCE(6, 8)
256#endif
257public:
258 static QUuid createUuid();
259#if QT_CORE_REMOVED_SINCE(6, 8)
260 static QUuid createUuidV3(const QUuid &ns, const QByteArray &baseData) noexcept;
261 static QUuid createUuidV5(const QUuid &ns, const QByteArray &baseData) noexcept;
262#endif
263 static QUuid createUuidV5(QUuid ns, QByteArrayView baseData) noexcept;
264#ifndef QT_BOOTSTRAPPED
265 static QUuid createUuidV3(QUuid ns, QByteArrayView baseData) noexcept;
266#if !QT_CORE_REMOVED_SINCE(6, 8)
267 Q_WEAK_OVERLOAD
268#endif
269 static inline QUuid createUuidV3(const QUuid &ns, const QString &baseData)
270 {
271 return QUuid::createUuidV3(ns, qToByteArrayViewIgnoringNull(baseData.toUtf8()));
272 }
273#endif
274#if !QT_CORE_REMOVED_SINCE(6, 8)
275 Q_WEAK_OVERLOAD
276#endif
277 static inline QUuid createUuidV5(const QUuid &ns, const QString &baseData)
278 {
279 return QUuid::createUuidV5(ns, qToByteArrayViewIgnoringNull(baseData.toUtf8()));
280 }
281
282 static QUuid createUuidV7();
283
284private:
285 static constexpr bool isKnownVersion(Version v) noexcept
286 {
287 switch (v) {
288 case VerUnknown:
289 return false;
290 case Time:
291 case EmbeddedPOSIX:
292 case Md5:
293 case Random:
294 case Sha1:
295 case UnixEpoch:
296 return true;
297 }
298 return false;
299 }
300
301public:
302#if QT_CORE_REMOVED_SINCE(6, 9)
303 QUuid::Variant variant() const noexcept;
304 QUuid::Version version() const noexcept;
305#endif
306 constexpr Variant variant(QT6_DECL_NEW_OVERLOAD) const noexcept
307 {
308 // Check the 3 MSB of data4[0]
309 const quint8 var = data4[0] & 0xE0;
310 if (var < 0x80)
311 return isNull(QT6_CALL_NEW_OVERLOAD) ? VarUnknown : NCS;
312 if (var < 0xC0)
313 return DCE;
314 return Variant(var >> 5); // Microsoft or Reserved
315 }
316 constexpr Version version(QT6_DECL_NEW_OVERLOAD) const noexcept
317 {
318 // Check the 4 MSB of data3
319 const Version ver = Version(data3 >> 12);
320 // Check that variant() == DCE and version is in a valid range
321 if (isKnownVersion(ver) && (data4[0] & 0xC0) == 0x80)
322 return ver;
323 return VerUnknown;
324 }
325
326#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
327 static QUuid fromCFUUID(CFUUIDRef uuid);
328 CFUUIDRef toCFUUID() const Q_DECL_CF_RETURNS_RETAINED;
329 static QUuid fromNSUUID(const NSUUID *uuid);
330 NSUUID *toNSUUID() const Q_DECL_NS_RETURNS_AUTORELEASED;
331#endif
332
337};
338
340
341#ifndef QT_NO_DATASTREAM
342Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QUuid &);
343Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QUuid &);
344#endif
345
346#ifndef QT_NO_DEBUG_STREAM
347Q_CORE_EXPORT QDebug operator<<(QDebug, const QUuid &);
348#endif
349
350Q_CORE_EXPORT size_t qHash(const QUuid &uuid, size_t seed = 0) noexcept;
351
352QUuid::QUuid(Id128Bytes uuid, QSysInfo::Endian order) noexcept
353{
354 char bytes[sizeof uuid];
355 if (order == QSysInfo::LittleEndian)
356 qbswap(uuid, bytes);
357 else
358 memcpy(bytes, &uuid, sizeof bytes);
359 data1 = qFromBigEndian<quint32>(&bytes[0]);
360 data2 = qFromBigEndian<quint16>(&bytes[4]);
361 data3 = qFromBigEndian<quint16>(&bytes[6]);
362 memcpy(data4, &bytes[8], sizeof(data4));
363}
364
365QUuid::Id128Bytes QUuid::toBytes(QSysInfo::Endian order) const noexcept
366{
367 Id128Bytes result = {};
368 qToBigEndian(data1, &result.data[0]);
369 qToBigEndian(data2, &result.data[4]);
370 qToBigEndian(data3, &result.data[6]);
371 memcpy(&result.data[8], data4, sizeof(data4));
372 if (order == QSysInfo::LittleEndian)
373 return qbswap(result);
374 return result;
375}
376
377QUuid QUuid::fromBytes(const void *bytes, QSysInfo::Endian order)
378{
379 Id128Bytes result = {};
380 memcpy(result.data, bytes, sizeof(result));
381 return QUuid(result, order);
382}
383
384#ifdef QT_SUPPORTS_INT128
385constexpr QUuid QUuid::fromUInt128(quint128 uuid, QSysInfo::Endian order) noexcept
386{
387 QUuid result = {};
388 if (order == QSysInfo::BigEndian) {
389 result.data1 = qFromBigEndian<quint32>(int(uuid));
390 result.data2 = qFromBigEndian<quint16>(ushort(uuid >> 32));
391 result.data3 = qFromBigEndian<quint16>(ushort(uuid >> 48));
392 for (int i = 0; i < 8; ++i)
393 result.data4[i] = uchar(uuid >> (64 + i * 8));
394 } else {
395 result.data1 = qFromLittleEndian<quint32>(uint(uuid >> 96));
396 result.data2 = qFromLittleEndian<quint16>(ushort(uuid >> 80));
397 result.data3 = qFromLittleEndian<quint16>(ushort(uuid >> 64));
398 for (int i = 0; i < 8; ++i)
399 result.data4[i] = uchar(uuid >> (56 - i * 8));
400 }
401 return result;
402}
403
404constexpr quint128 QUuid::toUInt128(QSysInfo::Endian order) const noexcept
405{
406 quint128 result = {};
407 if (order == QSysInfo::BigEndian) {
408 for (int i = 0; i < 8; ++i)
409 result |= quint64(data4[i]) << (i * 8);
410 result = result << 64;
411 result |= quint64(qToBigEndian<quint16>(data3)) << 48;
412 result |= quint64(qToBigEndian<quint16>(data2)) << 32;
413 result |= qToBigEndian<quint32>(data1);
414 } else {
415 result = qToLittleEndian<quint32>(data1);
416 result = result << 32;
417 result |= quint64(qToLittleEndian<quint16>(data2)) << 16;
418 result |= quint64(qToLittleEndian<quint16>(data3));
419 result = result << 64;
420 for (int i = 0; i < 8; ++i)
421 result |= quint64(data4[i]) << (56 - i * 8);
422 }
423 return result;
424}
425#endif
426
427#if defined(Q_QDOC)
428// provide fake declarations of qXXXEndian() functions, so that qDoc could
429// distinguish them from the general template
430QUuid::Id128Bytes qFromBigEndian(QUuid::Id128Bytes src);
431QUuid::Id128Bytes qFromLittleEndian(QUuid::Id128Bytes src);
432QUuid::Id128Bytes qToBigEndian(QUuid::Id128Bytes src);
433QUuid::Id128Bytes qToLittleEndian(QUuid::Id128Bytes src);
434#endif
435
436QT_END_NAMESPACE
437
438#endif // QUUID_H
\inmodule QtCore\reentrant
Definition qcborarray.h:21
\inmodule QtCore\reentrant
Definition qcbormap.h:35
bool isBool() const
Definition qcborvalue.h:321
QCborArray toArray(const QCborArray &a) const
Definition qcborarray.h:384
QCborMap toMap(const QCborMap &m) const
Definition qcbormap.h:495
QCborMap toMap() const
Definition qcbormap.h:490
QVariant toVariant() const
Definition qcborvalue.h:385
bool isInteger() const
Definition qcborvalue.h:313
bool isDateTime() const
Definition qcborvalue.h:325
bool isDouble() const
Definition qcborvalue.h:324
bool isString() const
Definition qcborvalue.h:315
QCborValueConstRef & operator=(const QCborValueConstRef &)=delete
bool isUrl() const
Definition qcborvalue.h:326
bool isNull() const
Definition qcborvalue.h:322
QCborArray toArray() const
Definition qcborarray.h:379
bool isContainer() const
Definition qcborvalue.h:330
bool toBool(bool defaultValue=false) const
Definition qcborvalue.h:346
QCborValue taggedValue(const QCborValue &defaultValue=QCborValue()) const
Definition qcborvalue.h:341
bool isByteArray() const
Definition qcborvalue.h:314
QCborSimpleType toSimpleType(QCborSimpleType defaultValue=QCborSimpleType::Undefined) const
Definition qcborvalue.h:334
bool isMap() const
Definition qcborvalue.h:317
bool isSimpleType() const
Definition qcborvalue.h:331
bool isRegularExpression() const
Definition qcborvalue.h:327
bool isUndefined() const
Definition qcborvalue.h:323
QCborValue::Type type() const
Definition qcborvalue.h:312
bool isInvalid() const
Definition qcborvalue.h:329
QCborValueConstRef(const QCborValueConstRef &)=default
bool isUuid() const
Definition qcborvalue.h:328
QCborTag tag(QCborTag defaultValue=QCborTag(-1)) const
Definition qcborvalue.h:339
constexpr QCborValueConstRef()
Definition qcborvalue.h:452
QByteArray toByteArray(const QByteArray &defaultValue={}) const
Definition qcborvalue.h:351
qint64 toInteger(qint64 defaultValue=0) const
Definition qcborvalue.h:344
bool isSimpleType(QCborSimpleType st) const
Definition qcborvalue.h:332
bool isTrue() const
Definition qcborvalue.h:320
QUuid toUuid(const QUuid &defaultValue={}) const
Definition qcborvalue.h:368
QCborContainerPrivate * d
Definition qcborvalue.h:456
bool isFalse() const
Definition qcborvalue.h:319
QAnyStringView toStringView(QAnyStringView defaultValue={}) const
Definition qcborvalue.h:355
friend bool comparesEqual(const QCborValueConstRef &lhs, const QCborValueConstRef &rhs) noexcept
Definition qcborvalue.h:409
bool isTag() const
Definition qcborvalue.h:318
friend bool comparesEqual(const QCborValueConstRef &lhs, const QCborValue &rhs) noexcept
Definition qcborvalue.h:425
QString toDiagnosticNotation(QCborValue::DiagnosticNotationOptions opt=QCborValue::Compact) const
Definition qcborvalue.h:395
bool isArray() const
Definition qcborvalue.h:316
int compare(const QCborValue &other) const
Definition qcborvalue.h:382
friend Qt::strong_ordering compareThreeWay(const QCborValueConstRef &lhs, const QCborValue &rhs) noexcept
Definition qcborvalue.h:430
operator QCborValue() const
Definition qcborvalue.h:310
friend Qt::strong_ordering compareThreeWay(const QCborValueConstRef &lhs, const QCborValueConstRef &rhs) noexcept
Definition qcborvalue.h:414
constexpr QCborValueConstRef(QCborContainerPrivate *dd, qsizetype ii)
Definition qcborvalue.h:453
QCborValue concrete() const noexcept
Definition qcborvalue.h:404
QString toString(const QString &defaultValue={}) const
Definition qcborvalue.h:353
QUrl toUrl(const QUrl &defaultValue={}) const
Definition qcborvalue.h:362
QJsonValue toJsonValue() const
double toDouble(double defaultValue=0) const
Definition qcborvalue.h:348
\inmodule QtCore\reentrant
Definition qcborvalue.h:48
\inmodule QtCore\reentrant
Definition qdatastream.h:50
\inmodule QtCore
Definition qhash.h:843
\inmodule QtCore\reentrant
Definition qjsonarray.h:19
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
Definition qjsonobject.h:34
friend bool comparesEqual(const QJsonValueConstRef &lhs, const QJsonValue &rhs)
Definition qjsonvalue.h:185
constexpr QJsonValueConstRef(QCborContainerPrivate *d, size_t index, bool is_object)
Definition qjsonvalue.h:236
friend bool comparesEqual(const QJsonValueConstRef &lhs, const QJsonValueConstRef &rhs)
Definition qjsonvalue.h:180
bool isBool() const
Definition qjsonvalue.h:153
operator QJsonValue() const
Definition qjsonvalue.h:148
bool isArray() const
Definition qjsonvalue.h:156
bool isDouble() const
Definition qjsonvalue.h:154
QAnyStringView objectKeyView() const
Definition qjsonvalue.h:210
void rebind(QJsonValueConstRef other)
Definition qjsonvalue.h:244
bool isString() const
Definition qjsonvalue.h:155
bool isObject() const
Definition qjsonvalue.h:157
QString objectKey() const
Definition qjsonvalue.h:207
QAnyStringView toStringView(QAnyStringView defaultValue={}) const
Definition qjsonvalue.h:170
QJsonValueConstRef(const QJsonValueConstRef &)=default
qint64 toInteger(qint64 defaultValue=0) const
Definition qjsonvalue.h:164
bool toBool(bool defaultValue=false) const
Definition qjsonvalue.h:160
QJsonValueConstRef & operator=(const QJsonValueConstRef &)=delete
QString toString(const QString &defaultValue={}) const
Definition qjsonvalue.h:168
QJsonValue::Type type() const
Definition qjsonvalue.h:151
QJsonValueConstRef(QJsonArray *array, qsizetype idx)
Definition qjsonarray.h:322
QCborContainerPrivate * d
Definition qjsonvalue.h:250
bool isNull() const
Definition qjsonvalue.h:152
QJsonValueConstRef(QJsonObject *object, qsizetype idx)
double toDouble(double defaultValue=0) const
Definition qjsonvalue.h:166
int toInt(int defaultValue=0) const
Definition qjsonvalue.h:162
const QJsonValue operator[](QStringView key) const
Definition qjsonvalue.h:175
bool isUndefined() const
Definition qjsonvalue.h:158
\inmodule QtCore\reentrant
Definition qjsonvalue.h:30
\inmodule QtCore\compares equality \compareswith equality QLine \endcompareswith
Definition qline.h:194
\inmodule QtCore\compares equality \compareswith equality QLineF \endcompareswith
Definition qline.h:20
Definition qlist.h:81
void remove(int from, int to)
bool insertIfNotContains(Key k, const T &f)
bool contains(Key k) const
const T * function(Key k) const
\inmodule QtCore\reentrant
Definition qpoint.h:232
\inmodule QtCore\reentrant
Definition qpoint.h:30
\inmodule QtCore
Definition quuid.h:34
friend constexpr Qt::strong_ordering compareThreeWay(const QUuid &lhs, const QUuid &rhs) noexcept
Definition quuid.h:181
Version
This enum defines the values used in the \l{Version field} {version field} of the UUID.
Definition quuid.h:45
@ UnixEpoch
Definition quuid.h:53
@ Time
Definition quuid.h:47
@ Random
Definition quuid.h:51
@ Sha1
Definition quuid.h:52
@ EmbeddedPOSIX
Definition quuid.h:48
@ Md5
Definition quuid.h:49
@ VerUnknown
Definition quuid.h:46
@ Name
Definition quuid.h:50
static QUuid fromBytes(const void *bytes, QSysInfo::Endian order=QSysInfo::BigEndian)
Definition quuid.h:377
static QUuid createUuidV7()
Definition quuid.cpp:605
StringFormat
Definition quuid.h:56
@ WithBraces
Definition quuid.h:57
@ Id128
Definition quuid.h:59
@ WithoutBraces
Definition quuid.h:58
QString toString(StringFormat mode=WithBraces) const
Definition quuid.cpp:681
constexpr Version version(QT6_DECL_NEW_OVERLOAD) const noexcept
Returns the \l{Version field} {version field} of the UUID, if the UUID's \l{Variant field}...
Definition quuid.h:316
static Q_WEAK_OVERLOAD QUuid createUuidV5(const QUuid &ns, const QString &baseData)
Definition quuid.h:277
Id128Bytes toBytes(QSysInfo::Endian order=QSysInfo::BigEndian) const noexcept
Definition quuid.h:365
uint data1
Definition quuid.h:333
static QUuid fromRfc4122(QByteArrayView) noexcept
Creates a QUuid object from the binary representation of the UUID, as specified by RFC 4122 section 4...
Definition quuid.cpp:626
QByteArray toByteArray(StringFormat mode=WithBraces) const
Definition quuid.cpp:722
ushort data3
Definition quuid.h:335
static QUuid fromString(QAnyStringView string) noexcept
Definition quuid.cpp:533
uchar data4[8]
Definition quuid.h:336
constexpr bool isNull(QT6_DECL_NEW_OVERLOAD) const noexcept
Returns true if this is the null UUID {00000000-0000-0000-0000-000000000000}; otherwise returns false...
Definition quuid.h:125
static Q_WEAK_OVERLOAD QUuid createUuidV3(const QUuid &ns, const QString &baseData)
Definition quuid.h:269
ushort data2
Definition quuid.h:334
QByteArray toRfc4122() const
Returns the binary representation of this QUuid.
Definition quuid.cpp:766
static QUuid createUuidV3(QUuid ns, QByteArrayView baseData) noexcept
Definition quuid.cpp:583
static QUuid createUuidV5(QUuid ns, QByteArrayView baseData) noexcept
Definition quuid.cpp:588
Association(const QMetaAssociation &metaAssociation, QMetaType metaType, const void *iterable)
Association(QIterable< QMetaAssociation > &&other)
Association(const QMetaAssociation &metaAssociation, QMetaType metaType, void *iterable)
reference operator[](qsizetype n) const
static constexpr bool CanNoexceptAssignQVariant
static constexpr bool CanNoexceptConvertToQVariant
LegacyRegisterOp legacyRegisterOp
Definition qmetatype.h:313
\keyword 16-bit Floating Point Support\inmodule QtCore \inheaderfile QFloat16
Definition qfloat16.h:57
Combined button and popup list for selecting options.
QVariant sequentialIteratorToVariant(const Indirect &referred)
QVariant associativeIteratorToVariant(const Indirect &referred)
QMutableListIterator< QByteArray > QMutableByteArrayListIterator
QCborSimpleType
Definition qcborcommon.h:29
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2582
QList< QVariant > QVariantList
Definition qjsonarray.h:16
Q_DECLARE_TYPEINFO(QLine, Q_PRIMITIVE_TYPE)
Q_DECLARE_TYPEINFO(QLineF, Q_PRIMITIVE_TYPE)
#define qCWarning(category,...)
#define Q_STATIC_LOGGING_CATEGORY(name,...)
#define CONVERT_CBOR_AND_JSON(To)
#define NS(x)
Definition qmetatype.cpp:73
#define QMETATYPE_CONVERTER_ASSIGN_QCHAR(From)
#define QMETATYPE_CONVERTER_ASSIGN_DOUBLE(To, From)
#define INTEGRAL_CONVERTER(To)
static bool tryConvertBuiltinTypes(const void *from, int fromTypeId, void *to, int toTypeId)
#define QMETATYPE_CONVERTER_ASSIGN_NUMBER(To, From)
static bool qIntegerConversionFromFPHelper(From from, To *to)
#define FLOAT_CONVERTER(To)
#define QT_FOR_EACH_STATIC_CORE_POINTER(F)
Definition qmetatype.h:138
#define QT_FOR_EACH_STATIC_PRIMITIVE_TYPE(F)
Definition qmetatype.h:71
#define QT_FOR_EACH_STATIC_PRIMITIVE_NON_VOID_TYPE(F)
Definition qmetatype.h:51
#define QT_FOR_EACH_STATIC_CORE_TEMPLATE(F)
Definition qmetatype.h:152
#define QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(F)
Definition qmetatype.h:75
#define QT_IMPL_METATYPE_EXTERN_TAGGED(TYPE, TAG)
Definition qmetatype.h:1375
#define QT_FOR_EACH_STATIC_CORE_CLASS(F)
Definition qmetatype.h:106
#define QT_FOR_EACH_STATIC_ALIAS_TYPE(F)
Definition qmetatype.h:194
#define QT_FOR_EACH_STATIC_TYPE(F)
Definition qmetatype.h:224
#define QMETATYPE_CONVERTER(To, From, assign_and_return)
Definition qmetatype_p.h:24
#define QMETATYPE_CONVERTER_ASSIGN(To, From)
Definition qmetatype_p.h:35
#define QStringLiteral(str)
Definition qstring.h:1825
Q_DECLARE_TYPEINFO(QUuid, Q_PRIMITIVE_TYPE)
\inmodule QtCore\reentrant
Definition qcborvalue.h:38
QString errorString() const
\variable QCborParserError::offset
Definition qcborvalue.h:42
QCborError error
Definition qcborvalue.h:40
QListSpecialMethods & operator=(const QListSpecialMethods &)=default
QListSpecialMethods(QListSpecialMethods &&)=default
QListSpecialMethods & operator=(QListSpecialMethods &&)=default
QListSpecialMethods(const QListSpecialMethods &)=default
QByteArray join(QByteArrayView sep={}) const
static T value(const Iterator &it)
Definition qcbormap.h:27
static T value(Iterator &it)
Definition qcbormap.h:28
static QCborValueConstRef key(Iterator &it)
Definition qcbormap.h:26
static QCborValueConstRef key(const Iterator &it)
Definition qcbormap.h:25
static QAnyStringView key(Iterator &it)
Definition qjsonobject.h:26
static T value(const Iterator &it)
Definition qjsonobject.h:27
static QAnyStringView key(const Iterator &it)
Definition qjsonobject.h:25
static T value(Iterator &it)
Definition qjsonobject.h:28
\inmodule QtCore
Definition quuid.h:62
quint32 data32[4]
Definition quuid.h:65
quint64 data64[2]
Definition quuid.h:66
quint16 data16[8]
Definition quuid.h:64
quint8 data[16]
Definition quuid.h:63