9#include <QtCore/qprocessordetection.h>
10#include <QtCore/qsystemdetection.h>
11#include <QtCore/qtconfigmacros.h>
12#include <QtCore/qassert.h>
16# if defined(_HAS_STD_BYTE) && _HAS_STD_BYTE == 0
17# error "Qt requires std::byte, but _HAS_STD_BYTE has been set to 0"
20# if defined(__STDCPP_FLOAT16_T__) && __has_include(<stdfloat>)
24# include <type_traits>
30#pragma qt_class(QtTypes)
31#pragma qt_class(QIntegerForSize)
32#pragma qt_sync_stop_processing
36
37
46
47
48
49
60# define Q_INT64_C(c) static_cast<long long>(c ## LL)
61# define Q_UINT64_C(c) static_cast<unsigned long long>(c ## ULL)
63# define Q_INT64_C(c) ((long long)(c ## LL))
64# define Q_UINT64_C(c) ((unsigned long long)(c ## ULL))
73# define QT_SUPPORTS_INT128 16
74#elif defined(QT_COMPILER_SUPPORTS_INT128) && !defined(QT_NO_INT128)
75# define QT_SUPPORTS_INT128 QT_COMPILER_SUPPORTS_INT128
76# if defined(__GLIBCXX__) && defined(__STRICT_ANSI__)
77# undef QT_SUPPORTS_INT128
79# if defined(__clang__) && defined(_MSVC_STL_VERSION)
80# undef QT_SUPPORTS_INT128
83# undef QT_SUPPORTS_INT128
86#if defined(QT_SUPPORTS_INT128)
87__extension__ typedef __int128_t qint128;
88__extension__ typedef __uint128_t quint128;
91static_assert(std::is_signed_v<qint128>,
92 "Qt requires <type_traits> and <limits> to work for q(u)int128.");
97# define QT_C_STYLE_CAST(type, x) static_cast<type>(x)
99# define QT_C_STYLE_CAST(type, x) ((type)(x))
101# ifndef Q_UINT128_MAX
102# define Q_UINT128_MAX QT_C_STYLE_CAST(quint128, -1
)
104# define Q_INT128_MAX QT_C_STYLE_CAST(qint128, Q_UINT128_MAX / 2
)
105# define Q_INT128_MIN (-Q_INT128_MAX - 1
)
108 namespace QtPrivate::NumberLiterals {
110 template <quint128 accu,
int base>
111 constexpr quint128 construct() {
return accu; }
113 template <quint128 accu,
int base,
char C,
char...Cs>
114 constexpr quint128 construct()
116 if constexpr (C !=
'\'') {
117 const int digitValue =
'0' <= C && C <=
'9' ? C -
'0' :
118 'a' <= C && C <=
'z' ? C -
'a' + 10 :
119 'A' <= C && C <=
'Z' ? C -
'A' + 10 :
121 static_assert(digitValue >= 0 && digitValue < base,
122 "Invalid character");
124 static_assert(accu <= (Q_UINT128_MAX - digitValue) / base,
125 "Overflow occurred");
126 return construct<accu * base + digitValue, base, Cs...>();
128 return construct<accu, base, Cs...>();
132 template <
char C,
char...Cs>
133 constexpr quint128 parse0xb()
135 constexpr quint128 accu = 0;
136 if constexpr (C ==
'x' || C ==
'X')
137 return construct<accu, 16, Cs...>();
138 else if constexpr (C ==
'b' || C ==
'B')
139 return construct<accu, 2, Cs...>();
141 return construct<accu, 8, C, Cs...>();
145 constexpr quint128 parse0()
147 if constexpr (
sizeof...(Cs) == 0)
150 return parse0xb<Cs...>();
153 template <
char C,
char...Cs>
154 constexpr quint128 parse()
156 if constexpr (C ==
'0')
157 return parse0<Cs...>();
159 return construct<0, 10, C, Cs...>();
163 constexpr quint128 operator
""_quint128()
noexcept
164 {
return QtPrivate::NumberLiterals::detail::parse<Cs...>(); }
166 constexpr qint128 operator
""_qint128()
noexcept
167 {
return qint128(QtPrivate::NumberLiterals::detail::parse<Cs...>()); }
170 # define Q_UINT128_C(c) ([]{ using namespace QtPrivate::NumberLiterals; return c ## _quint128; }())
173 # define Q_INT128_C(c) ([]{ using namespace QtPrivate::NumberLiterals; return c ## _qint128; }())
182static_assert(
sizeof(ptrdiff_t) ==
sizeof(size_t),
"Weird ptrdiff_t and size_t definitions");
183typedef ptrdiff_t qptrdiff;
184typedef ptrdiff_t qsizetype;
185typedef ptrdiff_t qintptr;
186typedef size_t quintptr;
188#define PRIdQPTRDIFF "td"
189#define PRIiQPTRDIFF "ti"
191#define PRIdQSIZETYPE "td"
192#define PRIiQSIZETYPE "ti"
194#define PRIdQINTPTR "td"
195#define PRIiQINTPTR "ti"
197#define PRIuQUINTPTR "zu"
198#define PRIoQUINTPTR "zo"
199#define PRIxQUINTPTR "zx"
200#define PRIXQUINTPTR "zX"
203#if defined(QT_COORD_TYPE)
204typedef QT_COORD_TYPE qreal;
209#if defined(__cplusplus
)
211
212
213
214
215
216
217
218
219template <
int>
struct QIntegerForSize;
220template <>
struct QIntegerForSize<1> {
typedef quint8 Unsigned;
typedef qint8 Signed; };
221template <>
struct QIntegerForSize<2> {
typedef quint16 Unsigned;
typedef qint16 Signed; };
222template <>
struct QIntegerForSize<4> {
typedef quint32 Unsigned;
typedef qint32 Signed; };
223template <>
struct QIntegerForSize<8> {
typedef quint64 Unsigned;
typedef qint64 Signed; };
224#if defined(QT_SUPPORTS_INT128)
225template <>
struct QIntegerForSize<16> {
typedef quint128 Unsigned;
typedef qint128 Signed; };
227template <
class T>
struct QIntegerForSizeof: QIntegerForSize<
sizeof(T)> { };
228typedef QIntegerForSize<Q_PROCESSOR_WORDSIZE>::Signed qregisterint;
229typedef QIntegerForSize<Q_PROCESSOR_WORDSIZE>::Unsigned qregisteruint;
230typedef QIntegerForSizeof<
void *>::Unsigned quintptr;
231typedef QIntegerForSizeof<
void *>::Signed qptrdiff;
232typedef qptrdiff qintptr;
233using qsizetype = QIntegerForSizeof<std::size_t>::Signed;
244#if SIZE_MAX
== 0xffffffffULL
245#define PRIuQUINTPTR "u"
246#define PRIoQUINTPTR "o"
247#define PRIxQUINTPTR "x"
248#define PRIXQUINTPTR "X"
250#define PRIdQPTRDIFF "d"
251#define PRIiQPTRDIFF "i"
253#define PRIdQINTPTR "d"
254#define PRIiQINTPTR "i"
256#define PRIdQSIZETYPE "d"
257#define PRIiQSIZETYPE "i"
258#elif SIZE_MAX
== 0xffffffffffffffffULL
259#define PRIuQUINTPTR "llu"
260#define PRIoQUINTPTR "llo"
261#define PRIxQUINTPTR "llx"
262#define PRIXQUINTPTR "llX"
264#define PRIdQPTRDIFF "lld"
265#define PRIiQPTRDIFF "lli"
267#define PRIdQINTPTR "lld"
268#define PRIiQINTPTR "lli"
270#define PRIdQSIZETYPE "lld"
271#define PRIiQSIZETYPE "lli"
273#error Unsupported platform (unknown value for SIZE_MAX)
278#if defined(__STDCPP_FLOAT16_T__)
279# define QFLOAT16_IS_NATIVE 1
281#elif defined(Q_CC_CLANG) && defined(__FLT16_MAX__
) && 0
283# define QFLOAT16_IS_NATIVE 1
285#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__
) && defined(__ARM_FP16_FORMAT_IEEE)
286# define QFLOAT16_IS_NATIVE 1
288#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__
) && defined(__SSE2__
)
289# define QFLOAT16_IS_NATIVE 1
292# define QFLOAT16_IS_NATIVE 0
293using NativeFloat16Type =
void;
unsigned long long quint64
QT_BEGIN_NAMESPACE typedef signed char qint8