summaryrefslogtreecommitdiffstats
path: root/src/corelib/serialization/qjson_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/serialization/qjson_p.h')
-rw-r--r--src/corelib/serialization/qjson_p.h24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/corelib/serialization/qjson_p.h b/src/corelib/serialization/qjson_p.h
index edab2c6b13..f8f807189f 100644
--- a/src/corelib/serialization/qjson_p.h
+++ b/src/corelib/serialization/qjson_p.h
@@ -56,6 +56,9 @@
#include <qcborvalue.h>
#include <private/qcborvalue_p.h>
+#include <qjsonarray.h>
+#include <qjsonobject.h>
+
QT_BEGIN_NAMESPACE
namespace QJsonPrivate {
@@ -203,8 +206,27 @@ inline void swap(KeyIterator::reference a, KeyIterator::reference b)
class Value
{
public:
- static QCborContainerPrivate *container(const QCborValue &v) { return v.container; }
static qint64 valueHelper(const QCborValue &v) { return v.n; }
+ static QCborContainerPrivate *container(const QCborValue &v) { return v.container; }
+ static const QCborContainerPrivate *container(QJsonValueConstRef r) noexcept
+ {
+ return (r.is_object ? r.o->o : r.a->a).data();
+ }
+ static QCborContainerPrivate *container(QJsonValueRef r) noexcept
+ {
+ return const_cast<QCborContainerPrivate *>(container(QJsonValueConstRef(r)));
+ }
+ static qsizetype indexHelper(QJsonValueConstRef r) noexcept
+ {
+ qsizetype index = r.index;
+ if (r.is_object)
+ index = index * 2 + 1;
+ return index;
+ }
+ static const QtCbor::Element &elementHelper(QJsonValueConstRef r) noexcept
+ {
+ return container(r)->elements.at(indexHelper(r));
+ }
static QJsonValue fromTrustedCbor(const QCborValue &v)
{