diff options
| author | Marc Mutz <marc.mutz@qt.io> | 2023-03-28 10:54:59 +0200 |
|---|---|---|
| committer | Marc Mutz <marc.mutz@qt.io> | 2023-03-31 20:27:55 +0000 |
| commit | d25337a631a0fb61afc12ebe7c34e266e1a52ca4 (patch) | |
| tree | e369c1501e3b18aef72dd8ccd66f4d9698085161 /src/corelib/thread/qfutureinterface.h | |
| parent | 3087aa55dcccfe16ca05509113bd232633987d3b (diff) | |
QFutureInterface: Extract Method reportAndEmplaceResult() from reportAndMoveResult()
This will be the building block for emplacement support in QPromise.
Task-number: QTBUG-112270
Change-Id: Ie267e76fe078a8f7b3ef8c7e0d2abfcd22062ff2
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/corelib/thread/qfutureinterface.h')
| -rw-r--r-- | src/corelib/thread/qfutureinterface.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h index 7e682e69b68..ecb0f5b7ea5 100644 --- a/src/corelib/thread/qfutureinterface.h +++ b/src/corelib/thread/qfutureinterface.h @@ -236,6 +236,8 @@ public: inline QFuture<T> future(); // implemented in qfuture.h + template <typename...Args, std::enable_if_t<std::is_constructible_v<T, Args...>, 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<T>::reportResult(const T *result, int index) } template<typename T> -bool QFutureInterface<T>::reportAndMoveResult(T &&result, int index) +template<typename...Args, std::enable_if_t<std::is_constructible_v<T, Args...>, bool>> +bool QFutureInterface<T>::reportAndEmplaceResult(int index, Args&&...args) { QMutexLocker<QMutex> locker{&mutex()}; if (queryState(Canceled) || queryState(Finished)) @@ -311,7 +314,7 @@ bool QFutureInterface<T>::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<T>(index, std::forward<Args>(args)...); // Let's make sure it's not in pending results. if (insertIndex != -1 && (!store.filterMode() || oldResultCount < store.count())) reportResultsReady(insertIndex, store.count()); @@ -319,6 +322,12 @@ bool QFutureInterface<T>::reportAndMoveResult(T &&result, int index) } template<typename T> +bool QFutureInterface<T>::reportAndMoveResult(T &&result, int index) +{ + return reportAndEmplaceResult(index, std::move(result)); +} + +template<typename T> bool QFutureInterface<T>::reportResult(T &&result, int index) { return reportAndMoveResult(std::move(result), index); |
