summaryrefslogtreecommitdiffstats
path: root/src/corelib/text/qstringconverter_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/text/qstringconverter_p.h')
-rw-r--r--src/corelib/text/qstringconverter_p.h79
1 files changed, 70 insertions, 9 deletions
diff --git a/src/corelib/text/qstringconverter_p.h b/src/corelib/text/qstringconverter_p.h
index 7533e094a9..e68ffb2bb0 100644
--- a/src/corelib/text/qstringconverter_p.h
+++ b/src/corelib/text/qstringconverter_p.h
@@ -24,9 +24,37 @@
QT_BEGIN_NAMESPACE
#ifndef __cpp_char8_t
-enum char8_t : uchar {};
+enum qchar8_t : uchar {};
+#else
+using qchar8_t = char8_t;
#endif
+struct QLatin1
+{
+ // Defined in qstring.cpp
+ static char16_t *convertToUnicode(char16_t *dst, QLatin1StringView in) noexcept;
+
+ static QChar *convertToUnicode(QChar *buffer, QLatin1StringView in) noexcept
+ {
+ char16_t *dst = reinterpret_cast<char16_t *>(buffer);
+ dst = convertToUnicode(dst, in);
+ return reinterpret_cast<QChar *>(dst);
+ }
+
+ static QChar *convertToUnicode(QChar *dst, QByteArrayView in,
+ [[maybe_unused]] QStringConverterBase::State *state) noexcept
+ {
+ Q_ASSERT(state);
+
+ return convertToUnicode(dst, QLatin1StringView(in.data(), in.size()));
+ }
+
+ static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state) noexcept;
+
+ // Defined in qstring.cpp
+ static char *convertFromUnicode(char *out, QStringView in) noexcept;
+};
+
struct QUtf8BaseTraits
{
static const bool isTrusted = false;
@@ -38,25 +66,34 @@ struct QUtf8BaseTraits
static void appendByte(uchar *&ptr, uchar b)
{ *ptr++ = b; }
- static void appendByte(char8_t *&ptr, char8_t b)
+ static void appendByte(qchar8_t *&ptr, qchar8_t b)
{ *ptr++ = b; }
+ static uchar peekByte(const char *ptr, qsizetype n = 0)
+ { return ptr[n]; }
+
static uchar peekByte(const uchar *ptr, qsizetype n = 0)
{ return ptr[n]; }
- static uchar peekByte(const char8_t *ptr, qsizetype n = 0)
+ static uchar peekByte(const qchar8_t *ptr, qsizetype n = 0)
{ return ptr[n]; }
+ static qptrdiff availableBytes(const char *ptr, const char *end)
+ { return end - ptr; }
+
static qptrdiff availableBytes(const uchar *ptr, const uchar *end)
{ return end - ptr; }
- static qptrdiff availableBytes(const char8_t *ptr, const char8_t *end)
+ static qptrdiff availableBytes(const qchar8_t *ptr, const qchar8_t *end)
{ return end - ptr; }
+ static void advanceByte(const char *&ptr, qsizetype n = 1)
+ { ptr += n; }
+
static void advanceByte(const uchar *&ptr, qsizetype n = 1)
{ ptr += n; }
- static void advanceByte(const char8_t *&ptr, qsizetype n = 1)
+ static void advanceByte(const qchar8_t *&ptr, qsizetype n = 1)
{ ptr += n; }
static void appendUtf16(char16_t *&ptr, char16_t uc)
@@ -261,20 +298,41 @@ enum DataEndianness
struct QUtf8
{
- Q_CORE_EXPORT static QChar *convertToUnicode(QChar *buffer, QByteArrayView in) noexcept;
+ static QChar *convertToUnicode(QChar *buffer, QByteArrayView in) noexcept
+ {
+ char16_t *dst = reinterpret_cast<char16_t *>(buffer);
+ dst = QUtf8::convertToUnicode(dst, in);
+ return reinterpret_cast<QChar *>(dst);
+ }
+
+ Q_CORE_EXPORT static char16_t* convertToUnicode(char16_t *dst, QByteArrayView in) noexcept;
static QString convertToUnicode(QByteArrayView in);
Q_CORE_EXPORT static QString convertToUnicode(QByteArrayView in, QStringConverter::State *state);
- static QChar *convertToUnicode(QChar *out, QByteArrayView in, QStringConverter::State *state);
+
+ static QChar *convertToUnicode(QChar *out, QByteArrayView in, QStringConverter::State *state)
+ {
+ char16_t *buffer = reinterpret_cast<char16_t *>(out);
+ buffer = convertToUnicode(buffer, in, state);
+ return reinterpret_cast<QChar *>(buffer);
+ }
+
+ static char16_t *convertToUnicode(char16_t *dst, QByteArrayView in, QStringConverter::State *state);
+
Q_CORE_EXPORT static QByteArray convertFromUnicode(QStringView in);
Q_CORE_EXPORT static QByteArray convertFromUnicode(QStringView in, QStringConverterBase::State *state);
static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state);
+ Q_CORE_EXPORT static char *convertFromLatin1(char *out, QLatin1StringView in);
struct ValidUtf8Result {
bool isValidUtf8;
bool isValidAscii;
};
static ValidUtf8Result isValidUtf8(QByteArrayView in);
- static int compareUtf8(QByteArrayView utf8, QStringView utf16) noexcept;
- static int compareUtf8(QByteArrayView utf8, QLatin1StringView s);
+ static int compareUtf8(QByteArrayView utf8, QStringView utf16,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+ static int compareUtf8(QByteArrayView utf8, QLatin1StringView s,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive);
+ static int compareUtf8(QByteArrayView lhs, QByteArrayView rhs,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
};
struct QUtf16
@@ -304,6 +362,7 @@ struct Q_CORE_EXPORT QLocal8Bit
static int checkUtf8();
static bool isUtf8()
{
+ Q_CONSTINIT
static QBasicAtomicInteger<qint8> result = { 0 };
int r = result.loadRelaxed();
if (r == 0) {
@@ -312,6 +371,7 @@ struct Q_CORE_EXPORT QLocal8Bit
}
return r > 0;
}
+ static QString convertToUnicode_sys(QByteArrayView, quint32, QStringConverter::State *);
static QString convertToUnicode_sys(QByteArrayView, QStringConverter::State *);
static QString convertToUnicode(QByteArrayView in, QStringConverter::State *state)
{
@@ -319,6 +379,7 @@ struct Q_CORE_EXPORT QLocal8Bit
return QUtf8::convertToUnicode(in, state);
return convertToUnicode_sys(in, state);
}
+ static QByteArray convertFromUnicode_sys(QStringView, quint32, QStringConverter::State *);
static QByteArray convertFromUnicode_sys(QStringView, QStringConverter::State *);
static QByteArray convertFromUnicode(QStringView in, QStringConverter::State *state)
{