diff options
Diffstat (limited to 'src/corelib/json')
-rw-r--r-- | src/corelib/json/qjson.cpp | 4 | ||||
-rw-r--r-- | src/corelib/json/qjson_p.h | 20 | ||||
-rw-r--r-- | src/corelib/json/qjsondocument.cpp | 22 | ||||
-rw-r--r-- | src/corelib/json/qjsonparser_p.h | 1 | ||||
-rw-r--r-- | src/corelib/json/qjsonvalue.cpp | 3 | ||||
-rw-r--r-- | src/corelib/json/qjsonwriter_p.h | 2 |
6 files changed, 40 insertions, 12 deletions
diff --git a/src/corelib/json/qjson.cpp b/src/corelib/json/qjson.cpp index 4b98ef076c..e9a1366af0 100644 --- a/src/corelib/json/qjson.cpp +++ b/src/corelib/json/qjson.cpp @@ -339,7 +339,7 @@ bool Value::isValid(const Base *b) const case QJsonValue::Double: if (latinOrIntValue) break; - // fall through + Q_FALLTHROUGH(); case QJsonValue::String: case QJsonValue::Array: case QJsonValue::Object: @@ -418,7 +418,7 @@ uint Value::valueToStore(const QJsonValue &v, uint offset) if (c != INT_MAX) return c; } - // fall through + Q_FALLTHROUGH(); case QJsonValue::String: case QJsonValue::Array: case QJsonValue::Object: diff --git a/src/corelib/json/qjson_p.h b/src/corelib/json/qjson_p.h index 8eeff01b59..4be62172a2 100644 --- a/src/corelib/json/qjson_p.h +++ b/src/corelib/json/qjson_p.h @@ -151,6 +151,14 @@ public: val = qToLittleEndian(qFromLittleEndian(val) + i); return *this; } + q_littleendian &operator |=(T i) { + val = qToLittleEndian(qFromLittleEndian(val) | i); + return *this; + } + q_littleendian &operator &=(T i) { + val = qToLittleEndian(qFromLittleEndian(val) & i); + return *this; + } }; } // namespace QJsonPrivate @@ -205,6 +213,14 @@ public: *this = (uint(*this) - i); return *this; } + qle_bitfield &operator |=(uint i) { + *this = (uint(*this) | i); + return *this; + } + qle_bitfield &operator &=(uint i) { + *this = (uint(*this) & i); + return *this; + } }; template<int pos, int width> @@ -396,7 +412,7 @@ public: const ushort *uc = (const ushort *)str.unicode(); int i = 0; #ifdef __SSE2__ - for ( ; i + 16 < len; i += 16) { + for ( ; i + 16 <= len; i += 16) { __m128i chunk1 = _mm_loadu_si128((__m128i*)&uc[i]); // load __m128i chunk2 = _mm_loadu_si128((__m128i*)&uc[i + 8]); // load // pack the two vector to 16 x 8bits elements @@ -405,7 +421,7 @@ public: } # ifdef Q_PROCESSOR_X86_64 // we can do one more round, of 8 characters - if (i + 8 < len) { + if (i + 8 <= len) { __m128i chunk = _mm_loadu_si128((__m128i*)&uc[i]); // load // pack with itself, we'll discard the high part anyway chunk = _mm_packus_epi16(chunk, chunk); diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp index b943818583..ed454d5442 100644 --- a/src/corelib/json/qjsondocument.cpp +++ b/src/corelib/json/qjsondocument.cpp @@ -260,19 +260,28 @@ QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidati Creates a QJsonDocument from the QVariant \a variant. If the \a variant contains any other type than a QVariantMap, - QVariantList or QStringList, the returned document is invalid. + QVariantHash, QVariantList or QStringList, the returned document is invalid. \sa toVariant() */ QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) { QJsonDocument doc; - if (variant.type() == QVariant::Map) { + switch (variant.type()) { + case QVariant::Map: doc.setObject(QJsonObject::fromVariantMap(variant.toMap())); - } else if (variant.type() == QVariant::List) { + break; + case QVariant::Hash: + doc.setObject(QJsonObject::fromVariantHash(variant.toHash())); + break; + case QVariant::List: doc.setArray(QJsonArray::fromVariantList(variant.toList())); - } else if (variant.type() == QVariant::StringList) { + break; + case QVariant::StringList: doc.setArray(QJsonArray::fromStringList(variant.toStringList())); + break; + default: + break; } return doc; } @@ -341,10 +350,9 @@ QByteArray QJsonDocument::toJson() const #ifndef QT_JSON_READONLY QByteArray QJsonDocument::toJson(JsonFormat format) const { - if (!d) - return QByteArray(); - QByteArray json; + if (!d) + return json; if (d->header->root()->isArray()) QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(d->header->root()), json, 0, (format == Compact)); diff --git a/src/corelib/json/qjsonparser_p.h b/src/corelib/json/qjsonparser_p.h index 920f265ca3..afa2c1a8cf 100644 --- a/src/corelib/json/qjsonparser_p.h +++ b/src/corelib/json/qjsonparser_p.h @@ -51,6 +51,7 @@ // We mean it. // +#include <QtCore/private/qglobal_p.h> #include <qjsondocument.h> #include <qvarlengtharray.h> diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp index 718dfa43b3..5a906dda7b 100644 --- a/src/corelib/json/qjsonvalue.cpp +++ b/src/corelib/json/qjsonvalue.cpp @@ -438,7 +438,7 @@ QJsonValue QJsonValue::fromVariant(const QVariant &variant) The QJsonValue types will be converted as follows: - \value Null \l {QVariant::}{QVariant()} + \value Null QMetaType::Nullptr \value Bool QMetaType::Bool \value Double QMetaType::Double \value String QString @@ -466,6 +466,7 @@ QVariant QJsonValue::toVariant() const QJsonObject(d, static_cast<QJsonPrivate::Object *>(base)).toVariantMap() : QVariantMap(); case Null: + return QVariant::fromValue(nullptr); case Undefined: break; } diff --git a/src/corelib/json/qjsonwriter_p.h b/src/corelib/json/qjsonwriter_p.h index b9cdbb6976..76a8460449 100644 --- a/src/corelib/json/qjsonwriter_p.h +++ b/src/corelib/json/qjsonwriter_p.h @@ -50,6 +50,8 @@ // // We mean it. // + +#include <QtCore/private/qglobal_p.h> #include <qjsonvalue.h> QT_BEGIN_NAMESPACE |