diff options
| author | Linus Jahn <lnj@kaidan.im> | 2021-08-27 22:07:26 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-08-31 22:35:52 +0200 |
| commit | bb4bf1cd1ea2dec38329c65a4565d28e674ff23b (patch) | |
| tree | 1d7ffb2d233cbe62bda2295171d92a4bafdabadd | |
| parent | d901db59e9e979eaf8c303d84166d4c8d61e5550 (diff) | |
| download | qxmpp-bb4bf1cd1ea2dec38329c65a4565d28e674ff23b.tar.gz | |
FutureUtils: Add awaitLast using last future result
| -rw-r--r-- | src/base/QXmppFutureUtils_p.h | 13 |
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); |
