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
qstringconverter_p.h
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// Copyright (C) 2020 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:critical reason:data-parser
5
6#ifndef QSTRINGCONVERTER_P_H
7#define QSTRINGCONVERTER_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <QtCore/qstring.h>
21#include <QtCore/qendian.h>
22#include <QtCore/qstringconverter.h>
23#include <QtCore/private/qglobal_p.h>
24
26
27#ifndef __cpp_char8_t
28enum qchar8_t : uchar {};
29#else
30using qchar8_t = char8_t;
31#endif
32
33struct QLatin1
34{
35 // Defined in qstring.cpp
36 static char16_t *convertToUnicode(char16_t *dst, QLatin1StringView in) noexcept;
37
38 static QChar *convertToUnicode(QChar *buffer, QLatin1StringView in) noexcept
39 {
40 char16_t *dst = reinterpret_cast<char16_t *>(buffer);
41 dst = convertToUnicode(dst, in);
42 return reinterpret_cast<QChar *>(dst);
43 }
44
45 static QChar *convertToUnicode(QChar *dst, QByteArrayView in,
46 [[maybe_unused]] QStringConverter::State *state) noexcept
47 {
48 Q_ASSERT(state);
49
50 return convertToUnicode(dst, QLatin1StringView(in.data(), in.size()));
51 }
52
53 static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state) noexcept;
54
55 // Defined in qstring.cpp
56 Q_CORE_EXPORT
57 static char *convertFromUnicode(char *out, QStringView in) noexcept;
58};
59
61{
62 static const bool isTrusted = false;
63 static const bool allowNonCharacters = true;
64 static const bool skipAsciiHandling = false;
65 static const int Error = -1;
66 static const int EndOfString = -2;
67
68 static void appendByte(uchar *&ptr, uchar b)
69 { *ptr++ = b; }
70
71 static void appendByte(qchar8_t *&ptr, qchar8_t b)
72 { *ptr++ = b; }
73
74 static uchar peekByte(const char *ptr, qsizetype n = 0)
75 { return ptr[n]; }
76
77 static uchar peekByte(const uchar *ptr, qsizetype n = 0)
78 { return ptr[n]; }
79
80 static uchar peekByte(const qchar8_t *ptr, qsizetype n = 0)
81 { return ptr[n]; }
82
83 static qptrdiff availableBytes(const char *ptr, const char *end)
84 { return end - ptr; }
85
86 static qptrdiff availableBytes(const uchar *ptr, const uchar *end)
87 { return end - ptr; }
88
89 static qptrdiff availableBytes(const qchar8_t *ptr, const qchar8_t *end)
90 { return end - ptr; }
91
92 static void advanceByte(const char *&ptr, qsizetype n = 1)
93 { ptr += n; }
94
95 static void advanceByte(const uchar *&ptr, qsizetype n = 1)
96 { ptr += n; }
97
98 static void advanceByte(const qchar8_t *&ptr, qsizetype n = 1)
99 { ptr += n; }
100
101 static void appendUtf16(char16_t *&ptr, char16_t uc)
102 { *ptr++ = char16_t(uc); }
103
104 static void appendUcs4(char16_t *&ptr, char32_t uc)
105 {
106 appendUtf16(ptr, QChar::highSurrogate(uc));
107 appendUtf16(ptr, QChar::lowSurrogate(uc));
108 }
109
110 static char16_t peekUtf16(const char16_t *ptr, qsizetype n = 0) { return ptr[n]; }
111
112 static qptrdiff availableUtf16(const char16_t *ptr, const char16_t *end)
113 { return end - ptr; }
114
115 static void advanceUtf16(const char16_t *&ptr, qsizetype n = 1) { ptr += n; }
116
117 static void appendUtf16(char32_t *&ptr, char16_t uc)
118 { *ptr++ = char32_t(uc); }
119
120 static void appendUcs4(char32_t *&ptr, char32_t uc)
121 { *ptr++ = uc; }
122};
123
125{
126 static const bool skipAsciiHandling = true;
127};
128
130{
131 /// returns 0 on success; errors can only happen if \a u is a surrogate:
132 /// Error if \a u is a low surrogate;
133 /// if \a u is a high surrogate, Error if the next isn't a low one,
134 /// EndOfString if we run into the end of the string.
135 template <typename Traits, typename OutputPtr, typename InputPtr> inline
136 int toUtf8(char16_t u, OutputPtr &dst, InputPtr &src, InputPtr end)
137 {
138 if (!Traits::skipAsciiHandling && u < 0x80) {
139 // U+0000 to U+007F (US-ASCII) - one byte
140 Traits::appendByte(dst, uchar(u));
141 return 0;
142 } else if (u < 0x0800) {
143 // U+0080 to U+07FF - two bytes
144 // first of two bytes
145 Traits::appendByte(dst, 0xc0 | uchar(u >> 6));
146 } else {
147 if (!QChar::isSurrogate(u)) {
148 // U+0800 to U+FFFF (except U+D800-U+DFFF) - three bytes
149 if (!Traits::allowNonCharacters && QChar::isNonCharacter(u))
150 return Traits::Error;
151
152 // first of three bytes
153 Traits::appendByte(dst, 0xe0 | uchar(u >> 12));
154 } else {
155 // U+10000 to U+10FFFF - four bytes
156 // need to get one extra codepoint
157 if (Traits::availableUtf16(src, end) == 0)
158 return Traits::EndOfString;
159
160 char16_t low = Traits::peekUtf16(src);
161 if (!QChar::isHighSurrogate(u))
162 return Traits::Error;
163 if (!QChar::isLowSurrogate(low))
164 return Traits::Error;
165
166 Traits::advanceUtf16(src);
167 char32_t ucs4 = QChar::surrogateToUcs4(u, low);
168
169 if (!Traits::allowNonCharacters && QChar::isNonCharacter(ucs4))
170 return Traits::Error;
171
172 // first byte
173 Traits::appendByte(dst, 0xf0 | (uchar(ucs4 >> 18) & 0xf));
174
175 // second of four bytes
176 Traits::appendByte(dst, 0x80 | (uchar(ucs4 >> 12) & 0x3f));
177
178 // for the rest of the bytes
179 u = char16_t(ucs4);
180 }
181
182 // second to last byte
183 Traits::appendByte(dst, 0x80 | (uchar(u >> 6) & 0x3f));
184 }
185
186 // last byte
187 Traits::appendByte(dst, 0x80 | (u & 0x3f));
188 return 0;
189 }
190
191 inline bool isContinuationByte(uchar b)
192 {
193 return (b & 0xc0) == 0x80;
194 }
195
196 /// returns the number of characters consumed (including \a b) in case of success;
197 /// returns negative in case of error: Traits::Error or Traits::EndOfString
198 template <typename Traits, typename OutputPtr, typename InputPtr> inline
199 qsizetype fromUtf8(uchar b, OutputPtr &dst, InputPtr &src, InputPtr end)
200 {
201 qsizetype charsNeeded;
202 char32_t min_uc;
203 char32_t uc;
204
205 if (!Traits::skipAsciiHandling && b < 0x80) {
206 // US-ASCII
207 Traits::appendUtf16(dst, b);
208 return 1;
209 }
210
211 if (!Traits::isTrusted && Q_UNLIKELY(b <= 0xC1)) {
212 // an UTF-8 first character must be at least 0xC0
213 // however, all 0xC0 and 0xC1 first bytes can only produce overlong sequences
214 return Traits::Error;
215 } else if (b < 0xe0) {
216 charsNeeded = 2;
217 min_uc = 0x80;
218 uc = b & 0x1f;
219 } else if (b < 0xf0) {
220 charsNeeded = 3;
221 min_uc = 0x800;
222 uc = b & 0x0f;
223 } else if (b < 0xf5) {
224 charsNeeded = 4;
225 min_uc = 0x10000;
226 uc = b & 0x07;
227 } else {
228 // the last Unicode character is U+10FFFF
229 // it's encoded in UTF-8 as "\xF4\x8F\xBF\xBF"
230 // therefore, a byte higher than 0xF4 is not the UTF-8 first byte
231 return Traits::Error;
232 }
233
234 qptrdiff bytesAvailable = Traits::availableBytes(src, end);
235 if (Q_UNLIKELY(bytesAvailable < charsNeeded - 1)) {
236 // it's possible that we have an error instead of just unfinished bytes
237 if (bytesAvailable > 0 && !isContinuationByte(Traits::peekByte(src, 0)))
238 return Traits::Error;
239 if (bytesAvailable > 1 && !isContinuationByte(Traits::peekByte(src, 1)))
240 return Traits::Error;
241 return Traits::EndOfString;
242 }
243
244 // first continuation character
245 b = Traits::peekByte(src, 0);
246 if (!isContinuationByte(b))
247 return Traits::Error;
248 uc <<= 6;
249 uc |= b & 0x3f;
250
251 if (charsNeeded > 2) {
252 // second continuation character
253 b = Traits::peekByte(src, 1);
254 if (!isContinuationByte(b))
255 return Traits::Error;
256 uc <<= 6;
257 uc |= b & 0x3f;
258
259 if (charsNeeded > 3) {
260 // third continuation character
261 b = Traits::peekByte(src, 2);
262 if (!isContinuationByte(b))
263 return Traits::Error;
264 uc <<= 6;
265 uc |= b & 0x3f;
266 }
267 }
268
269 // we've decoded something; safety-check it
270 if (!Traits::isTrusted) {
271 if (uc < min_uc)
272 return Traits::Error;
273 if (QChar::isSurrogate(uc) || uc > QChar::LastValidCodePoint)
274 return Traits::Error;
275 if (!Traits::allowNonCharacters && QChar::isNonCharacter(uc))
276 return Traits::Error;
277 }
278
279 // write the UTF-16 sequence
280 if (!QChar::requiresSurrogates(uc)) {
281 // UTF-8 decoded and no surrogates are required
282 // detach if necessary
283 Traits::appendUtf16(dst, char16_t(uc));
284 } else {
285 // UTF-8 decoded to something that requires a surrogate pair
286 Traits::appendUcs4(dst, uc);
287 }
288
289 Traits::advanceByte(src, charsNeeded - 1);
290 return charsNeeded;
291 }
292}
293
300
301struct QUtf8
302{
303 static QChar *convertToUnicode(QChar *buffer, QByteArrayView in) noexcept
304 {
305 char16_t *dst = reinterpret_cast<char16_t *>(buffer);
306 dst = QUtf8::convertToUnicode(dst, in);
307 return reinterpret_cast<QChar *>(dst);
308 }
309
310 Q_CORE_EXPORT static char16_t* convertToUnicode(char16_t *dst, QByteArrayView in) noexcept;
311 static QString convertToUnicode(QByteArrayView in);
312 Q_CORE_EXPORT static QString convertToUnicode(QByteArrayView in, QStringConverter::State *state);
313
314 static QChar *convertToUnicode(QChar *out, QByteArrayView in, QStringConverter::State *state)
315 {
316 char16_t *buffer = reinterpret_cast<char16_t *>(out);
317 buffer = convertToUnicode(buffer, in, state);
318 return reinterpret_cast<QChar *>(buffer);
319 }
320
321 static char16_t *convertToUnicode(char16_t *dst, QByteArrayView in, QStringConverter::State *state);
322
323 static char *convertFromUnicode(char *dst, QStringView in) noexcept;
324 Q_CORE_EXPORT static QByteArray convertFromUnicode(QStringView in);
325 Q_CORE_EXPORT static QByteArray convertFromUnicode(QStringView in, QStringConverter::State *state);
326 static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state);
327 Q_CORE_EXPORT static char *convertFromLatin1(char *out, QLatin1StringView in);
332 static ValidUtf8Result isValidUtf8(QByteArrayView in);
333 static int compareUtf8(QByteArrayView utf8, QStringView utf16,
334 Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
335 static int compareUtf8(QByteArrayView utf8, QLatin1StringView s,
336 Qt::CaseSensitivity cs = Qt::CaseSensitive);
337 static int compareUtf8(QByteArrayView lhs, QByteArrayView rhs,
338 Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
339
340private:
341 template <typename OnErrorLambda> static char *
342 convertFromUnicode(char *out, QStringView in, OnErrorLambda &&onError) noexcept;
343 template <typename OnErrorLambda> static char16_t *
344 convertToUnicode(char16_t *dst, QByteArrayView in, OnErrorLambda &&onError) noexcept;
345};
346
347struct QUtf16
348{
350 static QChar *convertToUnicode(QChar *out, QByteArrayView, QStringConverter::State *state, DataEndianness endian);
352 static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state, DataEndianness endian);
353};
354
355struct QUtf32
356{
357 static QChar *convertToUnicode(QChar *out, QByteArrayView, QStringConverter::State *state, DataEndianness endian);
360 static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state, DataEndianness endian);
361};
362
363struct Q_CORE_EXPORT QLocal8Bit
364{
365#if !defined(Q_OS_WIN) || defined(QT_BOOTSTRAPPED)
366 static QString convertToUnicode(QByteArrayView in, QStringConverter::State *state)
367 { return QUtf8::convertToUnicode(in, state); }
368 static QByteArray convertFromUnicode(QStringView in, QStringConverter::State *state)
369 { return QUtf8::convertFromUnicode(in, state); }
370#else
371 static int checkUtf8();
372 static bool isUtf8()
373 {
374 Q_CONSTINIT
375 static QBasicAtomicInteger<qint8> result = { 0 };
376 int r = result.loadRelaxed();
377 if (r == 0) {
378 r = checkUtf8();
379 result.storeRelaxed(r);
380 }
381 return r > 0;
382 }
383 static QString convertToUnicode_sys(QByteArrayView, quint32, QStringConverter::State *);
384 static QString convertToUnicode_sys(QByteArrayView, QStringConverter::State *);
385 static QString convertToUnicode(QByteArrayView in, QStringConverter::State *state)
386 {
387 if (isUtf8())
388 return QUtf8::convertToUnicode(in, state);
389 return convertToUnicode_sys(in, state);
390 }
391 static QByteArray convertFromUnicode_sys(QStringView, quint32, QStringConverter::State *);
392 static QByteArray convertFromUnicode_sys(QStringView, QStringConverter::State *);
393 static QByteArray convertFromUnicode(QStringView in, QStringConverter::State *state)
394 {
395 if (isUtf8())
396 return QUtf8::convertFromUnicode(in, state);
397 return convertFromUnicode_sys(in, state);
398 }
399#endif
400};
401
402QT_END_NAMESPACE
403
404#endif // QSTRINGCONVERTER_P_H
\inmodule QtCore
QDataStream & operator>>(QDataStream &in, QByteArray &ba)
Reads a byte array into ba from the stream in and returns a reference to the stream.
quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard)
Definition qlist.h:80
static QLatin1StringView scriptToCode(QLocale::Script script)
Definition qlocale.cpp:254
QString toUpper(const QString &str, bool *ok) const
static const QLocalePrivate * get(const QLocale &l)
Definition qlocale_p.h:541
QString toLower(const QString &str, bool *ok) const
quint16 languageId() const
Definition qlocale_p.h:526
static QLocale::Language codeToLanguage(QStringView code, QLocale::LanguageCodeTypes codeTypes=QLocale::AnyLanguageCode) noexcept
Definition qlocale.cpp:109
const QLocaleData *const m_data
Definition qlocale_p.h:559
QLatin1StringView scriptCode() const
Definition qlocale_p.h:536
QLocale::MeasurementSystem measurementSystem() const
Definition qlocale.cpp:3556
quint16 territoryId() const
Definition qlocale_p.h:527
static QLatin1StringView territoryToCode(QLocale::Territory territory)
Definition qlocale.cpp:262
qsizetype m_index
Definition qlocale_p.h:561
static QLocale::Territory codeToTerritory(QStringView code) noexcept
Definition qlocale.cpp:210
static std::array< char, 4 > languageToCode(QLocale::Language language, QLocale::LanguageCodeTypes codeTypes=QLocale::AnyLanguageCode)
Definition qlocale.cpp:229
static QLocale::Script codeToScript(QStringView code) noexcept
Definition qlocale.cpp:204
QLocale::NumberOptions m_numberOptions
Definition qlocale_p.h:562
QLatin1StringView territoryCode() const
Definition qlocale_p.h:538
constexpr QLocalePrivate(const QLocaleData *data, qsizetype index, QLocale::NumberOptions numberOptions=QLocale::DefaultNumberOptions, int refs=0)
Definition qlocale_p.h:520
std::array< char, 4 > languageCode(QLocale::LanguageCodeTypes codeTypes=QLocale::AnyLanguageCode) const
Definition qlocale_p.h:532
static QBasicAtomicInt s_generation
Definition qlocale_p.h:564
QByteArray bcp47Name(char separator='-') const
Definition qlocale.cpp:489
QBasicAtomicInt ref
Definition qlocale_p.h:560
~QScopedArrayPointer()=default
const T & operator[](qsizetype i) const
T & operator[](qsizetype i)
friend bool operator==(std::nullptr_t, const QScopedPointer< T, Cleanup > &rhs) noexcept
bool operator!() const noexcept
T & operator*() const
friend bool operator==(const QScopedPointer< T, Cleanup > &lhs, std::nullptr_t) noexcept
T * operator->() const noexcept
bool isNull() const noexcept
T * get() const noexcept
void reset(T *other=nullptr) noexcept(noexcept(Cleanup::cleanup(std::declval< T * >())))
friend bool operator!=(std::nullptr_t, const QScopedPointer< T, Cleanup > &rhs) noexcept
friend bool operator!=(const QScopedPointer< T, Cleanup > &lhs, std::nullptr_t) noexcept
T * data() const noexcept
friend bool operator!=(const QScopedPointer< T, Cleanup > &lhs, const QScopedPointer< T, Cleanup > &rhs) noexcept
friend bool operator==(const QScopedPointer< T, Cleanup > &lhs, const QScopedPointer< T, Cleanup > &rhs) noexcept
qsizetype fallbackLocaleIndex() const
Definition qlocale_p.h:568
@ StringToAlternateQuotation
Definition qlocale_p.h:162
@ DateTimeToStringShort
Definition qlocale_p.h:150
@ StandaloneMonthNameLong
Definition qlocale_p.h:168
@ ListToSeparatedString
Definition qlocale_p.h:164
@ StandaloneDayNameNarrow
Definition qlocale_p.h:173
@ StandaloneMonthNameNarrow
Definition qlocale_p.h:170
@ StringToStandardQuotation
Definition qlocale_p.h:161
@ StandaloneDayNameShort
Definition qlocale_p.h:172
@ StandaloneDayNameLong
Definition qlocale_p.h:171
@ StandaloneMonthNameShort
Definition qlocale_p.h:169
virtual QLocale fallbackLocale() const
virtual QVariant query(QueryType type, QVariant &&in=QVariant()) const
Combined button and popup list for selecting options.
qsizetype fromUtf8(uchar b, OutputPtr &dst, InputPtr &src, InputPtr end)
int toUtf8(char16_t u, OutputPtr &dst, InputPtr &src, InputPtr end)
bool isContinuationByte(uchar b)
constexpr char ascii_space_chars[]
Definition qlocale_p.h:71
constexpr auto makeCharacterSetMatch() noexcept
Definition qlocale_p.h:80
static constexpr bool isLowerCaseAscii(char c)
static const quint16 crc_tbl[16]
QByteArray qCompress(const uchar *data, qsizetype nbytes, int compressionLevel)
ZLibOp
@ Decompression
static Q_DECL_COLD_FUNCTION const char * zlibOpAsString(ZLibOp op)
static QByteArray toCase_template(T &input, uchar(*lookup)(uchar))
static void q_fromPercentEncoding(QByteArray *ba, char percent)
int qstrnicmp(const char *str1, qsizetype len1, const char *str2, qsizetype len2)
static qsizetype lastIndexOfHelper(const char *haystack, qsizetype l, const char *needle, qsizetype ol, qsizetype from)
static constexpr bool isUpperCaseAscii(char c)
static QByteArray xxflate(ZLibOp op, QArrayDataPointer< char > out, QByteArrayView input, qxp::function_ref< int(z_stream *) const > init, qxp::function_ref< int(z_stream *, size_t) const > processChunk, qxp::function_ref< void(z_stream *) const > deinit)
static constexpr uchar asciiLower(uchar c)
static qsizetype countCharHelper(QByteArrayView haystack, char needle) noexcept
static constexpr uchar asciiUpper(uchar c)
Q_CORE_EXPORT char * qstrncpy(char *dst, const char *src, size_t len)
Q_CORE_EXPORT int qstrnicmp(const char *, const char *, size_t len)
Q_CORE_EXPORT int qstricmp(const char *, const char *)
Q_CORE_EXPORT char * qstrdup(const char *)
Q_CORE_EXPORT char * qstrcpy(char *dst, const char *src)
Q_DECL_PURE_FUNCTION Q_CORE_EXPORT const void * qmemrchr(const void *s, int needle, size_t n) noexcept
Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2)
#define __has_include(x)
#define __has_feature(x)
bool qt_splitLocaleName(QStringView name, QStringView *lang=nullptr, QStringView *script=nullptr, QStringView *cntry=nullptr) noexcept
Definition qlocale.cpp:649
Q_DECLARE_TYPEINFO(QLocaleData::GroupSizes, Q_PRIMITIVE_TYPE)
Q_DECLARE_TYPEINFO(QLocaleId, Q_PRIMITIVE_TYPE)
qsizetype qt_repeatCount(QStringView s) noexcept
Definition qlocale.cpp:762
constexpr bool ascii_isspace(uchar c) noexcept
Definition qlocale_p.h:587
#define ForEachQLocaleRange(X)
Definition qlocale_p.h:471
QString qt_readEscapedFormatString(QStringView format, qsizetype *idx)
Definition qlocale.cpp:712
StrayCharacterMode
@ TrailingJunkAllowed
@ TrailingJunkProhibited
@ WhitespacesAllowed
Q_CORE_EXPORT double qstrntod(const char *s00, qsizetype len, char const **se, bool *ok)
double qstrtod(const char *s00, char const **se, bool *ok)
QSimpleParsedNumber< double > qt_asciiToDouble(const char *num, qsizetype numLen, StrayCharacterMode strayCharMode=TrailingJunkProhibited)
QByteArray qdtoAscii(double d, QLocaleData::DoubleForm form, int precision, bool uppercase)
char * qulltoa2(char *p, qulonglong n, int base)
int wholePartSpace(double d)
QString qdtoBasicLatin(double d, QLocaleData::DoubleForm form, int precision, bool uppercase)
UcsInt unicodeForDigit(uint digit, UcsInt zero)
QString qulltoa(qulonglong l, int base, const QStringView zero)
QSimpleParsedNumber< qulonglong > qstrntoull(const char *nptr, qsizetype size, int base)
void qt_doubleToAscii(double d, QLocaleData::DoubleForm form, int precision, char *buf, qsizetype bufSize, bool &sign, int &length, int &decpt)
QString qulltoBasicLatin(qulonglong l, int base, bool negative)
QScopedPointerObjectDeleteLater< QObject > QScopedPointerDeleteLater
constexpr size_t qHash(const QSize &s, size_t seed=0) noexcept
Definition qsize.h:191
@ LittleEndianness
@ DetectEndianness
@ BigEndianness
CharBuff buff
Definition qlocale_p.h:239
static constexpr int MaxRange
Definition qlocale_p.h:49
constexpr bool matches(uchar c) const noexcept
Definition qlocale_p.h:61
constexpr QCharacterSetMatch(std::string_view set) noexcept
Definition qlocale_p.h:52
static char16_t * convertToUnicode(char16_t *dst, QLatin1StringView in) noexcept
Definition qstring.cpp:5720
static QChar * convertToUnicode(QChar *dst, QByteArrayView in, QStringConverter::State *state) noexcept
static char * convertFromUnicode(char *out, QStringView in, QStringConverter::State *state) noexcept
static QChar * convertToUnicode(QChar *buffer, QLatin1StringView in) noexcept
static Q_CORE_EXPORT char * convertFromUnicode(char *out, QStringView in) noexcept
Definition qstring.cpp:5727
QStringView viewListEntry(const char16_t *table, qsizetype index) const
Definition qlocale_p.h:429
char32_t ucsFirst(const char16_t *table) const
Definition qlocale_p.h:433
QString getData(const char16_t *table) const
Definition qlocale_p.h:415
QString getListEntry(const char16_t *table, qsizetype index) const
Definition qlocale_p.h:425
QStringView viewData(const char16_t *table) const
Definition qlocale_p.h:421
void setZero(QStringView zero)
Definition qlocale_p.h:355
bool isValid(NumberMode mode) const
Definition qlocale_p.h:375
QString positiveSign() const
Definition qlocale.cpp:1110
static float convertDoubleToFloat(double d, bool *ok)
Definition qlocale_p.h:319
QString groupSeparator() const
Definition qlocale.cpp:1069
QSimpleParsedNumber< qint64 > stringToLongLong(QStringView str, int base, QLocale::NumberOptions options) const
Definition qlocale.cpp:4831
char32_t zeroUcs() const
Definition qlocale.cpp:1089
quint8 m_grouping_least
Definition qlocale_p.h:512
QString zeroDigit() const
Definition qlocale.cpp:1084
bool numberToCLocale(QStringView s, QLocale::NumberOptions number_options, NumberMode mode, CharBuff *result) const
Definition qlocale.cpp:4609
quint8 m_grouping_higher
Definition qlocale_p.h:511
QString decimalPoint() const
Definition qlocale.cpp:1064
QString doubleToString(double d, int precision=-1, DoubleForm form=DFSignificantDigits, int width=-1, unsigned flags=NoFlags) const
Definition qlocale.cpp:4056
static Q_AUTOTEST_EXPORT bool allLocaleDataRows(bool(*check)(qsizetype, const QLocaleData &))
Definition qlocale.cpp:519
quint8 m_weekend_start
Definition qlocale_p.h:508
quint8 m_currency_digits
Definition qlocale_p.h:505
QLocaleId id() const
Definition qlocale_p.h:396
QString listSeparator() const
Definition qlocale.cpp:1079
static QSimpleParsedNumber< quint64 > bytearrayToUnsLongLong(QByteArrayView num, int base)
Definition qlocale.cpp:4878
QString percentSign() const
Definition qlocale.cpp:1074
@ BlankBeforePositive
Definition qlocale_p.h:264
@ AddTrailingZeroes
Definition qlocale_p.h:261
double stringToDouble(QStringView str, bool *ok, QLocale::NumberOptions options) const
Definition qlocale.cpp:4815
QString longLongToString(qint64 l, int precision=-1, int base=10, int width=-1, unsigned flags=NoFlags) const
Definition qlocale.cpp:4297
@ DoubleScientificMode
Definition qlocale_p.h:275
@ DoubleStandardMode
Definition qlocale_p.h:275
@ DFSignificantDigits
Definition qlocale_p.h:255
quint8 m_first_day_of_week
Definition qlocale_p.h:507
quint8 m_weekend_end
Definition qlocale_p.h:509
NumericData numericData(NumberMode mode) const
Definition qlocale.cpp:4382
quint8 m_currency_rounding
Definition qlocale_p.h:506
QString exponentSeparator() const
Definition qlocale.cpp:1115
static qsizetype findLocaleIndex(QLocaleId localeId) noexcept
Definition qlocale.cpp:579
QString negativeSign() const
Definition qlocale.cpp:1105
static const QLocaleData * c() noexcept
Definition qlocale.cpp:953
QSimpleParsedNumber< quint64 > stringToUnsLongLong(QStringView str, int base, QLocale::NumberOptions options) const
Definition qlocale.cpp:4842
QString unsLongLongToString(quint64 l, int precision=-1, int base=10, int width=-1, unsigned flags=NoFlags) const
Definition qlocale.cpp:4312
quint8 m_grouping_first
Definition qlocale_p.h:510
QLocaleId withLikelySubtagsAdded() const noexcept
Fill in blank fields of a locale ID.
Definition qlocale.cpp:321
QLocaleId withLikelySubtagsRemoved() const noexcept
Definition qlocale.cpp:410
ushort script_id
Definition qlocale_p.h:223
bool operator==(QLocaleId other) const noexcept
Definition qlocale_p.h:192
bool matchesAll() const noexcept
Definition qlocale_p.h:201
bool isValid() const noexcept
Definition qlocale_p.h:196
bool operator!=(QLocaleId other) const noexcept
Definition qlocale_p.h:194
bool acceptScriptTerritory(QLocaleId other) const noexcept
Definition qlocale_p.h:212
ushort territory_id
Definition qlocale_p.h:223
bool acceptLanguage(quint16 lang) const noexcept
Definition qlocale_p.h:206
QByteArray name(char separator='-') const
Definition qlocale.cpp:434
ushort language_id
Definition qlocale_p.h:223
static void cleanup(T *pointer) noexcept
void operator()(T *pointer) const noexcept
void operator()(T *pointer) const
static void cleanup(T *pointer)
void operator()(void *pointer) const noexcept
static void cleanup(void *pointer) noexcept
CurrencyToStringArgument(const QVariant &v, const QString &s)
Definition qlocale_p.h:119
static QChar * convertToUnicode(QChar *out, QByteArrayView, QStringConverter::State *state, DataEndianness endian)
static char * convertFromUnicode(char *out, QStringView in, QStringConverter::State *state, DataEndianness endian)
static char * convertFromUnicode(char *out, QStringView in, QStringConverter::State *state, DataEndianness endian)
static QChar * convertToUnicode(QChar *out, QByteArrayView, QStringConverter::State *state, DataEndianness endian)
static const bool skipAsciiHandling
static void appendByte(qchar8_t *&ptr, qchar8_t b)
static uchar peekByte(const uchar *ptr, qsizetype n=0)
static qptrdiff availableBytes(const qchar8_t *ptr, const qchar8_t *end)
static void appendByte(uchar *&ptr, uchar b)
static void advanceByte(const uchar *&ptr, qsizetype n=1)
static const bool isTrusted
static void appendUtf16(char32_t *&ptr, char16_t uc)
static const bool skipAsciiHandling
static char16_t peekUtf16(const char16_t *ptr, qsizetype n=0)
static const int Error
static void appendUcs4(char16_t *&ptr, char32_t uc)
static const int EndOfString
static void advanceUtf16(const char16_t *&ptr, qsizetype n=1)
static uchar peekByte(const char *ptr, qsizetype n=0)
static void advanceByte(const char *&ptr, qsizetype n=1)
static uchar peekByte(const qchar8_t *ptr, qsizetype n=0)
static void appendUtf16(char16_t *&ptr, char16_t uc)
static const bool allowNonCharacters
static qptrdiff availableUtf16(const char16_t *ptr, const char16_t *end)
static qptrdiff availableBytes(const char *ptr, const char *end)
static void appendUcs4(char32_t *&ptr, char32_t uc)
static qptrdiff availableBytes(const uchar *ptr, const uchar *end)
static void advanceByte(const qchar8_t *&ptr, qsizetype n=1)
static Q_CORE_EXPORT char16_t * convertToUnicode(char16_t *dst, QByteArrayView in) noexcept
static int compareUtf8(QByteArrayView utf8, QStringView utf16, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
static QChar * convertToUnicode(QChar *buffer, QByteArrayView in) noexcept
static ValidUtf8Result isValidUtf8(QByteArrayView in)
static QString convertToUnicode(QByteArrayView in)
static Q_CORE_EXPORT char * convertFromLatin1(char *out, QLatin1StringView in)
static char16_t * convertToUnicode(char16_t *dst, QByteArrayView in, QStringConverter::State *state)
static QChar * convertToUnicode(QChar *out, QByteArrayView in, QStringConverter::State *state)
static char * convertFromUnicode(char *out, QStringView in, QStringConverter::State *state)
static char * convertFromUnicode(char *dst, QStringView in) noexcept