summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/text/qstringconverter.cpp6
-rw-r--r--src/corelib/text/qstringconverter.h26
-rw-r--r--tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp12
3 files changed, 40 insertions, 4 deletions
diff --git a/src/corelib/text/qstringconverter.cpp b/src/corelib/text/qstringconverter.cpp
index 2af1e5df27..30da0add8f 100644
--- a/src/corelib/text/qstringconverter.cpp
+++ b/src/corelib/text/qstringconverter.cpp
@@ -1785,12 +1785,14 @@ const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
/*!
\fn QByteArray QStringEncoder::operator()(const QString &in)
+ \fn QByteArray QStringEncoder::encode(const QString &in)
Converts \a in and returns the data as a byte array.
*/
/*!
\fn QByteArray QStringEncoder::operator()(QStringView in)
+ \fn QByteArray QStringEncoder::encode(QStringView in)
\overload
Converts \a in and returns the data as a byte array.
@@ -1798,6 +1800,7 @@ const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
/*!
\fn QByteArray QStringEncoder::operator()(const QChar *in, qsizetype length)
+ \fn QByteArray QStringEncoder::encode(const QChar *in, qsizetype length)
\overload
Converts \a length QChars from \a in and returns the data as a byte array.
@@ -1885,12 +1888,14 @@ const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
/*!
\fn QString QStringDecoder::operator()(const QByteArray &ba)
+ \fn QString QStringDecoder::decode(const QByteArray &ba)
Converts \a ba and returns the data as a QString.
*/
/*!
\fn QString QStringDecoder::operator()(const char *in, qsizetype size)
+ \fn QString QStringDecoder::decode(const char *in, qsizetype size)
\overload
Converts a byte array containing the first \a size bytes of the array \a in
@@ -1899,6 +1904,7 @@ const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
/*!
\fn QString QStringDecoder::operator()(const char *chars)
+ \fn QString QStringDecoder::decode(const char *chars)
\overload
Converts \a chars and returns the data as a QString. \a chars is assumed to
diff --git a/src/corelib/text/qstringconverter.h b/src/corelib/text/qstringconverter.h
index 0049b937af..8766968e6d 100644
--- a/src/corelib/text/qstringconverter.h
+++ b/src/corelib/text/qstringconverter.h
@@ -210,13 +210,16 @@ public:
QByteArray operator()(const QString &in);
QByteArray operator()(QStringView in);
QByteArray operator()(const QChar *in, qsizetype length);
+ QByteArray encode(const QString &in);
+ QByteArray encode(QStringView in);
+ QByteArray encode(const QChar *in, qsizetype length);
#else
template<typename T>
struct DecodedData
{
QStringEncoder *encoder;
T data;
- operator QByteArray() const { return encoder->encode(QStringView(data)); }
+ operator QByteArray() const { return encoder->encodeAsByteArray(QStringView(data)); }
};
DecodedData<const QString &> operator()(const QString &str)
{ return DecodedData<const QString &>{this, str}; }
@@ -224,6 +227,12 @@ public:
{ return DecodedData<QStringView>{this, in}; }
DecodedData<QStringView> operator()(const QChar *in, qsizetype length)
{ return (*this)(QStringView(in, length)); }
+ DecodedData<const QString &> encode(const QString &str)
+ { return DecodedData<const QString &>{this, str}; }
+ DecodedData<QStringView> encode(QStringView in)
+ { return DecodedData<QStringView>{this, in}; }
+ DecodedData<QStringView> encode(const QChar *in, qsizetype length)
+ { return (*this)(QStringView(in, length)); }
#endif
qsizetype requiredSpace(qsizetype inputLength) const
@@ -231,7 +240,7 @@ public:
char *appendToBuffer(char *out, const QChar *in, qsizetype length)
{ return iface->fromUtf16(out, QStringView(in, length), &state); }
private:
- QByteArray encode(QStringView in)
+ QByteArray encodeAsByteArray(QStringView in)
{
QByteArray result(iface->fromUtf16Len(in.size()), Qt::Uninitialized);
char *out = result.data();
@@ -270,13 +279,16 @@ public:
QString operator()(const QByteArray &ba);
QString operator()(const char *in, qsizetype size);
QString operator()(const char *chars);
+ QString decode(const QByteArray &ba);
+ QString decode(const char *in, qsizetype size);
+ QString decode(const char *chars);
#else
template<typename T>
struct EncodedData
{
QStringDecoder *decoder;
T data;
- operator QString() const { return decoder->decode(data.data(), data.length()); }
+ operator QString() const { return decoder->decodeAsString(data.data(), data.length()); }
};
EncodedData<const QByteArray &> operator()(const QByteArray &ba)
{ return EncodedData<const QByteArray &>{this, ba}; }
@@ -284,6 +296,12 @@ public:
{ return EncodedData<View>{this, {in, length}}; }
EncodedData<View> operator()(const char *chars)
{ return EncodedData<View>{this, {chars, qsizetype(strlen(chars))}}; }
+ EncodedData<const QByteArray &> decode(const QByteArray &ba)
+ { return EncodedData<const QByteArray &>{this, ba}; }
+ EncodedData<View> decode(const char *in, qsizetype length)
+ { return EncodedData<View>{this, {in, length}}; }
+ EncodedData<View> decode(const char *chars)
+ { return EncodedData<View>{this, {chars, qsizetype(strlen(chars))}}; }
#endif
qsizetype requiredSpace(qsizetype inputLength) const
@@ -291,7 +309,7 @@ public:
QChar *appendToBuffer(QChar *out, const char *in, qsizetype length)
{ return iface->toUtf16(out, in, length, &state); }
private:
- QString decode(const char *in, qsizetype length)
+ QString decodeAsString(const char *in, qsizetype length)
{
QString result(iface->toUtf16Len(length), Qt::Uninitialized);
QChar *out = result.data();
diff --git a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp
index 58ae28bbf4..bf3f30bb82 100644
--- a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp
+++ b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp
@@ -114,9 +114,13 @@ void tst_QStringConverter::convertUtf8()
QString uniString = decoder(ba);
QCOMPARE(uniString, QString::fromUtf8(ba));
QCOMPARE(ba, uniString.toUtf8());
+ uniString = decoder.decode(ba);
+ QCOMPARE(uniString, QString::fromUtf8(ba));
+ QCOMPARE(ba, uniString.toUtf8());
QStringEncoder encoder(QStringEncoder::Utf8);
QCOMPARE(ba, encoder(uniString));
+ QCOMPARE(ba, encoder.encode(uniString));
}
{
@@ -127,12 +131,20 @@ void tst_QStringConverter::convertUtf8()
for (int i = 0; i < ba.size(); ++i)
uniString += decoder(ba.constData() + i, 1);
QCOMPARE(uniString, QString::fromUtf8(ba));
+ uniString.clear();
+ for (int i = 0; i < ba.size(); ++i)
+ uniString += decoder.decode(ba.constData() + i, 1);
+ QCOMPARE(uniString, QString::fromUtf8(ba));
QStringEncoder encoder(QStringEncoder::Utf8);
QByteArray reencoded;
for (int i = 0; i < uniString.size(); ++i)
reencoded += encoder(uniString.constData() + i, 1);
QCOMPARE(ba, encoder(uniString));
+ reencoded.clear();
+ for (int i = 0; i < uniString.size(); ++i)
+ reencoded += encoder.encode(uniString.constData() + i, 1);
+ QCOMPARE(ba, encoder(uniString));
}
}