1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 #include <wtf/PassOwnPtr.h>
9 #include <wtf/PassRefPtr.h>
14 class CCThreadTask0
: public CCThread::Task
{
16 typedef void (T::*Method
)();
17 typedef CCThreadTask0
<T
> CCThreadTaskImpl
;
19 static PassOwnPtr
<CCThreadTaskImpl
> create(T
* instance
, Method method
)
21 return adoptPtr(new CCThreadTaskImpl(instance
, method
));
25 CCThreadTask0(T
* instance
, Method method
)
26 : CCThread::Task(instance
)
31 virtual void performTask() OVERRIDE
33 (*static_cast<T
*>(instance()).*m_method
)();
40 template<typename T
, typename P1
, typename MP1
>
41 class CCThreadTask1
: public CCThread::Task
{
43 typedef void (T::*Method
)(MP1
);
44 typedef CCThreadTask1
<T
, P1
, MP1
> CCThreadTaskImpl
;
46 static PassOwnPtr
<CCThreadTaskImpl
> create(T
* instance
, Method method
, P1 parameter1
)
48 return adoptPtr(new CCThreadTaskImpl(instance
, method
, parameter1
));
52 CCThreadTask1(T
* instance
, Method method
, P1 parameter1
)
53 : CCThread::Task(instance
)
55 , m_parameter1(parameter1
)
59 virtual void performTask() OVERRIDE
61 (*static_cast<T
*>(instance()).*m_method
)(m_parameter1
);
69 template<typename T
, typename P1
, typename MP1
, typename P2
, typename MP2
>
70 class CCThreadTask2
: public CCThread::Task
{
72 typedef void (T::*Method
)(MP1
, MP2
);
73 typedef CCThreadTask2
<T
, P1
, MP1
, P2
, MP2
> CCThreadTaskImpl
;
75 static PassOwnPtr
<CCThreadTaskImpl
> create(T
* instance
, Method method
, P1 parameter1
, P2 parameter2
)
77 return adoptPtr(new CCThreadTaskImpl(instance
, method
, parameter1
, parameter2
));
81 CCThreadTask2(T
* instance
, Method method
, P1 parameter1
, P2 parameter2
)
82 : CCThread::Task(instance
)
84 , m_parameter1(parameter1
)
85 , m_parameter2(parameter2
)
89 virtual void performTask() OVERRIDE
91 (*static_cast<T
*>(instance()).*m_method
)(m_parameter1
, m_parameter2
);
100 template<typename T
, typename P1
, typename MP1
, typename P2
, typename MP2
, typename P3
, typename MP3
>
101 class CCThreadTask3
: public CCThread::Task
{
103 typedef void (T::*Method
)(MP1
, MP2
, MP3
);
104 typedef CCThreadTask3
<T
, P1
, MP1
, P2
, MP2
, P3
, MP3
> CCThreadTaskImpl
;
106 static PassOwnPtr
<CCThreadTaskImpl
> create(T
* instance
, Method method
, P1 parameter1
, P2 parameter2
, P3 parameter3
)
108 return adoptPtr(new CCThreadTaskImpl(instance
, method
, parameter1
, parameter2
, parameter3
));
112 CCThreadTask3(T
* instance
, Method method
, P1 parameter1
, P2 parameter2
, P3 parameter3
)
113 : CCThread::Task(instance
)
115 , m_parameter1(parameter1
)
116 , m_parameter2(parameter2
)
117 , m_parameter3(parameter3
)
121 virtual void performTask() OVERRIDE
123 (*static_cast<T
*>(instance()).*m_method
)(m_parameter1
, m_parameter2
, m_parameter3
);
134 template<typename T
, typename P1
, typename MP1
, typename P2
, typename MP2
, typename P3
, typename MP3
, typename P4
, typename MP4
>
135 class CCThreadTask4
: public CCThread::Task
{
137 typedef void (T::*Method
)(MP1
, MP2
, MP3
, MP4
);
138 typedef CCThreadTask4
<T
, P1
, MP1
, P2
, MP2
, P3
, MP3
, P4
, MP4
> CCThreadTaskImpl
;
140 static PassOwnPtr
<CCThreadTaskImpl
> create(T
* instance
, Method method
, P1 parameter1
, P2 parameter2
, P3 parameter3
, P4 parameter4
)
142 return adoptPtr(new CCThreadTaskImpl(instance
, method
, parameter1
, parameter2
, parameter3
, parameter4
));
146 CCThreadTask4(T
* instance
, Method method
, P1 parameter1
, P2 parameter2
, P3 parameter3
, P4 parameter4
)
147 : CCThread::Task(instance
)
149 , m_parameter1(parameter1
)
150 , m_parameter2(parameter2
)
151 , m_parameter3(parameter3
)
152 , m_parameter4(parameter4
)
156 virtual void performTask() OVERRIDE
158 (*static_cast<T
*>(instance()).*m_method
)(m_parameter1
, m_parameter2
, m_parameter3
, m_parameter4
);
169 template<typename T
, typename P1
, typename MP1
, typename P2
, typename MP2
, typename P3
, typename MP3
, typename P4
, typename MP4
, typename P5
, typename MP5
>
170 class CCThreadTask5
: public CCThread::Task
{
172 typedef void (T::*Method
)(MP1
, MP2
, MP3
, MP4
, MP5
);
173 typedef CCThreadTask5
<T
, P1
, MP1
, P2
, MP2
, P3
, MP3
, P4
, MP4
, P5
, MP5
> CCThreadTaskImpl
;
175 static PassOwnPtr
<CCThreadTaskImpl
> create(T
* instance
, Method method
, P1 parameter1
, P2 parameter2
, P3 parameter3
, P4 parameter4
, P5 parameter5
)
177 return adoptPtr(new CCThreadTaskImpl(instance
, method
, parameter1
, parameter2
, parameter3
, parameter4
, parameter5
));
181 CCThreadTask5(T
* instance
, Method method
, P1 parameter1
, P2 parameter2
, P3 parameter3
, P4 parameter4
, P5 parameter5
)
182 : CCThread::Task(instance
)
184 , m_parameter1(parameter1
)
185 , m_parameter2(parameter2
)
186 , m_parameter3(parameter3
)
187 , m_parameter4(parameter4
)
188 , m_parameter5(parameter5
)
192 virtual void performTask() OVERRIDE
194 (*static_cast<T
*>(instance()).*m_method
)(m_parameter1
, m_parameter2
, m_parameter3
, m_parameter4
, m_parameter5
);
207 PassOwnPtr
<CCThread::Task
> createCCThreadTask(
209 void (T::*method
)());
212 PassOwnPtr
<CCThread::Task
> createCCThreadTask(
216 return CCThreadTask0
<T
>::create(
221 template<typename T
, typename P1
, typename MP1
>
222 PassOwnPtr
<CCThread::Task
> createCCThreadTask(
224 void (T::*method
)(MP1
),
225 const P1
& parameter1
)
227 return CCThreadTask1
<T
, P1
, MP1
>::create(
233 template<typename T
, typename P1
, typename MP1
, typename P2
, typename MP2
>
234 PassOwnPtr
<CCThread::Task
> createCCThreadTask(
236 void (T::*method
)(MP1
, MP2
),
237 const P1
& parameter1
,
238 const P2
& parameter2
)
240 return CCThreadTask2
<T
, P1
, MP1
, P2
, MP2
>::create(
247 template<typename T
, typename P1
, typename MP1
, typename P2
, typename MP2
, typename P3
, typename MP3
>
248 PassOwnPtr
<CCThread::Task
> createCCThreadTask(
250 void (T::*method
)(MP1
, MP2
, MP3
),
251 const P1
& parameter1
,
252 const P2
& parameter2
,
253 const P3
& parameter3
)
255 return CCThreadTask3
<T
, P1
, MP1
, P2
, MP2
, P3
, MP3
>::create(
263 template<typename T
, typename P1
, typename MP1
, typename P2
, typename MP2
, typename P3
, typename MP3
, typename P4
, typename MP4
>
264 PassOwnPtr
<CCThread::Task
> createCCThreadTask(
266 void (T::*method
)(MP1
, MP2
, MP3
, MP4
),
267 const P1
& parameter1
,
268 const P2
& parameter2
,
269 const P3
& parameter3
,
270 const P4
& parameter4
)
272 return CCThreadTask4
<T
, P1
, MP1
, P2
, MP2
, P3
, MP3
, P4
, MP4
>::create(
282 template<typename T
, typename P1
, typename MP1
, typename P2
, typename MP2
, typename P3
, typename MP3
, typename P4
, typename MP4
, typename P5
, typename MP5
>
283 PassOwnPtr
<CCThread::Task
> createCCThreadTask(
285 void (T::*method
)(MP1
, MP2
, MP3
, MP4
, MP5
),
286 const P1
& parameter1
,
287 const P2
& parameter2
,
288 const P3
& parameter3
,
289 const P4
& parameter4
,
290 const P5
& parameter5
)
292 return CCThreadTask5
<T
, P1
, MP1
, P2
, MP2
, P3
, MP3
, P4
, MP4
, P5
, MP5
>::create(
303 } // namespace WebCore
305 #endif // CCThreadTask_h