summaryrefslogtreecommitdiffstats
path: root/src/corelib/thread/qfutureinterface.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/thread/qfutureinterface.h')
-rw-r--r--src/corelib/thread/qfutureinterface.h82
1 files changed, 45 insertions, 37 deletions
diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h
index 9296c63f0b5..8467047809c 100644
--- a/src/corelib/thread/qfutureinterface.h
+++ b/src/corelib/thread/qfutureinterface.h
@@ -235,12 +235,12 @@ public:
inline QFuture<T> future(); // implemented in qfuture.h
- inline void reportResult(const T *result, int index = -1);
- inline void reportAndMoveResult(T &&result, int index = -1);
- inline void reportResult(T &&result, int index = -1);
- inline void reportResult(const T &result, int index = -1);
- inline void reportResults(const QList<T> &results, int beginIndex = -1, int count = -1);
- inline void reportFinished(const T *result);
+ 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);
+ inline bool reportResult(const T &result, int index = -1);
+ inline bool reportResults(const QList<T> &results, int beginIndex = -1, int count = -1);
+ inline bool reportFinished(const T *result);
void reportFinished()
{
QFutureInterfaceBase::reportFinished();
@@ -259,32 +259,32 @@ public:
};
template <typename T>
-inline void QFutureInterface<T>::reportResult(const T *result, int index)
+inline bool QFutureInterface<T>::reportResult(const T *result, int index)
{
std::lock_guard<QMutex> locker{mutex()};
- if (this->queryState(Canceled) || this->queryState(Finished)) {
- return;
- }
+ if (this->queryState(Canceled) || this->queryState(Finished))
+ return false;
QtPrivate::ResultStoreBase &store = resultStoreBase();
+ const int resultCountBefore = store.count();
+ const int insertIndex = store.addResult<T>(index, result);
+ if (insertIndex == -1)
+ return false;
if (store.filterMode()) {
- const int resultCountBefore = store.count();
- if (store.addResult<T>(index, result) != -1)
- this->reportResultsReady(resultCountBefore, store.count());
+ this->reportResultsReady(resultCountBefore, store.count());
} else {
- const int insertIndex = store.addResult<T>(index, result);
- if (insertIndex != -1)
- this->reportResultsReady(insertIndex, insertIndex + 1);
+ this->reportResultsReady(insertIndex, insertIndex + 1);
}
+ return true;
}
template<typename T>
-void QFutureInterface<T>::reportAndMoveResult(T &&result, int index)
+bool QFutureInterface<T>::reportAndMoveResult(T &&result, int index)
{
std::lock_guard<QMutex> locker{mutex()};
if (queryState(Canceled) || queryState(Finished))
- return;
+ return false;
QtPrivate::ResultStoreBase &store = resultStoreBase();
@@ -293,47 +293,50 @@ void QFutureInterface<T>::reportAndMoveResult(T &&result, int index)
// 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<typename T>
-void QFutureInterface<T>::reportResult(T &&result, int index)
+bool QFutureInterface<T>::reportResult(T &&result, int index)
{
- reportAndMoveResult(std::move(result), index);
+ return reportAndMoveResult(std::move(result), index);
}
template <typename T>
-inline void QFutureInterface<T>::reportResult(const T &result, int index)
+inline bool QFutureInterface<T>::reportResult(const T &result, int index)
{
- reportResult(&result, index);
+ return reportResult(&result, index);
}
template<typename T>
-inline void QFutureInterface<T>::reportResults(const QList<T> &_results, int beginIndex, int count)
+inline bool QFutureInterface<T>::reportResults(const QList<T> &_results, int beginIndex, int count)
{
std::lock_guard<QMutex> locker{mutex()};
- if (this->queryState(Canceled) || this->queryState(Finished)) {
- return;
- }
+ if (this->queryState(Canceled) || this->queryState(Finished))
+ return false;
auto &store = resultStoreBase();
+ const int resultCountBefore = store.count();
+ const int insertIndex = store.addResults(beginIndex, &_results, count);
+ if (insertIndex == -1)
+ return false;
if (store.filterMode()) {
- const int resultCountBefore = store.count();
- if (store.addResults(beginIndex, &_results, count) != -1)
- this->reportResultsReady(resultCountBefore, store.count());
+ this->reportResultsReady(resultCountBefore, store.count());
} else {
- const int insertIndex = store.addResults(beginIndex, &_results, count);
- if (insertIndex != -1)
- this->reportResultsReady(insertIndex, insertIndex + _results.count());
+ this->reportResultsReady(insertIndex, insertIndex + _results.count());
}
+ return true;
}
template <typename T>
-inline void QFutureInterface<T>::reportFinished(const T *result)
+inline bool QFutureInterface<T>::reportFinished(const T *result)
{
+ bool resultReported = false;
if (result)
- reportResult(result);
+ resultReported = reportResult(result);
reportFinished();
+ return resultReported;
}
template <typename T>
@@ -427,9 +430,14 @@ public:
inline QFuture<void> future(); // implemented in qfuture.h
- void reportResult(const void *, int) { }
- void reportResults(const QList<void> &, int) { }
- void reportFinished(const void * = nullptr)
+ bool reportResult(const void *, int) { return false; }
+ bool reportResults(const QList<void> &, int) { return false; }
+ bool reportFinished(const void *)
+ {
+ reportFinished();
+ return false;
+ }
+ void reportFinished()
{
QFutureInterfaceBase::reportFinished();
QFutureInterfaceBase::runContinuation();