QtConcurrent::run: accept more then five function's arguments
[ChangeLog][Potentially Source-Incompatible Changes] QtConcurrent::run has the following signatures: run(Function &&f, Args &&...args) and run(QThreadPool *pool, Function &&f, Args &&...args). If f is a member pointer, the first argument of args should be an object for which that member is defined (or a reference, or a pointer to it). See the documentation for more details. Fixes: QTBUG-82383 Change-Id: I18f7fcfb2adbdd9f75b29c346bd3516304e32d31 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
This commit is contained in:
parent
01bacdf7ab
commit
c977e74afd
@ -136,7 +136,7 @@ void Renderer::initResources()
|
||||
if (!m_floorMaterial.fs.isValid())
|
||||
m_floorMaterial.fs.load(inst, dev, QStringLiteral(":/color_frag.spv"));
|
||||
|
||||
m_pipelinesFuture = QtConcurrent::run(this, &Renderer::createPipelines);
|
||||
m_pipelinesFuture = QtConcurrent::run(&Renderer::createPipelines, this);
|
||||
}
|
||||
|
||||
void Renderer::createPipelines()
|
||||
@ -879,7 +879,7 @@ void Renderer::startNextFrame()
|
||||
// finished.
|
||||
Q_ASSERT(!m_framePending);
|
||||
m_framePending = true;
|
||||
QFuture<void> future = QtConcurrent::run(this, &Renderer::buildFrame);
|
||||
QFuture<void> future = QtConcurrent::run(&Renderer::buildFrame, this);
|
||||
m_frameWatcher.setFuture(future);
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,7 @@ QString result = future.result();
|
||||
//! [4]
|
||||
// call 'QList<QByteArray> QByteArray::split(char sep) const' in a separate thread
|
||||
QByteArray bytearray = "hello world";
|
||||
QFuture<QList<QByteArray> > future = QtConcurrent::run(bytearray, &QByteArray::split, ',');
|
||||
QFuture<QList<QByteArray> > future = QtConcurrent::run(&QByteArray::split, bytearray, ',');
|
||||
...
|
||||
QList<QByteArray> result = future.result();
|
||||
//! [4]
|
||||
@ -101,16 +101,46 @@ QList<QByteArray> result = future.result();
|
||||
//! [5]
|
||||
// call 'void QImage::invertPixels(InvertMode mode)' in a separate thread
|
||||
QImage image = ...;
|
||||
QFuture<void> future = QtConcurrent::run(&image, &QImage::invertPixels, QImage::InvertRgba);
|
||||
QFuture<void> future = QtConcurrent::run(&QImage::invertPixels, &image, QImage::InvertRgba);
|
||||
...
|
||||
future.waitForFinished();
|
||||
// At this point, the pixels in 'image' have been inverted
|
||||
//! [5]
|
||||
|
||||
|
||||
//! [6]
|
||||
QFuture<void> future = QtConcurrent::run([=]() {
|
||||
// Code in this block will run in another thread
|
||||
});
|
||||
...
|
||||
//! [6]
|
||||
|
||||
//! [7]
|
||||
static void addOne(int &n) { ++n; }
|
||||
...
|
||||
int n = 42;
|
||||
QtConcurrent::run(&addOne, std::ref(n)).waitForFinished(); // n == 43
|
||||
//! [7]
|
||||
|
||||
//! [8]
|
||||
struct TestClass
|
||||
{
|
||||
void operator()(int s1) { s = s1; }
|
||||
int s = 42;
|
||||
};
|
||||
|
||||
...
|
||||
|
||||
TestClass o;
|
||||
|
||||
// Modify original object
|
||||
QtConcurrent::run(std::ref(o), 15).waitForFinished(); // o.s == 15
|
||||
|
||||
// Modify a copy of the original object
|
||||
QtConcurrent::run(o, 42).waitForFinished(); // o.s == 15
|
||||
|
||||
// Use a temporary object
|
||||
QtConcurrent::run(TestClass(), 42).waitForFinished();
|
||||
|
||||
// Ill-formed
|
||||
QtConcurrent::run(&o, 42).waitForFinished(); // compilation error
|
||||
//! [8]
|
||||
|
@ -112,6 +112,14 @@
|
||||
Calling a lambda function is done like this:
|
||||
|
||||
\snippet code/src_concurrent_qtconcurrentrun.cpp 6
|
||||
|
||||
Calling a function modifies an object passed by reference is done like this:
|
||||
|
||||
\snippet code/src_concurrent_qtconcurrentrun.cpp 7
|
||||
|
||||
Using callable object is done like this:
|
||||
|
||||
\snippet code/src_concurrent_qtconcurrentrun.cpp 8
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -37,7 +37,6 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
// Generated code, do not edit! Use generator at tools/qtconcurrent/generaterun/
|
||||
#ifndef QTCONCURRENT_RUN_H
|
||||
#define QTCONCURRENT_RUN_H
|
||||
|
||||
@ -68,848 +67,21 @@ namespace QtConcurrent {
|
||||
|
||||
namespace QtConcurrent {
|
||||
|
||||
template <typename T>
|
||||
QFuture<T> run(T (*functionPointer)())
|
||||
template <class Function, class ...Args>
|
||||
[[nodiscard]]
|
||||
auto run(QThreadPool *pool, Function &&f, Args &&...args)
|
||||
{
|
||||
return (new StoredFunctorCall0<T, T (*)()>(functionPointer))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1>
|
||||
QFuture<T> run(T (*functionPointer)(Param1), const Arg1 &arg1)
|
||||
{
|
||||
return (new StoredFunctorCall1<T, T (*)(Param1), Arg1>(functionPointer, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(T (*functionPointer)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new StoredFunctorCall2<T, T (*)(Param1, Param2), Arg1, Arg2>(functionPointer, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new StoredFunctorCall3<T, T (*)(Param1, Param2, Param3), Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new StoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4), Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new StoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5), Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
return (new StoredFunctionCall<Function, Args...>(
|
||||
std::forward<Function>(f), std::forward<Args>(args)...))->start(pool);
|
||||
}
|
||||
|
||||
template <typename Functor>
|
||||
auto run(Functor functor) -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor())>>::type
|
||||
template <class Function, class ...Args>
|
||||
[[nodiscard]]
|
||||
auto run(Function &&f, Args &&...args)
|
||||
{
|
||||
typedef decltype(functor()) result_type;
|
||||
return (new StoredFunctorCall0<result_type, Functor>(functor))->start();
|
||||
return run(QThreadPool::globalInstance(), std::forward<Function>(f), std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1>
|
||||
auto run(Functor functor, const Arg1 &arg1)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1)) result_type;
|
||||
return (new StoredFunctorCall1<result_type, Functor, Arg1>(functor, arg1))->start();
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1, typename Arg2>
|
||||
auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1, arg2)) result_type;
|
||||
return (new StoredFunctorCall2<result_type, Functor, Arg1, Arg2>(functor, arg1, arg2))->start();
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1, typename Arg2, typename Arg3>
|
||||
auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1, arg2, arg3)) result_type;
|
||||
return (new StoredFunctorCall3<result_type, Functor, Arg1, Arg2, Arg3>(functor, arg1, arg2, arg3))->start();
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||
auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1, arg2, arg3, arg4)) result_type;
|
||||
return (new StoredFunctorCall4<result_type, Functor, Arg1, Arg2, Arg3, Arg4>(functor, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||
auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4, arg5))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1, arg2, arg3, arg4, arg5)) result_type;
|
||||
return (new StoredFunctorCall5<result_type, Functor, Arg1, Arg2, Arg3, Arg4, Arg5>(functor, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename FunctionObject>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject)
|
||||
{
|
||||
return (new StoredFunctorCall0<typename FunctionObject::result_type, FunctionObject>(functionObject))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1)
|
||||
{
|
||||
return (new StoredFunctorCall1<typename FunctionObject::result_type, FunctionObject, Arg1>(functionObject, arg1))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new StoredFunctorCall2<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2>(functionObject, arg1, arg2))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new StoredFunctorCall3<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>(functionObject, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new StoredFunctorCall4<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>(functionObject, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new StoredFunctorCall5<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>(functionObject, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename FunctionObject>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall0<typename FunctionObject::result_type, FunctionObject>::type(functionObject))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall1<typename FunctionObject::result_type, FunctionObject, Arg1>::type(functionObject, arg1))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall2<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2>::type(functionObject, arg1, arg2))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall3<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>::type(functionObject, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall4<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>::type(functionObject, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||
QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall5<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>::type(functionObject, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)())
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall0<T, Class>::type(fn, object))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1), const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)() const)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall0<T, Class>::type(fn, object))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1) const, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2) const, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)())
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall0<T, Class>::type(fn, object))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1), const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)() const)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall0<T, Class>::type(fn, object))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1) const, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2) const, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
// ...and the same with a QThreadPool *pool argument...
|
||||
// generate from the above by c'n'p and s/run(/run(QThreadPool *pool, / and s/start()/start(pool)/
|
||||
|
||||
template <typename T>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)())
|
||||
{
|
||||
return (new StoredFunctorCall0<T, T (*)()>(functionPointer))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1), const Arg1 &arg1)
|
||||
{
|
||||
return (new StoredFunctorCall1<T, T (*)(Param1), Arg1>(functionPointer, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new StoredFunctorCall2<T, T (*)(Param1, Param2), Arg1, Arg2>(functionPointer, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new StoredFunctorCall3<T, T (*)(Param1, Param2, Param3), Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new StoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4), Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new StoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5), Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename Functor>
|
||||
auto run(QThreadPool *pool, Functor functor) -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor())>>::type
|
||||
{
|
||||
typedef decltype(functor()) result_type;
|
||||
return (new StoredFunctorCall0<result_type, Functor>(functor))->start(pool);
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1>
|
||||
auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1)) result_type;
|
||||
return (new StoredFunctorCall1<result_type, Functor, Arg1>(functor, arg1))->start(pool);
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1, typename Arg2>
|
||||
auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1, const Arg2 &arg2)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1, arg2)) result_type;
|
||||
return (new StoredFunctorCall2<result_type, Functor, Arg1, Arg2>(functor, arg1, arg2))->start(pool);
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1, typename Arg2, typename Arg3>
|
||||
auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1, arg2, arg3)) result_type;
|
||||
return (new StoredFunctorCall3<result_type, Functor, Arg1, Arg2, Arg3>(functor, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||
auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1, arg2, arg3, arg4)) result_type;
|
||||
return (new StoredFunctorCall4<result_type, Functor, Arg1, Arg2, Arg3, Arg4>(functor, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
|
||||
template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||
auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
-> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4, arg5))>>::type
|
||||
{
|
||||
typedef decltype(functor(arg1, arg2, arg3, arg4, arg5)) result_type;
|
||||
return (new StoredFunctorCall5<result_type, Functor, Arg1, Arg2, Arg3, Arg4, Arg5>(functor, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename FunctionObject>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject)
|
||||
{
|
||||
return (new StoredFunctorCall0<typename FunctionObject::result_type, FunctionObject>(functionObject))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1)
|
||||
{
|
||||
return (new StoredFunctorCall1<typename FunctionObject::result_type, FunctionObject, Arg1>(functionObject, arg1))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new StoredFunctorCall2<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2>(functionObject, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new StoredFunctorCall3<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>(functionObject, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new StoredFunctorCall4<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>(functionObject, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new StoredFunctorCall5<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>(functionObject, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename FunctionObject>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall0<typename FunctionObject::result_type, FunctionObject>::type(functionObject))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall1<typename FunctionObject::result_type, FunctionObject, Arg1>::type(functionObject, arg1))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall2<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2>::type(functionObject, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall3<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>::type(functionObject, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall4<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>::type(functionObject, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||
QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredFunctorPointerCall5<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>::type(functionObject, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)())
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall0<T, Class>::type(fn, object))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1), const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)() const)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall0<T, Class>::type(fn, object))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1) const, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2) const, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)())
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall0<T, Class>::type(fn, object))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1), const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)() const)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall0<T, Class>::type(fn, object))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1) const, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2) const, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredConstMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
|
||||
template <typename T>
|
||||
QFuture<T> run(T (*functionPointer)() noexcept)
|
||||
{
|
||||
return (new StoredFunctorCall0<T, T (*)() noexcept>(functionPointer))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1>
|
||||
QFuture<T> run(T (*functionPointer)(Param1) noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new StoredFunctorCall1<T, T (*)(Param1) noexcept, Arg1>(functionPointer, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(T (*functionPointer)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new StoredFunctorCall2<T, T (*)(Param1, Param2) noexcept, Arg1, Arg2>(functionPointer, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new StoredFunctorCall3<T, T (*)(Param1, Param2, Param3) noexcept, Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new StoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4) noexcept, Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new StoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5) noexcept, Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)() noexcept)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall0<T, Class>::type(fn, object))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1) noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)() const noexcept)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall0<T, Class>::type(fn, object))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1) const noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2) const noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)() noexcept)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall0<T, Class>::type(fn, object))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1) noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)() const noexcept)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall0<T, Class>::type(fn, object))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1) const noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2) const noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
|
||||
}
|
||||
template <typename T>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)() noexcept)
|
||||
{
|
||||
return (new StoredFunctorCall0<T, T (*)() noexcept>(functionPointer))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1) noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new StoredFunctorCall1<T, T (*)(Param1) noexcept, Arg1>(functionPointer, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new StoredFunctorCall2<T, T (*)(Param1, Param2) noexcept, Arg1, Arg2>(functionPointer, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new StoredFunctorCall3<T, T (*)(Param1, Param2, Param3) noexcept, Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new StoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4) noexcept, Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new StoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5) noexcept, Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)() noexcept)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall0<T, Class>::type(fn, object))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1) noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)() const noexcept)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall0<T, Class>::type(fn, object))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1) const noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2) const noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)() noexcept)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall0<T, Class>::type(fn, object))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1) noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredNoExceptMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
|
||||
template <typename T, typename Class>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)() const noexcept)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall0<T, Class>::type(fn, object))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1) const noexcept, const Arg1 &arg1)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2) const noexcept, const Arg1 &arg1, const Arg2 &arg2)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
|
||||
}
|
||||
template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||
QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||
{
|
||||
return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
|
||||
}
|
||||
#endif
|
||||
|
||||
} //namespace QtConcurrent
|
||||
|
||||
#endif // Q_CLANG_QDOC
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -50,6 +50,7 @@ private slots:
|
||||
#endif
|
||||
void functor();
|
||||
void lambda();
|
||||
void callableObjectWithState();
|
||||
};
|
||||
|
||||
void light()
|
||||
@ -152,24 +153,24 @@ void tst_QtConcurrentRun::returnValue()
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
A a;
|
||||
f = run(&a, &A::member0);
|
||||
f = run(&A::member0, &a);
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, &a, &A::member0);
|
||||
f = run(&pool, &A::member0, &a);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(&a, &A::member1, 20);
|
||||
f = run(&A::member1, &a, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, &a, &A::member1, 20);
|
||||
f = run(&pool, &A::member1, &a, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(a, &A::member0);
|
||||
f = run(&A::member0, a);
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, a, &A::member0);
|
||||
f = run(&pool, &A::member0, a);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(a, &A::member1, 20);
|
||||
f = run(&A::member1, a, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, a, &A::member1, 20);
|
||||
f = run(&pool, &A::member1, a, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(a);
|
||||
@ -177,9 +178,9 @@ void tst_QtConcurrentRun::returnValue()
|
||||
f = run(&pool, a);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(&a);
|
||||
f = run(a);
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, &a);
|
||||
f = run(&pool, std::ref(a));
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(a, 20);
|
||||
@ -187,30 +188,30 @@ void tst_QtConcurrentRun::returnValue()
|
||||
f = run(&pool, a, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(&a, 20);
|
||||
f = run(std::ref(a), 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, &a, 20);
|
||||
f = run(&pool, std::ref(a), 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
const AConst aConst = AConst();
|
||||
f = run(&aConst, &AConst::member0);
|
||||
f = run(&AConst::member0, &aConst);
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, &aConst, &AConst::member0);
|
||||
f = run(&pool, &AConst::member0, &aConst);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(&aConst, &AConst::member1, 20);
|
||||
f = run(&AConst::member1, &aConst, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, &aConst, &AConst::member1, 20);
|
||||
f = run(&pool, &AConst::member1, &aConst, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(aConst, &AConst::member0);
|
||||
f = run(&AConst::member0, aConst);
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, aConst, &AConst::member0);
|
||||
f = run(&pool, &AConst::member0, aConst);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(aConst, &AConst::member1, 20);
|
||||
f = run(&AConst::member1, aConst, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, aConst, &AConst::member1, 20);
|
||||
f = run(&pool, &AConst::member1, aConst, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(aConst);
|
||||
@ -218,9 +219,9 @@ void tst_QtConcurrentRun::returnValue()
|
||||
f = run(&pool, aConst);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(&aConst);
|
||||
f = run(std::ref(a));
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, &aConst);
|
||||
f = run(&pool, std::ref(a));
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(aConst, 20);
|
||||
@ -228,30 +229,30 @@ void tst_QtConcurrentRun::returnValue()
|
||||
f = run(&pool, aConst, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(&aConst, 20);
|
||||
f = run(std::ref(aConst), 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, &aConst, 20);
|
||||
f = run(&pool, std::ref(aConst), 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
ANoExcept aNoExcept;
|
||||
f = run(&aNoExcept, &ANoExcept::member0);
|
||||
f = run(&ANoExcept::member0, &aNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, &aNoExcept, &ANoExcept::member0);
|
||||
f = run(&pool, &ANoExcept::member0, &aNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(&aNoExcept, &ANoExcept::member1, 20);
|
||||
f = run(&ANoExcept::member1, &aNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, &aNoExcept, &ANoExcept::member1, 20);
|
||||
f = run(&pool, &ANoExcept::member1, &aNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(aNoExcept, &ANoExcept::member0);
|
||||
f = run(&ANoExcept::member0, aNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, aNoExcept, &ANoExcept::member0);
|
||||
f = run(&pool, &ANoExcept::member0, aNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(aNoExcept, &ANoExcept::member1, 20);
|
||||
f = run(&ANoExcept::member1, aNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, aNoExcept, &ANoExcept::member1, 20);
|
||||
f = run(&pool, &ANoExcept::member1, aNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(aNoExcept);
|
||||
@ -259,9 +260,9 @@ void tst_QtConcurrentRun::returnValue()
|
||||
f = run(&pool, aNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(&aNoExcept);
|
||||
f = run(std::ref(aNoExcept));
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, &aNoExcept);
|
||||
f = run(&pool, std::ref(aNoExcept));
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(aNoExcept, 20);
|
||||
@ -269,30 +270,30 @@ void tst_QtConcurrentRun::returnValue()
|
||||
f = run(&pool, aNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(&aNoExcept, 20);
|
||||
f = run(std::ref(aNoExcept), 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, &aNoExcept, 20);
|
||||
f = run(&pool, std::ref(aNoExcept), 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
const AConstNoExcept aConstNoExcept = AConstNoExcept();
|
||||
f = run(&aConstNoExcept, &AConstNoExcept::member0);
|
||||
f = run(&AConstNoExcept::member0, &aConstNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, &aConstNoExcept, &AConstNoExcept::member0);
|
||||
f = run(&pool, &AConstNoExcept::member0, &aConstNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(&aConstNoExcept, &AConstNoExcept::member1, 20);
|
||||
f = run(&AConstNoExcept::member1, &aConstNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, &aConstNoExcept, &AConstNoExcept::member1, 20);
|
||||
f = run(&pool, &AConstNoExcept::member1, &aConstNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(aConstNoExcept, &AConstNoExcept::member0);
|
||||
f = run(&AConstNoExcept::member0, aConstNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, aConstNoExcept, &AConstNoExcept::member0);
|
||||
f = run(&pool, &AConstNoExcept::member0, aConstNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(aConstNoExcept, &AConstNoExcept::member1, 20);
|
||||
f = run(&AConstNoExcept::member1, aConstNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, aConstNoExcept, &AConstNoExcept::member1, 20);
|
||||
f = run(&pool, &AConstNoExcept::member1, aConstNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(aConstNoExcept);
|
||||
@ -300,9 +301,9 @@ void tst_QtConcurrentRun::returnValue()
|
||||
f = run(&pool, aConstNoExcept);
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(&aConstNoExcept);
|
||||
f = run(std::ref(aConstNoExcept));
|
||||
QCOMPARE(f.result(), 10);
|
||||
f = run(&pool, &aConstNoExcept);
|
||||
f = run(&pool, std::ref(aConstNoExcept));
|
||||
QCOMPARE(f.result(), 10);
|
||||
|
||||
f = run(aConstNoExcept, 20);
|
||||
@ -310,9 +311,9 @@ void tst_QtConcurrentRun::returnValue()
|
||||
f = run(&pool, aConstNoExcept, 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
|
||||
f = run(&aConstNoExcept, 20);
|
||||
f = run(std::ref(aConstNoExcept), 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
f = run(&pool, &aConstNoExcept, 20);
|
||||
f = run(&pool, std::ref(aConstNoExcept), 20);
|
||||
QCOMPARE(f.result(), 20);
|
||||
}
|
||||
|
||||
@ -341,25 +342,25 @@ void tst_QtConcurrentRun::functionObject()
|
||||
TestClass c;
|
||||
|
||||
f = run(c);
|
||||
f = run(&c);
|
||||
f = run(std::ref(c));
|
||||
f = run(c, 10);
|
||||
f = run(&c, 10);
|
||||
f = run(std::ref(c), 10);
|
||||
|
||||
f = run(&pool, c);
|
||||
f = run(&pool, &c);
|
||||
f = run(&pool, std::ref(c));
|
||||
f = run(&pool, c, 10);
|
||||
f = run(&pool, &c, 10);
|
||||
f = run(&pool, std::ref(c), 10);
|
||||
|
||||
const TestConstClass cc = TestConstClass();
|
||||
f = run(cc);
|
||||
f = run(&cc);
|
||||
f = run(std::ref(c));
|
||||
f = run(cc, 10);
|
||||
f = run(&cc, 10);
|
||||
f = run(std::ref(c), 10);
|
||||
|
||||
f = run(&pool, cc);
|
||||
f = run(&pool, &cc);
|
||||
f = run(&pool, std::ref(c));
|
||||
f = run(&pool, cc, 10);
|
||||
f = run(&pool, &cc, 10);
|
||||
f = run(&pool, std::ref(c), 10);
|
||||
}
|
||||
|
||||
|
||||
@ -369,26 +370,26 @@ void tst_QtConcurrentRun::memberFunctions()
|
||||
|
||||
TestClass c;
|
||||
|
||||
run(c, &TestClass::foo).waitForFinished();
|
||||
run(&c, &TestClass::foo).waitForFinished();
|
||||
run(c, &TestClass::fooInt, 10).waitForFinished();
|
||||
run(&c, &TestClass::fooInt, 10).waitForFinished();
|
||||
run(&TestClass::foo, c).waitForFinished();
|
||||
run(&TestClass::foo, &c).waitForFinished();
|
||||
run(&TestClass::fooInt, c, 10).waitForFinished();
|
||||
run(&TestClass::fooInt, &c, 10).waitForFinished();
|
||||
|
||||
run(&pool, c, &TestClass::foo).waitForFinished();
|
||||
run(&pool, &c, &TestClass::foo).waitForFinished();
|
||||
run(&pool, c, &TestClass::fooInt, 10).waitForFinished();
|
||||
run(&pool, &c, &TestClass::fooInt, 10).waitForFinished();
|
||||
run(&pool, &TestClass::foo, c).waitForFinished();
|
||||
run(&pool, &TestClass::foo, &c).waitForFinished();
|
||||
run(&pool, &TestClass::fooInt, c, 10).waitForFinished();
|
||||
run(&pool, &TestClass::fooInt, &c, 10).waitForFinished();
|
||||
|
||||
const TestConstClass cc = TestConstClass();
|
||||
run(cc, &TestConstClass::foo).waitForFinished();
|
||||
run(&cc, &TestConstClass::foo).waitForFinished();
|
||||
run(cc, &TestConstClass::fooInt, 10).waitForFinished();
|
||||
run(&cc, &TestConstClass::fooInt, 10).waitForFinished();
|
||||
run(&TestConstClass::foo, cc).waitForFinished();
|
||||
run(&TestConstClass::foo, &cc).waitForFinished();
|
||||
run(&TestConstClass::fooInt, cc, 10).waitForFinished();
|
||||
run(&TestConstClass::fooInt, &cc, 10).waitForFinished();
|
||||
|
||||
run(&pool, cc, &TestConstClass::foo).waitForFinished();
|
||||
run(&pool, &cc, &TestConstClass::foo).waitForFinished();
|
||||
run(&pool, cc, &TestConstClass::fooInt, 10).waitForFinished();
|
||||
run(&pool, &cc, &TestConstClass::fooInt, 10).waitForFinished();
|
||||
run(&pool, &TestConstClass::foo, cc).waitForFinished();
|
||||
run(&pool, &TestConstClass::foo, &cc).waitForFinished();
|
||||
run(&pool, &TestConstClass::fooInt, cc, 10).waitForFinished();
|
||||
run(&pool, &TestConstClass::fooInt, &cc, 10).waitForFinished();
|
||||
}
|
||||
|
||||
|
||||
@ -437,8 +438,8 @@ void tst_QtConcurrentRun::implicitConvertibleTypes()
|
||||
run(stringConstRefFunction, QLatin1String("Foo")).waitForFinished();
|
||||
run(&pool, stringConstRefFunction, QLatin1String("Foo")).waitForFinished();
|
||||
QString string;
|
||||
run(stringRefFunction, string).waitForFinished();
|
||||
run(&pool, stringRefFunction, string).waitForFinished();
|
||||
run(stringRefFunction, std::ref(string)).waitForFinished();
|
||||
run(&pool, stringRefFunction, std::ref(string)).waitForFinished();
|
||||
}
|
||||
|
||||
void fn() { }
|
||||
@ -732,5 +733,34 @@ void tst_QtConcurrentRun::lambda()
|
||||
}
|
||||
}
|
||||
|
||||
struct CallableWithState
|
||||
{
|
||||
void setNewState(int newState) { state = newState; }
|
||||
int operator()(int newState) { return (state = newState); }
|
||||
|
||||
static constexpr int defaultState() { return 42; }
|
||||
int state = defaultState();
|
||||
};
|
||||
|
||||
void tst_QtConcurrentRun::callableObjectWithState()
|
||||
{
|
||||
CallableWithState o;
|
||||
|
||||
// Run method setNewState explicitly
|
||||
run(&CallableWithState::setNewState, &o, CallableWithState::defaultState() + 1).waitForFinished();
|
||||
QCOMPARE(o.state, CallableWithState::defaultState() + 1);
|
||||
|
||||
// Run operator()(int) explicitly
|
||||
run(std::ref(o), CallableWithState::defaultState() + 2).waitForFinished();
|
||||
QCOMPARE(o.state, CallableWithState::defaultState() + 2);
|
||||
|
||||
// Run on a copy of object (original object remains unchanged)
|
||||
run(o, CallableWithState::defaultState() + 3).waitForFinished();
|
||||
QCOMPARE(o.state, CallableWithState::defaultState() + 2);
|
||||
|
||||
// Explicitly run on a temporary object
|
||||
QCOMPARE(run(CallableWithState(), 15).result(), 15);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QtConcurrentRun)
|
||||
#include "tst_qtconcurrentrun.moc"
|
||||
|
@ -163,13 +163,13 @@ void tst_QLockFile::lockOutOtherThread()
|
||||
QVERIFY(lockFile.lock());
|
||||
|
||||
// Other thread can't acquire lock
|
||||
QFuture<QLockFile::LockError> ret = QtConcurrent::run<QLockFile::LockError>(tryLockFromThread, fileName);
|
||||
auto ret = QtConcurrent::run(tryLockFromThread, fileName);
|
||||
QCOMPARE(ret.result(), QLockFile::LockFailedError);
|
||||
|
||||
lockFile.unlock();
|
||||
|
||||
// Now other thread can acquire lock
|
||||
QFuture<QLockFile::LockError> ret2 = QtConcurrent::run<QLockFile::LockError>(tryLockFromThread, fileName);
|
||||
auto ret2 = QtConcurrent::run(tryLockFromThread, fileName);
|
||||
QCOMPARE(ret2.result(), QLockFile::NoError);
|
||||
}
|
||||
|
||||
@ -186,13 +186,13 @@ static QLockFile::LockError lockFromThread(const QString &fileName)
|
||||
void tst_QLockFile::raceWithOtherThread()
|
||||
{
|
||||
const QString fileName = dir.path() + "/raceWithOtherThread";
|
||||
QFuture<QLockFile::LockError> ret = QtConcurrent::run<QLockFile::LockError>(lockFromThread, fileName);
|
||||
QFuture<QLockFile::LockError> ret2 = QtConcurrent::run<QLockFile::LockError>(lockFromThread, fileName);
|
||||
auto ret = QtConcurrent::run(lockFromThread, fileName);
|
||||
auto ret2 = QtConcurrent::run(lockFromThread, fileName);
|
||||
QCOMPARE(ret.result(), QLockFile::NoError);
|
||||
QCOMPARE(ret2.result(), QLockFile::NoError);
|
||||
}
|
||||
|
||||
static bool lockFromThread(const QString &fileName, int sleepMs, QSemaphore *semThreadReady, QSemaphore *semMainThreadDone)
|
||||
static bool lockFromThreadAndWait(const QString &fileName, int sleepMs, QSemaphore *semThreadReady, QSemaphore *semMainThreadDone)
|
||||
{
|
||||
QLockFile lockFile(fileName);
|
||||
if (!lockFile.lock()) {
|
||||
@ -233,7 +233,7 @@ void tst_QLockFile::waitForLock()
|
||||
QLockFile lockFile(fileName);
|
||||
QSemaphore semThreadReady, semMainThreadDone;
|
||||
// Lock file from a thread
|
||||
QFuture<bool> ret = QtConcurrent::run<bool>(lockFromThread, fileName, threadSleepMs, &semThreadReady, &semMainThreadDone);
|
||||
auto ret = QtConcurrent::run(lockFromThreadAndWait, fileName, threadSleepMs, &semThreadReady, &semMainThreadDone);
|
||||
semThreadReady.acquire();
|
||||
|
||||
if (releaseEarly) // let the thread release the lock after threadSleepMs
|
||||
@ -410,7 +410,7 @@ void tst_QLockFile::staleLockRace()
|
||||
QThreadPool::globalInstance()->setMaxThreadCount(10);
|
||||
QFutureSynchronizer<QString> synchronizer;
|
||||
for (int i = 0; i < 8; ++i)
|
||||
synchronizer.addFuture(QtConcurrent::run<QString>(tryStaleLockFromThread, fileName));
|
||||
synchronizer.addFuture(QtConcurrent::run(tryStaleLockFromThread, fileName));
|
||||
synchronizer.waitForFinished();
|
||||
foreach (const QFuture<QString> &future, synchronizer.futures())
|
||||
QVERIFY2(future.result().isEmpty(), qPrintable(future.result()));
|
||||
|
@ -4067,7 +4067,7 @@ void tst_QUrl::testThreading()
|
||||
QThreadPool::globalInstance()->setMaxThreadCount(100);
|
||||
QFutureSynchronizer<void> sync;
|
||||
for (int i = 0; i < 100; ++i)
|
||||
sync.addFuture(QtConcurrent::run(this, &tst_QUrl::testThreadingHelper));
|
||||
sync.addFuture(QtConcurrent::run(&tst_QUrl::testThreadingHelper, this));
|
||||
sync.waitForFinished();
|
||||
delete s_urlStorage;
|
||||
}
|
||||
|
@ -852,14 +852,14 @@ void tst_QMimeDatabase::fromThreads()
|
||||
QThreadPool tp;
|
||||
tp.setMaxThreadCount(20);
|
||||
// Note that data-based tests cannot be used here (QTest::fetchData asserts).
|
||||
QtConcurrent::run(&tp, this, &tst_QMimeDatabase::mimeTypeForName);
|
||||
QtConcurrent::run(&tp, this, &tst_QMimeDatabase::aliases);
|
||||
QtConcurrent::run(&tp, this, &tst_QMimeDatabase::allMimeTypes);
|
||||
QtConcurrent::run(&tp, this, &tst_QMimeDatabase::icons);
|
||||
QtConcurrent::run(&tp, this, &tst_QMimeDatabase::inheritance);
|
||||
QtConcurrent::run(&tp, this, &tst_QMimeDatabase::knownSuffix);
|
||||
QtConcurrent::run(&tp, this, &tst_QMimeDatabase::mimeTypeForFileWithContent);
|
||||
QtConcurrent::run(&tp, this, &tst_QMimeDatabase::allMimeTypes); // a second time
|
||||
QtConcurrent::run(&tp, &tst_QMimeDatabase::mimeTypeForName, this);
|
||||
QtConcurrent::run(&tp, &tst_QMimeDatabase::aliases, this);
|
||||
QtConcurrent::run(&tp, &tst_QMimeDatabase::allMimeTypes, this);
|
||||
QtConcurrent::run(&tp, &tst_QMimeDatabase::icons, this);
|
||||
QtConcurrent::run(&tp, &tst_QMimeDatabase::inheritance, this);
|
||||
QtConcurrent::run(&tp, &tst_QMimeDatabase::knownSuffix, this);
|
||||
QtConcurrent::run(&tp, &tst_QMimeDatabase::mimeTypeForFileWithContent, this);
|
||||
QtConcurrent::run(&tp, &tst_QMimeDatabase::allMimeTypes, this); // a second time
|
||||
QVERIFY(tp.waitForDone(60000));
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user