From 01ef951c6570afcebc73c363be039a4d62e07679 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 19 Jan 2023 15:53:16 +0100 Subject: [PATCH] QString: port toUcs4_helper() to char16_t/char32_t This gets rid of 50% of the casts required to call the function, and removes the last QtCore QStringView(ushort*) user. As a drive-by, replace an (allowed, but) fishy &str[0] with str.data(), the mutable overload of which has been available since C++17. Task-number: QTBUG-110403 Change-Id: Iad494025b61c53d991e59cc73198bb014a422a93 Reviewed-by: Ahmad Samir Reviewed-by: Thiago Macieira --- src/corelib/compat/removed_api.cpp | 16 ++++++++++++++++ src/corelib/text/qstring.cpp | 2 +- src/corelib/text/qstring.h | 12 +++++++----- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/corelib/compat/removed_api.cpp b/src/corelib/compat/removed_api.cpp index 5ee844409a0..4a9cef2d41e 100644 --- a/src/corelib/compat/removed_api.cpp +++ b/src/corelib/compat/removed_api.cpp @@ -493,3 +493,19 @@ void QXmlStreamWriter::writeStartElement(const QString &namespaceUri, const QStr // order sections alphabetically to reduce chances of merge conflicts #endif // QT_CORE_REMOVED_SINCE(6, 5) + +#if QT_CORE_REMOVED_SINCE(6, 6) + +#include "qstring.h" + +qsizetype QString::toUcs4_helper(const ushort *uc, qsizetype length, uint *out) +{ + return toUcs4_helper(reinterpret_cast(uc), length, + reinterpret_cast(out)); +} + +// #include "qotherheader.h" +// // implement removed functions from qotherheader.h +// order sections alphabetically to reduce chances of merge conflicts + +#endif // QT_CORE_REMOVED_SINCE(6, 6) diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index e2eb27a4d4b..d0836c3b929 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -2419,7 +2419,7 @@ void qtWarnAboutInvalidRegularExpression(const QString &pattern, const char *whe toStdU32String() */ -qsizetype QString::toUcs4_helper(const ushort *uc, qsizetype length, uint *out) +qsizetype QString::toUcs4_helper(const char16_t *uc, qsizetype length, char32_t *out) { qsizetype count = 0; diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index b1ab89ec725..1da4fada9c9 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -859,7 +859,10 @@ private: static QByteArray toLatin1_helper_inplace(QString &); static QByteArray toUtf8_helper(const QString &); static QByteArray toLocal8Bit_helper(const QChar *data, qsizetype size); - static qsizetype toUcs4_helper(const ushort *uc, qsizetype length, uint *out); // ### Qt 7 char16_t +#if QT_CORE_REMOVED_SINCE(6, 6) + static qsizetype toUcs4_helper(const ushort *uc, qsizetype length, uint *out); +#endif + static qsizetype toUcs4_helper(const char16_t *uc, qsizetype length, char32_t *out); static qlonglong toIntegral_helper(QStringView string, bool *ok, int base); static qulonglong toIntegral_helper(QStringView string, bool *ok, uint base); void replace_helper(size_t *indices, qsizetype nIndices, qsizetype blen, const QChar *after, qsizetype alen); @@ -1031,8 +1034,7 @@ qsizetype QStringView::toWCharArray(wchar_t *array) const memcpy(array, src, sizeof(QChar) * size()); return size(); } else { - return QString::toUcs4_helper(reinterpret_cast(data()), size(), - reinterpret_cast(array)); + return QString::toUcs4_helper(utf16(), size(), reinterpret_cast(array)); } } @@ -1228,8 +1230,8 @@ inline QString QString::fromStdU32String(const std::u32string &s) inline std::u32string QString::toStdU32String() const { std::u32string u32str(size(), char32_t(0)); - qsizetype len = toUcs4_helper(reinterpret_cast(constData()), - size(), reinterpret_cast(&u32str[0])); + const qsizetype len = toUcs4_helper(reinterpret_cast(data()), + size(), u32str.data()); u32str.resize(len); return u32str; }