diff options
author | Liang Qi <liang.qi@nokia.com> | 2011-04-19 07:47:33 +0200 |
---|---|---|
committer | Olivier Goffart <olivier.goffart@nokia.com> | 2011-05-10 12:54:53 +0200 |
commit | 5d85018720f8a5ba60be45a541c2e8fd9b413578 (patch) | |
tree | ec5ab67300d62290d5b68a5a7e8055bbb0c1fb3d /src/corelib/concurrent/qtconcurrentfunctionwrappers.h | |
parent | a9a850952bc7f7766f6116d984386928bed1893d (diff) |
Rewrite the interfaces of QtConcurrent.
At least make RVCT 2.2 work.
Task-number: QTBUG-5182
Task-number: QTBUG-9070
Reviewed-by: Olivier Goffart
Reviewed-by: joao
(cherry picked from commit 0ba0c374fe055623381e3795daa6743c5c995bbc)
Diffstat (limited to 'src/corelib/concurrent/qtconcurrentfunctionwrappers.h')
-rw-r--r-- | src/corelib/concurrent/qtconcurrentfunctionwrappers.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/corelib/concurrent/qtconcurrentfunctionwrappers.h b/src/corelib/concurrent/qtconcurrentfunctionwrappers.h index f31f7d2877..1c19164b30 100644 --- a/src/corelib/concurrent/qtconcurrentfunctionwrappers.h +++ b/src/corelib/concurrent/qtconcurrentfunctionwrappers.h @@ -163,6 +163,143 @@ private: } // namespace QtConcurrent. +namespace QtPrivate { + +template <typename T> +const T& createFunctionWrapper(const T& t) +{ + return t; +} + +template <typename T, typename U> +QtConcurrent::FunctionWrapper1<T, U> createFunctionWrapper(T (*func)(U)) +{ + return QtConcurrent::FunctionWrapper1<T, U>(func); +} + +template <typename T, typename C> +QtConcurrent::MemberFunctionWrapper<T, C> createFunctionWrapper(T (C::*func)()) +{ + return QtConcurrent::MemberFunctionWrapper<T, C>(func); +} + +template <typename T, typename C, typename U> +QtConcurrent::MemberFunctionWrapper1<T, C, U> createFunctionWrapper(T (C::*func)(U)) +{ + return QtConcurrent::MemberFunctionWrapper1<T, C, U>(func); +} + +template <typename T, typename C> +QtConcurrent::ConstMemberFunctionWrapper<T, C> createFunctionWrapper(T (C::*func)() const) +{ + return QtConcurrent::ConstMemberFunctionWrapper<T, C>(func); +} + +template <class T> +struct ReduceResultType; + +template <class U, class V> +struct ReduceResultType<void(*)(U&,V)> +{ + typedef U ResultType; +}; + +template <class T, class C, class U> +struct ReduceResultType<T(C::*)(U)> +{ + typedef C ResultType; +}; + +template <class InputSequence, class MapFunctor> +struct MapResultType +{ + typedef typename MapFunctor::result_type ResultType; +}; + +template <class InputSequence, class U, class V> +struct MapResultType<InputSequence, U (*)(V)> +{ + typedef U ResultType; +}; + +template <class InputSequence, class T, class C> +struct MapResultType<InputSequence, T(C::*)() const> +{ + typedef T ResultType; +}; + +#ifndef QT_NO_TEMPLATE_TEMPLATE_PARAMETERS + +template <template <typename> class InputSequence, typename MapFunctor, typename T> +struct MapResultType<InputSequence<T>, MapFunctor> +{ + typedef InputSequence<typename MapFunctor::result_type> ResultType; +}; + +template <template <typename> class InputSequence, class T, class U, class V> +struct MapResultType<InputSequence<T>, U (*)(V)> +{ + typedef InputSequence<U> ResultType; +}; + +template <template <typename> class InputSequence, class T, class U, class C> +struct MapResultType<InputSequence<T>, U(C::*)() const> +{ + typedef InputSequence<U> ResultType; +}; + +template <template <typename, typename> class InputSequence, typename MapFunctor, typename T, typename T2> +struct MapResultType<InputSequence<T, T2>, MapFunctor> +{ + typedef InputSequence<typename MapFunctor::result_type, T2> ResultType; +}; + +template <template <typename, typename> class InputSequence, class T, typename T2, class U, class V> +struct MapResultType<InputSequence<T, T2>, U (*)(V)> +{ + typedef InputSequence<U, T2> ResultType; +}; + +template <template <typename, typename> class InputSequence, class T, typename T2, class U, class C> +struct MapResultType<InputSequence<T, T2>, U(C::*)() const> +{ + typedef InputSequence<U, T2> ResultType; +}; + +#endif // QT_NO_TEMPLATE_TEMPLATE_PARAMETER + +template <class MapFunctor> +struct MapResultType<QStringList, MapFunctor> +{ + typedef QList<typename MapFunctor::result_type> ResultType; +}; + +template <class U, class V> +struct MapResultType<QStringList, U (*)(V)> +{ + typedef QList<U> ResultType; +}; + +template <class U, class C> +struct MapResultType<QStringList, U(C::*)() const> +{ + typedef QList<U> ResultType; +}; + +template <typename ReturnType, typename T> +struct DisableIfSame +{ + typedef ReturnType Type; +}; + +template <typename T> +struct DisableIfSame<T, T> +{ + +}; + +} // namespace QtPrivate. + #endif //qdoc QT_END_NAMESPACE |