/src/qtbase/src/dbus/qdbusreply.h
Line | Count | Source |
1 | | // Copyright (C) 2016 The Qt Company Ltd. |
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:default |
4 | | |
5 | | #ifndef QDBUSREPLY_H |
6 | | #define QDBUSREPLY_H |
7 | | |
8 | | #include <QtDBus/qtdbusglobal.h> |
9 | | #include <QtCore/qvariant.h> |
10 | | |
11 | | #include <QtDBus/qdbusmessage.h> |
12 | | #include <QtDBus/qdbuserror.h> |
13 | | #include <QtDBus/qdbusextratypes.h> |
14 | | #include <QtDBus/qdbuspendingreply.h> |
15 | | |
16 | | #ifndef QT_NO_DBUS |
17 | | |
18 | | QT_BEGIN_NAMESPACE |
19 | | |
20 | | |
21 | | Q_DBUS_EXPORT void qDBusReplyFill(const QDBusMessage &reply, QDBusError &error, QVariant &data); |
22 | | |
23 | | template<typename T> |
24 | | class QDBusReply |
25 | | { |
26 | | typedef T Type; |
27 | | public: |
28 | | // Rule Of Zero applies! |
29 | | |
30 | | inline QDBusReply(const QDBusMessage &reply) |
31 | 0 | { |
32 | 0 | *this = reply; |
33 | 0 | } Unexecuted instantiation: QDBusReply<QString>::QDBusReply(QDBusMessage const&) Unexecuted instantiation: QDBusReply<QList<QString> >::QDBusReply(QDBusMessage const&) Unexecuted instantiation: QDBusReply<bool>::QDBusReply(QDBusMessage const&) Unexecuted instantiation: QDBusReply<unsigned int>::QDBusReply(QDBusMessage const&) Unexecuted instantiation: QDBusReply<QMap<QString, QVariant> >::QDBusReply(QDBusMessage const&) Unexecuted instantiation: QDBusReply<QDBusConnectionInterface::RegisterServiceReply>::QDBusReply(QDBusMessage const&) |
34 | | inline QDBusReply& operator=(const QDBusMessage &reply) |
35 | 0 | { |
36 | 0 | QVariant data(QMetaType::fromType<Type>()); |
37 | 0 | qDBusReplyFill(reply, m_error, data); |
38 | 0 | m_data = qvariant_cast<Type>(data); |
39 | 0 | return *this; |
40 | 0 | } Unexecuted instantiation: QDBusReply<QString>::operator=(QDBusMessage const&) Unexecuted instantiation: QDBusReply<QList<QString> >::operator=(QDBusMessage const&) Unexecuted instantiation: QDBusReply<bool>::operator=(QDBusMessage const&) Unexecuted instantiation: QDBusReply<unsigned int>::operator=(QDBusMessage const&) Unexecuted instantiation: QDBusReply<QMap<QString, QVariant> >::operator=(QDBusMessage const&) Unexecuted instantiation: QDBusReply<QDBusConnectionInterface::RegisterServiceReply>::operator=(QDBusMessage const&) |
41 | | |
42 | | inline QDBusReply(const QDBusPendingCall &pcall) |
43 | | { |
44 | | *this = pcall; |
45 | | } |
46 | | inline QDBusReply &operator=(const QDBusPendingCall &pcall) |
47 | | { |
48 | | QDBusPendingCall other(pcall); |
49 | | other.waitForFinished(); |
50 | | return *this = other.reply(); |
51 | | } |
52 | | inline QDBusReply(const QDBusPendingReply<T> &reply) |
53 | | { |
54 | | *this = static_cast<QDBusPendingCall>(reply); |
55 | | } |
56 | | |
57 | | inline QDBusReply(const QDBusError &dbusError = QDBusError()) |
58 | 0 | : m_error(dbusError), m_data(Type()) |
59 | 0 | { |
60 | 0 | } Unexecuted instantiation: QDBusReply<QList<QString> >::QDBusReply(QDBusError const&) Unexecuted instantiation: QDBusReply<bool>::QDBusReply(QDBusError const&) Unexecuted instantiation: QDBusReply<QString>::QDBusReply(QDBusError const&) Unexecuted instantiation: QDBusReply<QDBusConnectionInterface::RegisterServiceReply>::QDBusReply(QDBusError const&) Unexecuted instantiation: QDBusReply<unsigned int>::QDBusReply(QDBusError const&) Unexecuted instantiation: QDBusReply<QMap<QString, QVariant> >::QDBusReply(QDBusError const&) |
61 | | inline QDBusReply& operator=(const QDBusError& dbusError) |
62 | | { |
63 | | m_error = dbusError; |
64 | | m_data = Type(); |
65 | | return *this; |
66 | | } |
67 | | |
68 | | inline bool isValid() const { return !m_error.isValid(); } |
69 | | |
70 | | inline const QDBusError& error() const { return m_error; } |
71 | | |
72 | | inline Type value() const |
73 | | { |
74 | | return m_data; |
75 | | } |
76 | | |
77 | | inline operator Type () const |
78 | 0 | { |
79 | 0 | return m_data; |
80 | 0 | } Unexecuted instantiation: QDBusReply<QDBusConnectionInterface::RegisterServiceReply>::operator QDBusConnectionInterface::RegisterServiceReply() const Unexecuted instantiation: QDBusReply<bool>::operator bool() const Unexecuted instantiation: QDBusReply<QString>::operator QString() const Unexecuted instantiation: QDBusReply<unsigned int>::operator unsigned int() const Unexecuted instantiation: QDBusReply<QMap<QString, QVariant> >::operator QMap<QString, QVariant>() const |
81 | | |
82 | | private: |
83 | | QDBusError m_error; |
84 | | Type m_data; |
85 | | }; |
86 | | |
87 | | # ifndef Q_QDOC |
88 | | // specialize for QVariant: |
89 | | template<> inline QDBusReply<QVariant>& |
90 | | QDBusReply<QVariant>::operator=(const QDBusMessage &reply) |
91 | 0 | { |
92 | 0 | QVariant data(QMetaType::fromType<QDBusVariant>()); |
93 | 0 | qDBusReplyFill(reply, m_error, data); |
94 | 0 | m_data = qvariant_cast<QDBusVariant>(data).variant(); |
95 | 0 | return *this; |
96 | 0 | } |
97 | | |
98 | | // specialize for void: |
99 | | template<> |
100 | | class QDBusReply<void> |
101 | | { |
102 | | public: |
103 | | // Rule Of Zero applies! |
104 | | |
105 | | inline QDBusReply(const QDBusMessage &reply) |
106 | 0 | : m_error(reply) |
107 | 0 | { |
108 | 0 | } |
109 | | inline QDBusReply& operator=(const QDBusMessage &reply) |
110 | 0 | { |
111 | 0 | m_error = QDBusError(reply); |
112 | 0 | return *this; |
113 | 0 | } |
114 | | inline QDBusReply(const QDBusError &dbusError = QDBusError()) |
115 | 0 | : m_error(dbusError) |
116 | 0 | { |
117 | 0 | } |
118 | | inline QDBusReply(const QDBusPendingCall &pcall) |
119 | 0 | { |
120 | 0 | *this = pcall; |
121 | 0 | } |
122 | | inline QDBusReply &operator=(const QDBusPendingCall &pcall) |
123 | 0 | { |
124 | 0 | QDBusPendingCall other(pcall); |
125 | 0 | other.waitForFinished(); |
126 | 0 | return *this = other.reply(); |
127 | 0 | } |
128 | | inline QDBusReply& operator=(const QDBusError& dbusError) |
129 | 0 | { |
130 | 0 | m_error = dbusError; |
131 | 0 | return *this; |
132 | 0 | } |
133 | | |
134 | 0 | inline bool isValid() const { return !m_error.isValid(); } |
135 | | |
136 | 0 | inline const QDBusError& error() const { return m_error; } |
137 | | |
138 | | private: |
139 | | QDBusError m_error; |
140 | | }; |
141 | | # endif |
142 | | |
143 | | QT_END_NAMESPACE |
144 | | |
145 | | #endif // QT_NO_DBUS |
146 | | #endif |