1// Copyright (C) 2021 Ford Motor Company
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:declarations-only
4
5#ifndef QREMOTEOBJECTCONTAINERS_P_H
6#define QREMOTEOBJECTCONTAINERS_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtCore/qassociativeiterable.h>
20#include <QtCore/qsequentialiterable.h>
21#include <QtCore/qvariant.h>
22#include <QtCore/private/qglobal_p.h>
23
24QT_BEGIN_NAMESPACE
25
26class QtROSequentialContainer : public QVariantList
27{
28public:
29 QtROSequentialContainer() = default;
30 QtROSequentialContainer(const QSequentialIterable &lst)
31 {
32 m_valueType = lst.metaContainer().valueMetaType();
33 reserve(asize: lst.size());
34 for (const auto v : lst)
35 append(t: v);
36 }
37 void setValueType(const QByteArray &valueTypeName)
38 {
39 m_valueTypeName = valueTypeName;
40 m_valueType = QMetaType::fromName(name: valueTypeName.constData());
41 clear();
42 }
43
44 QMetaType m_valueType;
45 QByteArray m_typeName, m_valueTypeName;
46};
47
48QDataStream &operator>>(QDataStream &ds, QtROSequentialContainer &p);
49
50QDataStream &operator<<(QDataStream &ds, const QtROSequentialContainer &p);
51
52class QtROAssociativeContainer : public QVariantMap
53{
54public:
55 QtROAssociativeContainer() = default;
56 QtROAssociativeContainer(const QAssociativeIterable &map)
57 {
58 m_keyType = map.metaContainer().keyMetaType();
59 m_valueType = map.metaContainer().mappedMetaType();
60 m_keys.reserve(asize: map.size());
61 QAssociativeIterable::const_iterator iter = map.begin();
62 const QAssociativeIterable::const_iterator end = map.end();
63 for ( ; iter != end; ++iter) {
64 m_keys.append(t: iter.key());
65 insert(key: iter.key().toString(), value: iter.value());
66 }
67 }
68 void setTypes(const QByteArray &keyTypeName, const QByteArray &valueTypeName)
69 {
70 m_keyTypeName = keyTypeName;
71 m_keyType = QMetaType::fromName(name: keyTypeName.constData());
72 m_valueTypeName = valueTypeName;
73 m_valueType = QMetaType::fromName(name: valueTypeName.constData());
74 clear();
75 m_keys.clear();
76 }
77
78 QMetaType m_keyType, m_valueType;
79 QByteArray m_typeName, m_keyTypeName, m_valueTypeName;
80 QVariantList m_keys; // Map uses QString for key, this doesn't lose information for proxy
81};
82
83QDataStream &operator>>(QDataStream &ds, QtROAssociativeContainer &p);
84
85QDataStream &operator<<(QDataStream &ds, const QtROAssociativeContainer &p);
86
87QT_END_NAMESPACE
88
89#endif // QREMOTEOBJECTCONTAINERS_P_H
90

source code of qtremoteobjects/src/remoteobjects/qremoteobjectcontainers_p.h