Long live QPromise::emplaceResult/At()!
And implement the rvalue overload of addResult() using it. [ChangeLog][QtCore][QPromise] Added emplaceResult() and emplaceResultAt() member functions. Fixes: QTBUG-112270 Change-Id: Id369542215a60c0818f1afa8d564498be84732e8 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
82112db29d
commit
2f95cd8f8b
@ -46,10 +46,20 @@ public:
|
||||
|
||||
// Core QPromise APIs
|
||||
QFuture<T> future() const { return d.future(); }
|
||||
template<typename...Args, std::enable_if_t<std::is_constructible_v<T, Args...>, bool> = true>
|
||||
bool emplaceResultAt(int index, Args&&...args)
|
||||
{
|
||||
return d.reportAndEmplaceResult(index, std::forward<Args>(args)...);
|
||||
}
|
||||
template<typename...Args, std::enable_if_t<std::is_constructible_v<T, Args...>, bool> = true>
|
||||
bool emplaceResult(Args&&...args)
|
||||
{
|
||||
return d.reportAndEmplaceResult(-1, std::forward<Args>(args)...);
|
||||
}
|
||||
template<typename U = T, typename = QtPrivate::EnableIfSameOrConvertible<U, T>>
|
||||
bool addResult(U &&result, int index = -1)
|
||||
{
|
||||
return d.reportResult(std::forward<U>(result), index);
|
||||
return d.reportAndEmplaceResult(index, std::forward<U>(result));
|
||||
}
|
||||
bool addResults(const QList<T> &result)
|
||||
{ return d.reportResults(result); }
|
||||
|
@ -91,15 +91,38 @@
|
||||
/*! \fn template <typename T> bool QPromise<T>::addResult(const T &result, int index = -1)
|
||||
\fn template <typename T> bool QPromise<T>::addResult(T &&result, int index = -1)
|
||||
|
||||
Adds \a result to the internal result collection at \a index position. If
|
||||
index is unspecified, \a result is added to the end of the collection.
|
||||
Same as
|
||||
\code
|
||||
emplaceResultAt(index, result); // first overload
|
||||
emplaceResultAt(index, std::move(result)); // second overload
|
||||
\endcode
|
||||
or, if \c{index == -1} (the default)
|
||||
\code
|
||||
emplaceResult(result); // first overload
|
||||
emplaceResult(std::move(result)); // second overload
|
||||
\endcode
|
||||
|
||||
Returns \c true when \a result is added to the collection.
|
||||
\sa emplaceResultAt(), emplaceResult(), addResults()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn template <typename T> template <typename...Args, std::enable_if_t<std::is_constructible_v<T, Args...>, bool> = true> QPromise<T>::emplaceResultAt(int index, Args&&...args)
|
||||
\fn template <typename T> template <typename...Args, std::enable_if_t<std::is_constructible_v<T, Args...>, bool> = true> QPromise<T>::emplaceResult(Args&&...args)
|
||||
\since 6.6
|
||||
|
||||
Adds a result constructed from \a args... to the internal result collection
|
||||
at \a index position (emplaceResultAt()) or the end of of the collection
|
||||
(emplaceResult()).
|
||||
|
||||
Returns \c true when the result was added to the collection.
|
||||
|
||||
Returns \c false when this promise is in canceled or finished state or when
|
||||
\a result is rejected. addResult() rejects \a result if there's already
|
||||
the result was rejected. addResult() rejects to add a result if there's already
|
||||
another result in the collection stored at the same index.
|
||||
|
||||
These functions only participate in overload resolutions if \c T is
|
||||
constructible from \a args....
|
||||
|
||||
You can get a result at a specific index by calling QFuture::resultAt().
|
||||
|
||||
\note It is possible to specify an arbitrary index and request result at
|
||||
@ -108,7 +131,7 @@
|
||||
QFuture::const_iterator. In order to get all available results without
|
||||
thinking if there are index gaps or not, use QFuture::results().
|
||||
|
||||
\sa addResults()
|
||||
\sa addResult(), addResults()
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -203,12 +203,20 @@ void tst_QPromise::addResultWithBracedInitializer() // QTBUG-111826
|
||||
{
|
||||
QString strValue;
|
||||
int intValue = 0;
|
||||
#ifndef __cpp_aggregate_paren_init // make emplacement work with MyClass
|
||||
MyClass(QString s, int i) : strValue(std::move(s)), intValue(i) {}
|
||||
#endif
|
||||
};
|
||||
|
||||
{
|
||||
QPromise<MyClass> myPromise;
|
||||
myPromise.addResult({"bar", 1});
|
||||
}
|
||||
|
||||
{
|
||||
QPromise<MyClass> myPromise;
|
||||
myPromise.emplaceResult("bar", 1);
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QPromise::addResultOutOfOrder()
|
||||
|
Loading…
Reference in New Issue
Block a user