diff options
Diffstat (limited to 'sources/pyside6/PySide6/QtCore/glue/qtcorehelper.cpp')
-rw-r--r-- | sources/pyside6/PySide6/QtCore/glue/qtcorehelper.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/sources/pyside6/PySide6/QtCore/glue/qtcorehelper.cpp b/sources/pyside6/PySide6/QtCore/glue/qtcorehelper.cpp new file mode 100644 index 000000000..948c0ce5c --- /dev/null +++ b/sources/pyside6/PySide6/QtCore/glue/qtcorehelper.cpp @@ -0,0 +1,108 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include <qtcorehelper.h> + +#include <QtCore/qdebug.h> + +QT_BEGIN_NAMESPACE + +namespace QtCoreHelper { + +// Data classes for the generic argument data classes. The argument is freed +// via QMetaType +class QGenericArgumentData +{ +public: + explicit QGenericArgumentData(const QMetaType &type, const void *aData) : + m_type(type), m_argument(m_type.name(), aData) + { + } + + ~QGenericArgumentData() + { + if (m_type.isValid()) + m_type.destroy(m_argument.data()); + } + + const QMetaType m_type; + const QGenericArgument m_argument; +}; + +class QGenericReturnArgumentData +{ +public: + explicit QGenericReturnArgumentData(const QMetaType &type, void *aData) : + m_type(type), m_argument(m_type.name(), aData) + { + } + + ~QGenericReturnArgumentData() + { + if (m_type.isValid()) + m_type.destroy(m_argument.data()); + } + + const QMetaType m_type; + const QGenericReturnArgument m_argument; +}; + +QGenericArgumentHolder::QGenericArgumentHolder() +{ +} + +QGenericArgumentHolder::QGenericArgumentHolder(const QMetaType &type, const void *aData) : + d(std::make_shared<QGenericArgumentData>(type, aData)) +{ +} + +QGenericArgumentHolder::QGenericArgumentHolder(const QGenericArgumentHolder &) = default; +QGenericArgumentHolder::QGenericArgumentHolder(QGenericArgumentHolder &&) = default; +QGenericArgumentHolder &QGenericArgumentHolder::operator=(const QGenericArgumentHolder &) = default; +QGenericArgumentHolder &QGenericArgumentHolder::operator=(QGenericArgumentHolder &&) = default; +QGenericArgumentHolder::~QGenericArgumentHolder() = default; + +QGenericArgument QGenericArgumentHolder::toGenericArgument() const +{ + return d ? d->m_argument : QGenericArgument{}; +} + +QMetaType QGenericArgumentHolder::metaType() const +{ + return d ? d->m_type : QMetaType{}; +} + +const void *QGenericArgumentHolder::data() const +{ + return d ? d->m_argument.data() : nullptr; +} + +QGenericReturnArgumentHolder::QGenericReturnArgumentHolder(const QMetaType &type, void *aData) : + d(std::make_shared<QGenericReturnArgumentData>(type, aData)) +{ +} + +QGenericReturnArgumentHolder::QGenericReturnArgumentHolder(const QGenericReturnArgumentHolder &) = default; +QGenericReturnArgumentHolder::QGenericReturnArgumentHolder(QGenericReturnArgumentHolder &&) = default; +QGenericReturnArgumentHolder &QGenericReturnArgumentHolder::operator=(const QGenericReturnArgumentHolder &) = default; +QGenericReturnArgumentHolder &QGenericReturnArgumentHolder::operator=(QGenericReturnArgumentHolder &&) = default; +QGenericReturnArgumentHolder::~QGenericReturnArgumentHolder() = default; + +QGenericReturnArgument QGenericReturnArgumentHolder::toGenericReturnArgument() const +{ + return d->m_argument; +} + +QMetaType QGenericReturnArgumentHolder::metaType() const +{ + return d->m_type; +} + +const void *QGenericReturnArgumentHolder::data() const +{ + return d->m_argument.data(); +} + +} // namespace QtCoreHelper + +QT_END_NAMESPACE |