diff options
author | Marc Mutz <marc.mutz@qt.io> | 2023-01-12 09:42:34 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2023-01-13 14:38:17 +0100 |
commit | 66235481043d85e4f51a216cf2ad3bb895ea7842 (patch) | |
tree | b7572eaa9910031c886b184dbb304976bbd73a55 /src | |
parent | c3a5fe2fd7a1b8a6b6133c938ffe6b3f30181bf0 (diff) |
QPermission: fight template bloat in data()
Extract the type-independent code into an out-of-line data_impl()
private method, leaving data() containing only the
QMetaType::fromType<T>() call as well as T copy- and
default-constructor calls.
As a drive-by, use categorized logging (consistency with the rest of
the permissions code) and printf-style qWarning() (expands to less
code).
Pick-to: 6.5
Change-Id: Ie23b83cb3fc537c9cff15f853ceee2888bf63124
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qpermissions.cpp | 16 | ||||
-rw-r--r-- | src/corelib/kernel/qpermissions.h | 11 |
2 files changed, 21 insertions, 6 deletions
diff --git a/src/corelib/kernel/qpermissions.cpp b/src/corelib/kernel/qpermissions.cpp index 0f16845249..4d26846347 100644 --- a/src/corelib/kernel/qpermissions.cpp +++ b/src/corelib/kernel/qpermissions.cpp @@ -257,6 +257,22 @@ Q_LOGGING_CATEGORY(lcPermissions, "qt.permissions", QtWarningMsg); Returns the type of the permission. */ +/* + \internal +*/ +const void *QPermission::data(QMetaType requestedType) const +{ + const auto actualType = type(); + if (requestedType != actualType) { + qCWarning(lcPermissions, "Cannot convert from %s to %s", + actualType.name(), requestedType.name()); + return nullptr; + } + return m_data.data(); +} + + + #define QT_DEFINE_PERMISSION_SPECIAL_FUNCTIONS(ClassName) \ ClassName::ClassName() : d(new ClassName##Private) {} \ ClassName::ClassName(const ClassName &other) noexcept = default; \ diff --git a/src/corelib/kernel/qpermissions.h b/src/corelib/kernel/qpermissions.h index 7c1cd3678e..2a23412a22 100644 --- a/src/corelib/kernel/qpermissions.h +++ b/src/corelib/kernel/qpermissions.h @@ -61,13 +61,10 @@ public: template <typename T, std::enable_if_t<is_permission<T>::value, bool> = true> T data() const { - auto requestedType = QMetaType::fromType<T>(); - if (type() != requestedType) { - qWarning() << "Can not convert from" << type().name() - << "to" << requestedType.name(); + if (auto p = data(QMetaType::fromType<T>())) + return *static_cast<const T *>(p); + else return T{}; - } - return m_data.value<T>(); } #endif @@ -76,6 +73,8 @@ public: #endif private: + Q_CORE_EXPORT const void *data(QMetaType id) const; + Qt::PermissionStatus m_status = Qt::PermissionStatus::Undetermined; QVariant m_data; |