diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-10-11 16:16:29 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-10-11 16:23:19 +0200 |
commit | f4b4c4f79b629498f3cddbbc10df8c1b4d6020d9 (patch) | |
tree | 4119707660438ff58bd51f9cbe0f9e2a33f4b806 /src/corelib/serialization | |
parent | 9bd6cec74dbbc5aece55dc0c8808494db29b9963 (diff) | |
parent | 93f2f33a49f6c96a4f94f344edf03164ed944d02 (diff) |
Merge remote-tracking branch 'origin/wip/qt6' into wip/cmake
Change-Id: I3a1d7673c3c20019ab12a2ea0a60f1619920a34c
Diffstat (limited to 'src/corelib/serialization')
-rw-r--r-- | src/corelib/serialization/qcborvalue.cpp | 16 | ||||
-rw-r--r-- | src/corelib/serialization/qcborvalue.h | 3 | ||||
-rw-r--r-- | src/corelib/serialization/qcborvalue_p.h | 56 | ||||
-rw-r--r-- | src/corelib/serialization/qdatastream.cpp | 1 | ||||
-rw-r--r-- | src/corelib/serialization/qjsonvalue.h | 4 |
5 files changed, 55 insertions, 25 deletions
diff --git a/src/corelib/serialization/qcborvalue.cpp b/src/corelib/serialization/qcborvalue.cpp index ba616c0a7d..9053618014 100644 --- a/src/corelib/serialization/qcborvalue.cpp +++ b/src/corelib/serialization/qcborvalue.cpp @@ -915,7 +915,7 @@ void QCborContainerPrivate::replaceAt_complex(Element &e, const QCborValue &valu // in qstring.cpp void qt_to_latin1_unchecked(uchar *dst, const ushort *uc, qsizetype len); -Q_NEVER_INLINE void QCborContainerPrivate::appendAsciiString(const QString &s) +Q_NEVER_INLINE void QCborContainerPrivate::appendAsciiString(QStringView s) { qsizetype len = s.size(); QtCbor::Element e; @@ -926,7 +926,7 @@ Q_NEVER_INLINE void QCborContainerPrivate::appendAsciiString(const QString &s) char *ptr = data.data() + e.value + sizeof(ByteData); uchar *l = reinterpret_cast<uchar *>(ptr); - const ushort *uc = (const ushort *)s.unicode(); + const ushort *uc = (const ushort *)s.utf16(); qt_to_latin1_unchecked(l, uc, len); } @@ -1646,13 +1646,23 @@ QCborValue::QCborValue(const QByteArray &ba) container->ref.storeRelaxed(1); } +#if QT_STRINGVIEW_LEVEL < 2 /*! Creates a QCborValue with string value \a s. The value can later be retrieved using toString(). \sa toString(), isString(), isByteArray() */ -QCborValue::QCborValue(const QString &s) +QCborValue::QCborValue(const QString &s) : QCborValue(qToStringViewIgnoringNull(s)) {} +#endif + +/*! + Creates a QCborValue with string value \a s. The value can later be + retrieved using toString(). + + \sa toString(), isString(), isByteArray() +*/ +QCborValue::QCborValue(QStringView s) : n(0), container(new QCborContainerPrivate), t(String) { container->append(s); diff --git a/src/corelib/serialization/qcborvalue.h b/src/corelib/serialization/qcborvalue.h index f542e44c47..f79fc572c4 100644 --- a/src/corelib/serialization/qcborvalue.h +++ b/src/corelib/serialization/qcborvalue.h @@ -143,7 +143,10 @@ public: QCborValue(QCborSimpleType st) : t(type_helper(st)) {} QCborValue(const QByteArray &ba); +#if QT_STRINGVIEW_LEVEL < 2 QCborValue(const QString &s); +#endif + QCborValue(QStringView s); QCborValue(QLatin1String s); #ifndef QT_NO_CAST_FROM_ASCII QT_ASCII_CAST_WARN QCborValue(const char *s) : QCborValue(QString::fromUtf8(s)) {} 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, diff --git a/src/corelib/serialization/qdatastream.cpp b/src/corelib/serialization/qdatastream.cpp index b3330d6cea..5082a8cb0d 100644 --- a/src/corelib/serialization/qdatastream.cpp +++ b/src/corelib/serialization/qdatastream.cpp @@ -566,6 +566,7 @@ void QDataStream::setByteOrder(ByteOrder bo) \value Qt_5_12 Version 18 (Qt 5.12) \value Qt_5_13 Version 19 (Qt 5.13) \value Qt_5_14 Same as Qt_5_13 + \value Qt_5_15 Same as Qt_5_13 \omitvalue Qt_DefaultCompiledVersion \sa setVersion(), version() diff --git a/src/corelib/serialization/qjsonvalue.h b/src/corelib/serialization/qjsonvalue.h index 430fa06c0f..8ade18509b 100644 --- a/src/corelib/serialization/qjsonvalue.h +++ b/src/corelib/serialization/qjsonvalue.h @@ -177,9 +177,9 @@ class Q_CORE_EXPORT QJsonValueRef { public: QJsonValueRef(QJsonArray *array, int idx) - : a(array), is_object(false), index(idx) {} + : a(array), is_object(false), index(static_cast<uint>(idx)) {} QJsonValueRef(QJsonObject *object, int idx) - : o(object), is_object(true), index(idx) {} + : o(object), is_object(true), index(static_cast<uint>(idx)) {} inline operator QJsonValue() const { return toValue(); } QJsonValueRef &operator = (const QJsonValue &val); |