aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2021-08-27 22:07:26 +0200
committerLinus Jahn <lnj@kaidan.im>2021-08-31 22:35:52 +0200
commitbb4bf1cd1ea2dec38329c65a4565d28e674ff23b (patch)
tree1d7ffb2d233cbe62bda2295171d92a4bafdabadd
parentd901db59e9e979eaf8c303d84166d4c8d61e5550 (diff)
downloadqxmpp-bb4bf1cd1ea2dec38329c65a4565d28e674ff23b.tar.gz
FutureUtils: Add awaitLast using last future result
-rw-r--r--src/base/QXmppFutureUtils_p.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/base/QXmppFutureUtils_p.h b/src/base/QXmppFutureUtils_p.h
index 720e6df4..0cad95f5 100644
--- a/src/base/QXmppFutureUtils_p.h
+++ b/src/base/QXmppFutureUtils_p.h
@@ -83,6 +83,19 @@ inline QFuture<void> makeReadyFuture()
}
template<typename T, typename Handler>
+void awaitLast(const QFuture<T> &future, QObject *context, Handler handler)
+{
+ auto *watcher = new QFutureWatcher<T>(context);
+ QObject::connect(watcher, &QFutureWatcherBase::finished,
+ context, [watcher, handler { std::move(handler) }]() {
+ auto future = watcher->future();
+ handler(future.resultAt(future.resultCount() - 1));
+ watcher->deleteLater();
+ });
+ watcher->setFuture(future);
+}
+
+template<typename T, typename Handler>
void await(const QFuture<T> &future, QObject *context, Handler handler)
{
auto *watcher = new QFutureWatcher<T>(context);