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 <thiago.macieira@intel.com>
(cherry picked from commit f6c11ac4f20a16d0b2113014e2dac63b95d946ae)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Marc Mutz 2024-06-05 20:55:22 +02:00 committed by Qt Cherry-pick Bot
parent 09c3e9da1f
commit 0026955270
3 changed files with 12 additions and 1 deletions

View File

@ -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<Encoding>
{
return encodingForName(QAnyStringView{name});

View File

@ -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);

View File

@ -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;