From d25337a631a0fb61afc12ebe7c34e266e1a52ca4 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 28 Mar 2023 10:54:59 +0200 Subject: [PATCH] QFutureInterface: Extract Method reportAndEmplaceResult() from reportAndMoveResult() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be the building block for emplacement support in QPromise. Task-number: QTBUG-112270 Change-Id: Ie267e76fe078a8f7b3ef8c7e0d2abfcd22062ff2 Reviewed-by: MÃ¥rten Nordheim --- src/corelib/thread/qfutureinterface.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h index 7e682e69b6..ecb0f5b7ea 100644 --- a/src/corelib/thread/qfutureinterface.h +++ b/src/corelib/thread/qfutureinterface.h @@ -236,6 +236,8 @@ public: inline QFuture future(); // implemented in qfuture.h + template , bool> = true> + inline bool reportAndEmplaceResult(int index, Args&&...args); inline bool reportResult(const T *result, int index = -1); inline bool reportAndMoveResult(T &&result, int index = -1); inline bool reportResult(T &&result, int index = -1); @@ -301,7 +303,8 @@ inline bool QFutureInterface::reportResult(const T *result, int index) } template -bool QFutureInterface::reportAndMoveResult(T &&result, int index) +template, bool>> +bool QFutureInterface::reportAndEmplaceResult(int index, Args&&...args) { QMutexLocker locker{&mutex()}; if (queryState(Canceled) || queryState(Finished)) @@ -311,13 +314,19 @@ bool QFutureInterface::reportAndMoveResult(T &&result, int index) QtPrivate::ResultStoreBase &store = resultStoreBase(); const int oldResultCount = store.count(); - const int insertIndex = store.moveResult(index, std::move(result)); + const int insertIndex = store.emplaceResult(index, std::forward(args)...); // Let's make sure it's not in pending results. if (insertIndex != -1 && (!store.filterMode() || oldResultCount < store.count())) reportResultsReady(insertIndex, store.count()); return insertIndex != -1; } +template +bool QFutureInterface::reportAndMoveResult(T &&result, int index) +{ + return reportAndEmplaceResult(index, std::move(result)); +} + template bool QFutureInterface::reportResult(T &&result, int index) {