From 002695527033d45095ab825198306a3c512ac6d2 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 5 Jun 2024 20:55:22 +0200 Subject: [PATCH] QStringConverter: port (name, Flags) ctor to QAnyStringView These kinds of lookup functions are no-brainers for QAnyStringView. This is required to replace the QStringEncoder/Decoder constructors from QString, newly added for 6.8, and found in API review to be better written using QAnyStringView. Because this is API-Review-relevant, keep the implementation pessimized. It's not worse than the code that it replaces (toLatin1() on an unshared QString performs in-place conversion), and can be improved later. Task-number: QTBUG-126108 Change-Id: I4a0d1840d4754670b2e2f20d768ed98f7e1937d5 Reviewed-by: Thiago Macieira (cherry picked from commit f6c11ac4f20a16d0b2113014e2dac63b95d946ae) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/compat/removed_api.cpp | 4 ++++ src/corelib/text/qstringconverter.cpp | 6 +++++- src/corelib/text/qstringconverter_base.h | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/corelib/compat/removed_api.cpp b/src/corelib/compat/removed_api.cpp index 655da8bd409..0963602ca59 100644 --- a/src/corelib/compat/removed_api.cpp +++ b/src/corelib/compat/removed_api.cpp @@ -1148,6 +1148,10 @@ bool QtPrivate::ResultIteratorBase::operator!=(const QtPrivate::ResultIteratorBa #include "qstringconverter.h" +QStringConverter::QStringConverter(const char *name, Flags f) + : QStringConverter(QAnyStringView{name}, f) +{} + auto QStringConverter::encodingForName(const char *name) noexcept -> std::optional { return encodingForName(QAnyStringView{name}); diff --git a/src/corelib/text/qstringconverter.cpp b/src/corelib/text/qstringconverter.cpp index 745261cd559..03715b54296 100644 --- a/src/corelib/text/qstringconverter.cpp +++ b/src/corelib/text/qstringconverter.cpp @@ -2146,6 +2146,10 @@ struct QStringConverterICU : QStringConverter return conv; } + static const QStringConverter::Interface * + make_icu_converter(QStringConverterBase::State *state, QAnyStringView name) + { return make_icu_converter(state, name.toString().toLatin1().constData()); } // ### optimize + static const QStringConverter::Interface *make_icu_converter( QStringConverterBase::State *state, const char *name) @@ -2183,7 +2187,7 @@ struct QStringConverterICU : QStringConverter /*! \internal */ -QStringConverter::QStringConverter(const char *name, Flags f) +QStringConverter::QStringConverter(QAnyStringView name, Flags f) : iface(nullptr), state(f) { auto e = encodingForName(name); diff --git a/src/corelib/text/qstringconverter_base.h b/src/corelib/text/qstringconverter_base.h index 0c4a19cbe7b..a78c64a96ba 100644 --- a/src/corelib/text/qstringconverter_base.h +++ b/src/corelib/text/qstringconverter_base.h @@ -138,7 +138,10 @@ protected: constexpr explicit QStringConverter(const Interface *i) noexcept : iface(i) {} +#if QT_CORE_REMOVED_SINCE(6, 8) Q_CORE_EXPORT explicit QStringConverter(const char *name, Flags f); +#endif + Q_CORE_EXPORT explicit QStringConverter(QAnyStringView name, Flags f); ~QStringConverter() = default;