diff options
author | The Qt Project <gerrit-noreply@qt-project.org> | 2019-10-14 08:49:14 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2019-10-14 08:49:14 +0000 |
commit | eba59bfd14d0ea29f36e80be81137d26cc67e23a (patch) | |
tree | 69ff8601b3d4a62bea38e1a32245f45cb744aaac /src/corelib/serialization/qcborvalue_p.h | |
parent | f03ac58b1ecc24f01cb83b275a9b6088f9483545 (diff) | |
parent | f4b4c4f79b629498f3cddbbc10df8c1b4d6020d9 (diff) |
Merge "Merge remote-tracking branch 'origin/wip/qt6' into wip/cmake" into wip/cmake
Diffstat (limited to 'src/corelib/serialization/qcborvalue_p.h')
-rw-r--r-- | src/corelib/serialization/qcborvalue_p.h | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/src/corelib/serialization/qcborvalue_p.h b/src/corelib/serialization/qcborvalue_p.h index 4050d18fa9..590c2d6e05 100644 --- a/src/corelib/serialization/qcborvalue_p.h +++ b/src/corelib/serialization/qcborvalue_p.h @@ -245,13 +245,21 @@ public: appendByteData(s.latin1(), s.size(), QCborValue::String, QtCbor::Element::StringIsAscii); } - void appendAsciiString(const QString &s); + void appendAsciiString(QStringView s); + +#if QT_STRINGVIEW_LEVEL < 2 void append(const QString &s) { + append(qToStringViewIgnoringNull(s)); + } +#endif + + void append(QStringView s) + { if (QtPrivate::isAscii(s)) appendAsciiString(s); else - appendByteData(reinterpret_cast<const char *>(s.constData()), s.size() * 2, + appendByteData(reinterpret_cast<const char *>(s.utf16()), s.size() * 2, QCborValue::String, QtCbor::Element::StringIsUtf16); } void append(const QCborValue &v) @@ -345,33 +353,41 @@ public: return e; } - bool stringEqualsElement(qsizetype idx, QLatin1String s) const + static int compareUtf8(const QtCbor::ByteData *b, const QLatin1String &s) { - const auto &e = elements.at(idx); - if (e.type != QCborValue::String) - return false; - - const QtCbor::ByteData *b = byteData(idx); - if (!b) - return s.isEmpty(); + return QUtf8::compareUtf8(b->byte(), b->len, s); + } - if (e.flags & QtCbor::Element::StringIsUtf16) - return QtPrivate::compareStrings(b->asStringView(), s) == 0; - return QUtf8::compareUtf8(b->byte(), b->len, s) == 0; + static int compareUtf8(const QtCbor::ByteData *b, QStringView s) + { + return QUtf8::compareUtf8(b->byte(), b->len, s.data(), s.size()); } - bool stringEqualsElement(qsizetype idx, const QString &s) const + + template<typename String> + int stringCompareElement(const QtCbor::Element &e, String s) const { - const auto &e = elements.at(idx); if (e.type != QCborValue::String) - return false; + return int(e.type) - int(QCborValue::String); - const QtCbor::ByteData *b = byteData(idx); + const QtCbor::ByteData *b = byteData(e); if (!b) - return s.isEmpty(); + return s.isEmpty() ? 0 : -1; if (e.flags & QtCbor::Element::StringIsUtf16) - return QtPrivate::compareStrings(b->asStringView(), s) == 0; - return QUtf8::compareUtf8(b->byte(), b->len, s.data(), s.size()) == 0; + return QtPrivate::compareStrings(b->asStringView(), s); + return compareUtf8(b, s); + } + + template<typename String> + bool stringEqualsElement(const QtCbor::Element &e, String s) const + { + return stringCompareElement(e, s) == 0; + } + + template<typename String> + bool stringEqualsElement(qsizetype idx, String s) const + { + return stringEqualsElement(elements.at(idx), s); } static int compareElement_helper(const QCborContainerPrivate *c1, QtCbor::Element e1, |