diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-06-19 10:11:57 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-06-26 14:41:42 +0200 |
commit | e81330d327c3a9525a733871fa5cb938f8820525 (patch) | |
tree | 7fe27865c943ad2920e9feb45a249a2e6b3d0154 /src/corelib/text/qstringconverter.h | |
parent | 873c09978814741d987ce54cbfa46d3688f29447 (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.h | 26 |
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(); |