diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2018-06-28 15:09:23 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2018-08-27 13:06:19 +0000 |
commit | 231273b130d4cc213158ce858262b7f1b7b6fcdd (patch) | |
tree | ec650d5879a488bfea0860938ac27a083e5436e3 /src/corelib/serialization/qcborvalue.cpp | |
parent | 112c0632d944114ba2b4eb4875c4f65cd0c261eb (diff) |
JSON: Add qHash functions for JSON and CBOR types
This way we can easily use them as keys in QHash and QSet.
Change-Id: Ie744c3b5ad1176ba2ab035c7e650af483757a0c9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/serialization/qcborvalue.cpp')
-rw-r--r-- | src/corelib/serialization/qcborvalue.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/corelib/serialization/qcborvalue.cpp b/src/corelib/serialization/qcborvalue.cpp index c1d78ef738..077a4754dc 100644 --- a/src/corelib/serialization/qcborvalue.cpp +++ b/src/corelib/serialization/qcborvalue.cpp @@ -2365,6 +2365,53 @@ inline QCborMap::QCborMap(QCborContainerPrivate &dd) noexcept { } +uint qHash(const QCborValue &value, uint seed) +{ + switch (value.type()) { + case QCborValue::Integer: + return qHash(value.toInteger(), seed); + case QCborValue::ByteArray: + return qHash(value.toByteArray(), seed); + case QCborValue::String: + return qHash(value.toString(), seed); + case QCborValue::Array: + return qHash(value.toArray(), seed); + case QCborValue::Map: + return qHash(value.toMap(), seed); + case QCborValue::Tag: { + QtPrivate::QHashCombine hash; + seed = hash(seed, value.tag()); + seed = hash(seed, value.taggedValue()); + return seed; + } + case QCborValue::SimpleType: + break; + case QCborValue::False: + return qHash(false, seed); + case QCborValue::True: + return qHash(true, seed); + case QCborValue::Null: + return qHash(nullptr, seed); + case QCborValue::Undefined: + return seed; + case QCborValue::Double: + return qHash(value.toDouble(), seed); + case QCborValue::DateTime: + return qHash(value.toDateTime(), seed); + case QCborValue::Url: + return qHash(value.toUrl(), seed); + case QCborValue::RegularExpression: + return qHash(value.toRegularExpression(), seed); + case QCborValue::Uuid: + return qHash(value.toUuid(), seed); + case QCborValue::Invalid: + return seed; + } + + Q_ASSERT(value.isSimpleType()); + return qHash(value.toSimpleType(), seed); +} + #if !defined(QT_NO_DEBUG_STREAM) static QDebug debugContents(QDebug &dbg, const QCborValue &v) { |