1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
// Copyright (C) 2017 Ford Motor Company
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QTREMOTEOBJECTGLOBAL_H
#define QTREMOTEOBJECTGLOBAL_H
#include <QtCore/qglobal.h>
#include <QtCore/qhash.h>
#include <QtCore/qurl.h>
#include <QtCore/qloggingcategory.h>
#include <QtRemoteObjects/qtremoteobjectsexports.h>
QT_BEGIN_NAMESPACE
struct QRemoteObjectSourceLocationInfo
{
QRemoteObjectSourceLocationInfo() = default;
QRemoteObjectSourceLocationInfo(const QString &typeName_, const QUrl &hostUrl_)
: typeName(typeName_), hostUrl(hostUrl_) {}
inline bool operator==(const QRemoteObjectSourceLocationInfo &other) const Q_DECL_NOTHROW
{
return other.typeName == typeName && other.hostUrl == hostUrl;
}
inline bool operator!=(const QRemoteObjectSourceLocationInfo &other) const Q_DECL_NOTHROW
{
return !(*this == other);
}
QString typeName;
QUrl hostUrl;
};
inline QDebug operator<<(QDebug dbg, const QRemoteObjectSourceLocationInfo &info)
{
dbg.nospace() << "SourceLocationInfo(" << info.typeName << ", " << info.hostUrl << ")";
return dbg.space();
}
inline QDataStream& operator<<(QDataStream &stream, const QRemoteObjectSourceLocationInfo &info)
{
return stream << info.typeName << info.hostUrl;
}
inline QDataStream& operator>>(QDataStream &stream, QRemoteObjectSourceLocationInfo &info)
{
return stream >> info.typeName >> info.hostUrl;
}
typedef QPair<QString, QRemoteObjectSourceLocationInfo> QRemoteObjectSourceLocation;
typedef QHash<QString, QRemoteObjectSourceLocationInfo> QRemoteObjectSourceLocations;
typedef QHash<int, QByteArray> QIntHash;
QT_END_NAMESPACE
QT_DECL_METATYPE_EXTERN(QRemoteObjectSourceLocation, Q_REMOTEOBJECTS_EXPORT)
QT_DECL_METATYPE_EXTERN(QRemoteObjectSourceLocations, Q_REMOTEOBJECTS_EXPORT)
QT_DECL_METATYPE_EXTERN(QIntHash, /* not exported */)
QT_BEGIN_NAMESPACE
#define QCLASSINFO_REMOTEOBJECT_TYPE "RemoteObject Type"
#define QCLASSINFO_REMOTEOBJECT_SIGNATURE "RemoteObject Signature"
class QDataStream;
namespace QRemoteObjectStringLiterals {
// when QStringLiteral is used with the same string in different functions,
// it creates duplicate static data. Wrapping it in inline functions prevents it.
inline QString local() { return QStringLiteral("local"); }
inline QString localabstract() { return QStringLiteral("localabstract"); }
inline QString tcp() { return QStringLiteral("tcp"); }
inline QString CLASS() { return QStringLiteral("Class::%1"); }
inline QString MODEL() { return QStringLiteral("Model::%1"); }
inline QString QAIMADAPTER() { return QStringLiteral("QAbstractItemModelAdapter"); }
}
Q_DECLARE_LOGGING_CATEGORY(QT_REMOTEOBJECT)
Q_DECLARE_LOGGING_CATEGORY(QT_REMOTEOBJECT_MODELS)
Q_DECLARE_LOGGING_CATEGORY(QT_REMOTEOBJECT_IO)
namespace QtRemoteObjects {
Q_NAMESPACE_EXPORT(Q_REMOTEOBJECTS_EXPORT)
Q_REMOTEOBJECTS_EXPORT void copyStoredProperties(const QMetaObject *mo, const void *src, void *dst);
Q_REMOTEOBJECTS_EXPORT void copyStoredProperties(const QMetaObject *mo, const void *src, QDataStream &dst);
Q_REMOTEOBJECTS_EXPORT void copyStoredProperties(const QMetaObject *mo, QDataStream &src, void *dst);
QString getTypeNameAndMetaobjectFromClassInfo(const QMetaObject *& meta);
template <typename T>
void copyStoredProperties(const T *src, T *dst)
{
copyStoredProperties(&T::staticMetaObject, src, dst);
}
template <typename T>
void copyStoredProperties(const T *src, QDataStream &dst)
{
copyStoredProperties(&T::staticMetaObject, src, dst);
}
template <typename T>
void copyStoredProperties(QDataStream &src, T *dst)
{
copyStoredProperties(&T::staticMetaObject, src, dst);
}
template <typename E>
constexpr typename std::underlying_type<E>::type to_underlying(E e) noexcept {
return static_cast<typename std::underlying_type<E>::type>(e);
}
enum QRemoteObjectPacketTypeEnum
{
Invalid = 0,
Handshake,
InitPacket,
InitDynamicPacket,
AddObject,
RemoveObject,
InvokePacket,
InvokeReplyPacket,
PropertyChangePacket,
ObjectList,
Ping,
Pong
};
Q_ENUM_NS(QRemoteObjectPacketTypeEnum)
enum InitialAction {
FetchRootSize,
PrefetchData
};
Q_ENUM_NS(InitialAction)
}
QT_END_NAMESPACE
#endif // QTREMOTEOBJECTSGLOBAL_H
|