summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2023-07-03 08:12:42 +0200
committerMarc Mutz <marc.mutz@qt.io>2023-07-07 12:22:42 +0200
commitc2956f8f7685b624d7693ff644125d0f594c585d (patch)
tree92159b4ddf1fad41081fb7017c7a0feb730f35b7
parentd8a8a3a5dc035c36756c1deb1a9cfe0da9796818 (diff)
QEventLoopLocker: add move SMFs and swap()
[ChangeLog][QEventLoopLocker] Added move special-member-functions and swap(). Fixes: QTBUG-115011 Change-Id: I81a31133adafa31904e8b7c49015506db8c161c6 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/corelib/kernel/qeventloop.cpp37
-rw-r--r--src/corelib/kernel/qeventloop.h8
2 files changed, 45 insertions, 0 deletions
diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp
index 76d15a9988..bdc448fe56 100644
--- a/src/corelib/kernel/qeventloop.cpp
+++ b/src/corelib/kernel/qeventloop.cpp
@@ -384,6 +384,43 @@ QEventLoopLocker::QEventLoopLocker(QThread *thread) noexcept
}
/*!
+ \fn QEventLoopLocker::QEventLoopLocker(QEventLoopLocker &&other)
+ \since 6.7
+
+ Move-constructs an event-loop locker from \a other. \a other will have a
+ no-op destructor, while responsibility for preventing the
+ QEventLoop/QThread/QCoreApplication from quitting is transferred to the new
+ object.
+*/
+
+/*!
+ \fn QEventLoopLocker &QEventLoopLocker::operator=(QEventLoopLocker &&other)
+ \since 6.7
+
+ Move-assigns this event-loop locker from \a other. \a other will have a
+ no-op destructor, while responsibility for preventing the
+ QEventLoop/QThread/QCoreApplication from quitting is transferred to this
+ object.
+*/
+
+/*!
+ \fn QEventLoopLocker::swap(QEventLoopLocker &other)
+ \since 6.7
+
+ Swaps the object and the state of this QEventLoopLocker with \a other.
+ This operation is very fast and never fails.
+*/
+
+/*!
+ \fn QEventLoopLocker::swap(QEventLoopLocker &lhs, QEventLoopLocker &rhs)
+ \relates QEventLoopLocker
+ \since 6.7
+
+ Swaps the object and the state of \a lhs with \a rhs.
+ This operation is very fast and never fails.
+*/
+
+/*!
Destroys this event loop locker object
*/
QEventLoopLocker::~QEventLoopLocker()
diff --git a/src/corelib/kernel/qeventloop.h b/src/corelib/kernel/qeventloop.h
index 3eff43549f..e2629caaca 100644
--- a/src/corelib/kernel/qeventloop.h
+++ b/src/corelib/kernel/qeventloop.h
@@ -61,6 +61,14 @@ public:
Q_NODISCARD_CTOR Q_CORE_EXPORT explicit QEventLoopLocker(QThread *thread) noexcept;
Q_CORE_EXPORT ~QEventLoopLocker();
+ Q_NODISCARD_CTOR QEventLoopLocker(QEventLoopLocker &&other) noexcept
+ : p{std::exchange(other.p, 0)} {}
+ QEventLoopLocker &operator=(QEventLoopLocker &&other) noexcept
+ { auto moved = std::move(other); swap(moved); return *this; }
+
+ void swap(QEventLoopLocker &other) noexcept { std::swap(p, other.p); }
+ friend void swap(QEventLoopLocker &lhs, QEventLoopLocker &rhs) noexcept { lhs.swap(rhs); }
+
private:
Q_DISABLE_COPY(QEventLoopLocker)
friend class QEventLoopLockerPrivate;