1 /****************************************************************************
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the QtCore module of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
42 #ifndef QTCONCURRENT_FUNCTIONWRAPPERS_H
43 #define QTCONCURRENT_FUNCTIONWRAPPERS_H
45 #include <QtCore/qglobal.h>
47 #ifndef QT_NO_CONCURRENT
56 namespace QtConcurrent
{
59 class FunctionWrapper0
62 typedef T (*FunctionPointerType
)();
63 typedef T result_type
;
64 inline FunctionWrapper0(FunctionPointerType _functionPointer
)
65 :functionPointer(_functionPointer
) { }
69 return functionPointer();
72 FunctionPointerType functionPointer
;
75 template <typename T
, typename U
>
76 class FunctionWrapper1
79 typedef T (*FunctionPointerType
)(U u
);
80 typedef T result_type
;
81 inline FunctionWrapper1(FunctionPointerType _functionPointer
)
82 :functionPointer(_functionPointer
) { }
84 inline T
operator()(U u
)
86 return functionPointer(u
);
90 FunctionPointerType functionPointer
;
93 template <typename T
, typename U
, typename V
>
94 class FunctionWrapper2
97 typedef T (*FunctionPointerType
)(U u
, V v
);
98 typedef T result_type
;
99 inline FunctionWrapper2(FunctionPointerType _functionPointer
)
100 :functionPointer(_functionPointer
) { }
102 inline T
operator()(U u
, V v
)
104 return functionPointer(u
, v
);
107 FunctionPointerType functionPointer
;
110 template <typename T
, typename C
>
111 class MemberFunctionWrapper
114 typedef T (C::*FunctionPointerType
)();
115 typedef T result_type
;
116 inline MemberFunctionWrapper(FunctionPointerType _functionPointer
)
117 :functionPointer(_functionPointer
) { }
119 inline T
operator()(C
&c
)
121 return (c
.*functionPointer
)();
124 FunctionPointerType functionPointer
;
127 template <typename T
, typename C
, typename U
>
128 class MemberFunctionWrapper1
131 typedef T (C::*FunctionPointerType
)(U
);
132 typedef T result_type
;
134 inline MemberFunctionWrapper1(FunctionPointerType _functionPointer
)
135 : functionPointer(_functionPointer
)
138 inline T
operator()(C
&c
, U u
)
140 return (c
.*functionPointer
)(u
);
144 FunctionPointerType functionPointer
;
147 template <typename T
, typename C
>
148 class ConstMemberFunctionWrapper
151 typedef T (C::*FunctionPointerType
)() const;
152 typedef T result_type
;
153 inline ConstMemberFunctionWrapper(FunctionPointerType _functionPointer
)
154 :functionPointer(_functionPointer
) { }
156 inline T
operator()(const C
&c
) const
158 return (c
.*functionPointer
)();
161 FunctionPointerType functionPointer
;
164 } // namespace QtConcurrent.
171 #endif // QT_NO_CONCURRENT