summaryrefslogtreecommitdiffstats
path: root/src/corelib/text/qstringconverter.h
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-06-19 10:11:57 +0200
committerLars Knoll <lars.knoll@qt.io>2020-06-26 14:41:42 +0200
commite81330d327c3a9525a733871fa5cb938f8820525 (patch)
tree7fe27865c943ad2920e9feb45a249a2e6b3d0154 /src/corelib/text/qstringconverter.h
parent873c09978814741d987ce54cbfa46d3688f29447 (diff)
Add explicit encode()/decode() methods to QStringConverter
The functional style interface is nice, but does feel alien in some contexts, so better also have explicit encode and decode methods. Change-Id: Ic07ced15f65cdb3a7f1cf044041e341d2ef87f79 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/corelib/text/qstringconverter.h')
-rw-r--r--src/corelib/text/qstringconverter.h26
1 files changed, 22 insertions, 4 deletions
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();