summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2023-07-12 17:57:58 +0200
committerMarc Mutz <marc.mutz@qt.io>2023-07-13 08:24:02 +0000
commitd41db62154dfbf6cb78f6a64e962939a79eec03c (patch)
tree37afed3bdfbc2d2abf82aeb5b307fda24f8a5979
parent7c82a49e6fc4ec606cffa4fa8d3ceb42c87439cd (diff)
Move QBasicFutureWatcher behind the ABI boundary
... and out of QtPrivate. No inline API requires it anymore, so move it into the only TU using it. Can't move it into the unnamed namespace because of the friend declaration in QFutureInterfaceBase. Pick-to: 6.6 Change-Id: I27452960492bc1193a4d0eaeb2acd913d4dd02a5 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
-rw-r--r--src/corelib/CMakeLists.txt1
-rw-r--r--src/corelib/thread/qbasicfuturewatcher.cpp80
-rw-r--r--src/corelib/thread/qbasicfuturewatcher.h39
-rw-r--r--src/corelib/thread/qfuture_impl.h1
-rw-r--r--src/corelib/thread/qfutureinterface.cpp82
-rw-r--r--src/corelib/thread/qfutureinterface.h4
6 files changed, 83 insertions, 124 deletions
diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt
index 40eb758d4f..f2da2c2b10 100644
--- a/src/corelib/CMakeLists.txt
+++ b/src/corelib/CMakeLists.txt
@@ -700,7 +700,6 @@ qt_internal_extend_target(Core CONDITION QT_FEATURE_thread AND LINUX
qt_internal_extend_target(Core CONDITION QT_FEATURE_future
SOURCES
thread/qexception.cpp thread/qexception.h
- thread/qbasicfuturewatcher.cpp thread/qbasicfuturewatcher.h
thread/qfuture.h
thread/qfuture_impl.h
thread/qfutureinterface.cpp thread/qfutureinterface.h thread/qfutureinterface_p.h
diff --git a/src/corelib/thread/qbasicfuturewatcher.cpp b/src/corelib/thread/qbasicfuturewatcher.cpp
deleted file mode 100644
index 2602995e8f..0000000000
--- a/src/corelib/thread/qbasicfuturewatcher.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (C) 2023 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 "qbasicfuturewatcher.h"
-#include "qcoreapplication.h"
-#include "qfutureinterface.h"
-#include "qfutureinterface_p.h"
-
-#include <QtCore/private/qobject_p.h>
-
-QT_BEGIN_NAMESPACE
-
-namespace QtPrivate {
-
-class QBasicFutureWatcherPrivate : public QObjectPrivate, QFutureCallOutInterface
-{
-public:
- Q_DECLARE_PUBLIC(QBasicFutureWatcher)
-
- QFutureInterfaceBase future;
-
- void postCallOutEvent(const QFutureCallOutEvent &event) override;
- void callOutInterfaceDisconnected() override;
-};
-
-void QBasicFutureWatcherPrivate::postCallOutEvent(const QFutureCallOutEvent &event)
-{
- Q_Q(QBasicFutureWatcher);
- if (q->thread() == QThread::currentThread()) {
- // If we are in the same thread, don't queue up anything.
- std::unique_ptr<QFutureCallOutEvent> clonedEvent(event.clone());
- QCoreApplication::sendEvent(q, clonedEvent.get());
- } else {
- QCoreApplication::postEvent(q, event.clone());
- }
-}
-
-void QBasicFutureWatcherPrivate::callOutInterfaceDisconnected()
-{
- Q_Q(QBasicFutureWatcher);
- QCoreApplication::removePostedEvents(q, QEvent::FutureCallOut);
-}
-
-/*
- * QBasicFutureWatcher is a more lightweight version of QFutureWatcher for internal use
- */
-QBasicFutureWatcher::QBasicFutureWatcher(QObject *parent)
- : QObject(*new QBasicFutureWatcherPrivate, parent)
-{
-}
-
-QBasicFutureWatcher::~QBasicFutureWatcher()
-{
- Q_D(QBasicFutureWatcher);
- d->future.d->disconnectOutputInterface(d);
-}
-
-void QBasicFutureWatcher::setFuture(QFutureInterfaceBase &fi)
-{
- Q_D(QBasicFutureWatcher);
- d->future = fi;
- d->future.d->connectOutputInterface(d);
-}
-
-bool QtPrivate::QBasicFutureWatcher::event(QEvent *event)
-{
- if (event->type() == QEvent::FutureCallOut) {
- QFutureCallOutEvent *callOutEvent = static_cast<QFutureCallOutEvent *>(event);
- if (callOutEvent->callOutType == QFutureCallOutEvent::Finished)
- emit finished();
- return true;
- }
- return QObject::event(event);
-}
-
-} // namespace QtPrivate
-
-QT_END_NAMESPACE
-
-#include "moc_qbasicfuturewatcher.cpp"
diff --git a/src/corelib/thread/qbasicfuturewatcher.h b/src/corelib/thread/qbasicfuturewatcher.h
deleted file mode 100644
index 49db7284e7..0000000000
--- a/src/corelib/thread/qbasicfuturewatcher.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (C) 2023 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
-
-#ifndef QBASICFUTUREWATCHER_H
-#define QBASICFUTUREWATCHER_H
-
-#include <QtCore/qobject.h>
-
-QT_REQUIRE_CONFIG(future);
-
-QT_BEGIN_NAMESPACE
-
-class QFutureInterfaceBase;
-
-namespace QtPrivate {
-
-class QBasicFutureWatcherPrivate;
-
-class Q_CORE_EXPORT QBasicFutureWatcher : public QObject
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(QBasicFutureWatcher)
-public:
- explicit QBasicFutureWatcher(QObject *parent = nullptr);
- ~QBasicFutureWatcher() override;
-
- void setFuture(QFutureInterfaceBase &fi);
-
- bool event(QEvent *event) override;
-
-Q_SIGNALS:
- void finished();
-};
-
-}
-
-QT_END_NAMESPACE
-
-#endif // QBASICFUTUREWATCHER_H
diff --git a/src/corelib/thread/qfuture_impl.h b/src/corelib/thread/qfuture_impl.h
index d8fe946b92..8f0b282163 100644
--- a/src/corelib/thread/qfuture_impl.h
+++ b/src/corelib/thread/qfuture_impl.h
@@ -11,7 +11,6 @@
#endif
#include <QtCore/qglobal.h>
-#include <QtCore/qbasicfuturewatcher.h>
#include <QtCore/qfutureinterface.h>
#include <QtCore/qthreadpool.h>
#include <QtCore/qexception.h>
diff --git a/src/corelib/thread/qfutureinterface.cpp b/src/corelib/thread/qfutureinterface.cpp
index de936005c3..d8aeb76951 100644
--- a/src/corelib/thread/qfutureinterface.cpp
+++ b/src/corelib/thread/qfutureinterface.cpp
@@ -4,9 +4,9 @@
// qfutureinterface.h included from qfuture.h
#include "qfuture.h"
#include "qfutureinterface_p.h"
-#include "qbasicfuturewatcher.h"
#include <QtCore/qatomic.h>
+#include <QtCore/qcoreapplication.h>
#include <QtCore/qthread.h>
#include <QtCore/qvarlengtharray.h>
#include <QtCore/private/qsimd_p.h> // for qYieldCpu()
@@ -45,6 +45,84 @@ const auto suspendingOrSuspended =
} // unnamed namespace
+class QBasicFutureWatcherPrivate;
+class QBasicFutureWatcher : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QBasicFutureWatcher)
+public:
+ explicit QBasicFutureWatcher(QObject *parent = nullptr);
+ ~QBasicFutureWatcher() override;
+
+ void setFuture(QFutureInterfaceBase &fi);
+
+ bool event(QEvent *event) override;
+
+Q_SIGNALS:
+ void finished();
+};
+
+class QBasicFutureWatcherPrivate : public QObjectPrivate, QFutureCallOutInterface
+{
+public:
+ Q_DECLARE_PUBLIC(QBasicFutureWatcher)
+
+ QFutureInterfaceBase future;
+
+ void postCallOutEvent(const QFutureCallOutEvent &event) override;
+ void callOutInterfaceDisconnected() override;
+};
+
+void QBasicFutureWatcherPrivate::postCallOutEvent(const QFutureCallOutEvent &event)
+{
+ Q_Q(QBasicFutureWatcher);
+ if (q->thread() == QThread::currentThread()) {
+ // If we are in the same thread, don't queue up anything.
+ std::unique_ptr<QFutureCallOutEvent> clonedEvent(event.clone());
+ QCoreApplication::sendEvent(q, clonedEvent.get());
+ } else {
+ QCoreApplication::postEvent(q, event.clone());
+ }
+}
+
+void QBasicFutureWatcherPrivate::callOutInterfaceDisconnected()
+{
+ Q_Q(QBasicFutureWatcher);
+ QCoreApplication::removePostedEvents(q, QEvent::FutureCallOut);
+}
+
+/*
+ * QBasicFutureWatcher is a more lightweight version of QFutureWatcher for internal use
+ */
+QBasicFutureWatcher::QBasicFutureWatcher(QObject *parent)
+ : QObject(*new QBasicFutureWatcherPrivate, parent)
+{
+}
+
+QBasicFutureWatcher::~QBasicFutureWatcher()
+{
+ Q_D(QBasicFutureWatcher);
+ d->future.d->disconnectOutputInterface(d);
+}
+
+void QBasicFutureWatcher::setFuture(QFutureInterfaceBase &fi)
+{
+ Q_D(QBasicFutureWatcher);
+ d->future = fi;
+ d->future.d->connectOutputInterface(d);
+}
+
+bool QBasicFutureWatcher::event(QEvent *event)
+{
+ if (event->type() == QEvent::FutureCallOut) {
+ QFutureCallOutEvent *callOutEvent = static_cast<QFutureCallOutEvent *>(event);
+ if (callOutEvent->callOutType == QFutureCallOutEvent::Finished)
+ emit finished();
+ return true;
+ }
+ return QObject::event(event);
+}
+
void QtPrivate::watchContinuationImpl(const QObject *context, QSlotObjectBase *slotObj,
QFutureInterfaceBase &fi)
{
@@ -942,3 +1020,5 @@ QFuture<void> makeReadyVoidFuture()
} // namespace QtFuture
QT_END_NAMESPACE
+
+#include "qfutureinterface.moc"
diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h
index 4db3ebb859..151584e66b 100644
--- a/src/corelib/thread/qfutureinterface.h
+++ b/src/corelib/thread/qfutureinterface.h
@@ -39,8 +39,8 @@ template<class Function, class ResultType>
class FailureHandler;
#endif
-class QBasicFutureWatcher;
}
+class QBasicFutureWatcher;
class Q_CORE_EXPORT QFutureInterfaceBase
{
@@ -178,7 +178,7 @@ private:
friend class QtPrivate::FailureHandler;
#endif
- friend class QtPrivate::QBasicFutureWatcher;
+ friend class QBasicFutureWatcher;
template<class T>
friend class QPromise;