Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(362)

Side by Side Diff: base/prebind.h

Issue 6109007: Unified callback system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/base
Patch Set: Fixing up some comments. Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // This file was GENERATED by command:
2 // pump.py prebind.h.pump
3 // DO NOT EDIT BY HAND!!!
4
5 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
6 // Use of this source code is governed by a BSD-style license that can be
7 // found in the LICENSE file.
8
9 #ifndef BASE_PREBIND_H_
10 #define BASE_PREBIND_H_
11
12 #include "base/prebind_helpers.h"
13 #include "base/uber_callback.h"
14
15 namespace base {
16 namespace internal {
17
18 // The method by which a function is invoked is determined by 3 different
19 // dimensions:
20 //
21 // 1) The type of function (normal, method, const-method)
22 // 2) The arity of the function
23 // 3) The number of bound parameters.
24 //
25 // The FunctionTraitsN classes unwrap the function signature type to
26 // specialize based on the first two dimensions. The N in FunctionTraitsN
27 // specifies the 3rd dimension.
28
29 template <typename StorageType, typename Sig>
30 struct FunctionTraits0;
31
32 // Function: Arity 0 -> 0.
33 template <typename StorageType, typename R>
34 struct FunctionTraits0<StorageType, R(*)()> {
35 static const bool kShouldRef = false;
36 static R DoInvoke(internal::InvokerStorageBase* base) {
37 StorageType* invoker = static_cast<StorageType*>(base);
38 return invoker->f_();
39 }
40 };
41
42 // Function: Arity 1 -> 1.
43 template <typename StorageType, typename R,typename X1>
44 struct FunctionTraits0<StorageType, R(*)(X1)> {
45 static const bool kShouldRef = false;
46 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1) {
47 StorageType* invoker = static_cast<StorageType*>(base);
48 return invoker->f_(x1);
49 }
50 };
51
52 // Function: Arity 2 -> 2.
53 template <typename StorageType, typename R,typename X1, typename X2>
54 struct FunctionTraits0<StorageType, R(*)(X1, X2)> {
55 static const bool kShouldRef = false;
56 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
57 const X2& x2) {
58 StorageType* invoker = static_cast<StorageType*>(base);
59 return invoker->f_(x1, x2);
60 }
61 };
62
63 // Function: Arity 3 -> 3.
64 template <typename StorageType, typename R,typename X1, typename X2,
65 typename X3>
66 struct FunctionTraits0<StorageType, R(*)(X1, X2, X3)> {
67 static const bool kShouldRef = false;
68 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
69 const X2& x2, const X3& x3) {
70 StorageType* invoker = static_cast<StorageType*>(base);
71 return invoker->f_(x1, x2, x3);
72 }
73 };
74
75 // Function: Arity 4 -> 4.
76 template <typename StorageType, typename R,typename X1, typename X2,
77 typename X3, typename X4>
78 struct FunctionTraits0<StorageType, R(*)(X1, X2, X3, X4)> {
79 static const bool kShouldRef = false;
80 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
81 const X2& x2, const X3& x3, const X4& x4) {
82 StorageType* invoker = static_cast<StorageType*>(base);
83 return invoker->f_(x1, x2, x3, x4);
84 }
85 };
86
87 // Function: Arity 5 -> 5.
88 template <typename StorageType, typename R,typename X1, typename X2,
89 typename X3, typename X4, typename X5>
90 struct FunctionTraits0<StorageType, R(*)(X1, X2, X3, X4, X5)> {
91 static const bool kShouldRef = false;
92 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
93 const X2& x2, const X3& x3, const X4& x4, const X5& x5) {
94 StorageType* invoker = static_cast<StorageType*>(base);
95 return invoker->f_(x1, x2, x3, x4, x5);
96 }
97 };
98
99 // Function: Arity 6 -> 6.
100 template <typename StorageType, typename R,typename X1, typename X2,
101 typename X3, typename X4, typename X5, typename X6>
102 struct FunctionTraits0<StorageType, R(*)(X1, X2, X3, X4, X5, X6)> {
103 static const bool kShouldRef = false;
104 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
105 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6) {
106 StorageType* invoker = static_cast<StorageType*>(base);
107 return invoker->f_(x1, x2, x3, x4, x5, x6);
108 }
109 };
110
111 template <typename StorageType, typename Sig>
112 struct FunctionTraits1;
113
114 // Function: Arity 1 -> 0.
115 template <typename StorageType, typename R,typename X1>
116 struct FunctionTraits1<StorageType, R(*)(X1)> {
117 static const bool kShouldRef = false;
118 static R DoInvoke(internal::InvokerStorageBase* base) {
119 StorageType* invoker = static_cast<StorageType*>(base);
120 return invoker->f_(Unwrap(invoker->p1_));
121 }
122 };
123
124 // Method: Arity 0 -> 0.
125 template <typename StorageType, typename R, typename T>
126 struct FunctionTraits1<StorageType, R(T::*)()> {
127 static const bool kShouldRef = true;
128 static R DoInvoke(internal::InvokerStorageBase* base) {
129 StorageType* invoker = static_cast<StorageType*>(base);
130 return (Unwrap(invoker->p1_)->*invoker->f_)();
131 }
132 };
133
134 // Const Method: Arity 0 -> 0.
135 template <typename StorageType, typename R, typename T>
136 struct FunctionTraits1<StorageType, R(T::*)() const> {
137 static const bool kShouldRef = true;
138 static R DoInvoke(internal::InvokerStorageBase* base ) {
139 StorageType* invoker = static_cast<StorageType*>(base);
140 return (Unwrap(invoker->p1_)->*invoker->f_)();
141 }
142 };
143
144 // Function: Arity 2 -> 1.
145 template <typename StorageType, typename R,typename X1, typename X2>
146 struct FunctionTraits1<StorageType, R(*)(X1, X2)> {
147 static const bool kShouldRef = false;
148 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2) {
149 StorageType* invoker = static_cast<StorageType*>(base);
150 return invoker->f_(Unwrap(invoker->p1_), x2);
151 }
152 };
153
154 // Method: Arity 1 -> 1.
155 template <typename StorageType, typename R, typename T, typename X1>
156 struct FunctionTraits1<StorageType, R(T::*)(X1)> {
157 static const bool kShouldRef = true;
158 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1) {
159 StorageType* invoker = static_cast<StorageType*>(base);
160 return (Unwrap(invoker->p1_)->*invoker->f_)(x1);
161 }
162 };
163
164 // Const Method: Arity 1 -> 1.
165 template <typename StorageType, typename R, typename T, typename X1>
166 struct FunctionTraits1<StorageType, R(T::*)(X1) const> {
167 static const bool kShouldRef = true;
168 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1) {
169 StorageType* invoker = static_cast<StorageType*>(base);
170 return (Unwrap(invoker->p1_)->*invoker->f_)(x1);
171 }
172 };
173
174 // Function: Arity 3 -> 2.
175 template <typename StorageType, typename R,typename X1, typename X2,
176 typename X3>
177 struct FunctionTraits1<StorageType, R(*)(X1, X2, X3)> {
178 static const bool kShouldRef = false;
179 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
180 const X3& x3) {
181 StorageType* invoker = static_cast<StorageType*>(base);
182 return invoker->f_(Unwrap(invoker->p1_), x2, x3);
183 }
184 };
185
186 // Method: Arity 2 -> 2.
187 template <typename StorageType, typename R, typename T, typename X1,
188 typename X2>
189 struct FunctionTraits1<StorageType, R(T::*)(X1, X2)> {
190 static const bool kShouldRef = true;
191 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
192 const X2& x2) {
193 StorageType* invoker = static_cast<StorageType*>(base);
194 return (Unwrap(invoker->p1_)->*invoker->f_)(x1, x2);
195 }
196 };
197
198 // Const Method: Arity 2 -> 2.
199 template <typename StorageType, typename R, typename T, typename X1,
200 typename X2>
201 struct FunctionTraits1<StorageType, R(T::*)(X1, X2) const> {
202 static const bool kShouldRef = true;
203 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
204 const X2& x2) {
205 StorageType* invoker = static_cast<StorageType*>(base);
206 return (Unwrap(invoker->p1_)->*invoker->f_)(x1, x2);
207 }
208 };
209
210 // Function: Arity 4 -> 3.
211 template <typename StorageType, typename R,typename X1, typename X2,
212 typename X3, typename X4>
213 struct FunctionTraits1<StorageType, R(*)(X1, X2, X3, X4)> {
214 static const bool kShouldRef = false;
215 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
216 const X3& x3, const X4& x4) {
217 StorageType* invoker = static_cast<StorageType*>(base);
218 return invoker->f_(Unwrap(invoker->p1_), x2, x3, x4);
219 }
220 };
221
222 // Method: Arity 3 -> 3.
223 template <typename StorageType, typename R, typename T, typename X1,
224 typename X2, typename X3>
225 struct FunctionTraits1<StorageType, R(T::*)(X1, X2, X3)> {
226 static const bool kShouldRef = true;
227 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
228 const X2& x2, const X3& x3) {
229 StorageType* invoker = static_cast<StorageType*>(base);
230 return (Unwrap(invoker->p1_)->*invoker->f_)(x1, x2, x3);
231 }
232 };
233
234 // Const Method: Arity 3 -> 3.
235 template <typename StorageType, typename R, typename T, typename X1,
236 typename X2, typename X3>
237 struct FunctionTraits1<StorageType, R(T::*)(X1, X2, X3) const> {
238 static const bool kShouldRef = true;
239 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
240 const X2& x2, const X3& x3) {
241 StorageType* invoker = static_cast<StorageType*>(base);
242 return (Unwrap(invoker->p1_)->*invoker->f_)(x1, x2, x3);
243 }
244 };
245
246 // Function: Arity 5 -> 4.
247 template <typename StorageType, typename R,typename X1, typename X2,
248 typename X3, typename X4, typename X5>
249 struct FunctionTraits1<StorageType, R(*)(X1, X2, X3, X4, X5)> {
250 static const bool kShouldRef = false;
251 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
252 const X3& x3, const X4& x4, const X5& x5) {
253 StorageType* invoker = static_cast<StorageType*>(base);
254 return invoker->f_(Unwrap(invoker->p1_), x2, x3, x4, x5);
255 }
256 };
257
258 // Method: Arity 4 -> 4.
259 template <typename StorageType, typename R, typename T, typename X1,
260 typename X2, typename X3, typename X4>
261 struct FunctionTraits1<StorageType, R(T::*)(X1, X2, X3, X4)> {
262 static const bool kShouldRef = true;
263 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
264 const X2& x2, const X3& x3, const X4& x4) {
265 StorageType* invoker = static_cast<StorageType*>(base);
266 return (Unwrap(invoker->p1_)->*invoker->f_)(x1, x2, x3, x4);
267 }
268 };
269
270 // Const Method: Arity 4 -> 4.
271 template <typename StorageType, typename R, typename T, typename X1,
272 typename X2, typename X3, typename X4>
273 struct FunctionTraits1<StorageType, R(T::*)(X1, X2, X3, X4) const> {
274 static const bool kShouldRef = true;
275 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
276 const X2& x2, const X3& x3, const X4& x4) {
277 StorageType* invoker = static_cast<StorageType*>(base);
278 return (Unwrap(invoker->p1_)->*invoker->f_)(x1, x2, x3, x4);
279 }
280 };
281
282 // Function: Arity 6 -> 5.
283 template <typename StorageType, typename R,typename X1, typename X2,
284 typename X3, typename X4, typename X5, typename X6>
285 struct FunctionTraits1<StorageType, R(*)(X1, X2, X3, X4, X5, X6)> {
286 static const bool kShouldRef = false;
287 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
288 const X3& x3, const X4& x4, const X5& x5, const X6& x6) {
289 StorageType* invoker = static_cast<StorageType*>(base);
290 return invoker->f_(Unwrap(invoker->p1_), x2, x3, x4, x5, x6);
291 }
292 };
293
294 // Method: Arity 5 -> 5.
295 template <typename StorageType, typename R, typename T, typename X1,
296 typename X2, typename X3, typename X4, typename X5>
297 struct FunctionTraits1<StorageType, R(T::*)(X1, X2, X3, X4, X5)> {
298 static const bool kShouldRef = true;
299 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
300 const X2& x2, const X3& x3, const X4& x4, const X5& x5) {
301 StorageType* invoker = static_cast<StorageType*>(base);
302 return (Unwrap(invoker->p1_)->*invoker->f_)(x1, x2, x3, x4, x5);
303 }
304 };
305
306 // Const Method: Arity 5 -> 5.
307 template <typename StorageType, typename R, typename T, typename X1,
308 typename X2, typename X3, typename X4, typename X5>
309 struct FunctionTraits1<StorageType, R(T::*)(X1, X2, X3, X4, X5) const> {
310 static const bool kShouldRef = true;
311 static R DoInvoke(internal::InvokerStorageBase* base, const X1& x1,
312 const X2& x2, const X3& x3, const X4& x4, const X5& x5) {
313 StorageType* invoker = static_cast<StorageType*>(base);
314 return (Unwrap(invoker->p1_)->*invoker->f_)(x1, x2, x3, x4, x5);
315 }
316 };
317
318 template <typename StorageType, typename Sig>
319 struct FunctionTraits2;
320
321 // Function: Arity 2 -> 0.
322 template <typename StorageType, typename R,typename X1, typename X2>
323 struct FunctionTraits2<StorageType, R(*)(X1, X2)> {
324 static const bool kShouldRef = false;
325 static R DoInvoke(internal::InvokerStorageBase* base) {
326 StorageType* invoker = static_cast<StorageType*>(base);
327 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_));
328 }
329 };
330
331 // Method: Arity 1 -> 0.
332 template <typename StorageType, typename R, typename T, typename X1>
333 struct FunctionTraits2<StorageType, R(T::*)(X1)> {
334 static const bool kShouldRef = true;
335 static R DoInvoke(internal::InvokerStorageBase* base) {
336 StorageType* invoker = static_cast<StorageType*>(base);
337 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_));
338 }
339 };
340
341 // Const Method: Arity 1 -> 0.
342 template <typename StorageType, typename R, typename T, typename X1>
343 struct FunctionTraits2<StorageType, R(T::*)(X1) const> {
344 static const bool kShouldRef = true;
345 static R DoInvoke(internal::InvokerStorageBase* base ) {
346 StorageType* invoker = static_cast<StorageType*>(base);
347 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_));
348 }
349 };
350
351 // Function: Arity 3 -> 1.
352 template <typename StorageType, typename R,typename X1, typename X2,
353 typename X3>
354 struct FunctionTraits2<StorageType, R(*)(X1, X2, X3)> {
355 static const bool kShouldRef = false;
356 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3) {
357 StorageType* invoker = static_cast<StorageType*>(base);
358 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), x3);
359 }
360 };
361
362 // Method: Arity 2 -> 1.
363 template <typename StorageType, typename R, typename T, typename X1,
364 typename X2>
365 struct FunctionTraits2<StorageType, R(T::*)(X1, X2)> {
366 static const bool kShouldRef = true;
367 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2) {
368 StorageType* invoker = static_cast<StorageType*>(base);
369 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), x2);
370 }
371 };
372
373 // Const Method: Arity 2 -> 1.
374 template <typename StorageType, typename R, typename T, typename X1,
375 typename X2>
376 struct FunctionTraits2<StorageType, R(T::*)(X1, X2) const> {
377 static const bool kShouldRef = true;
378 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2) {
379 StorageType* invoker = static_cast<StorageType*>(base);
380 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), x2);
381 }
382 };
383
384 // Function: Arity 4 -> 2.
385 template <typename StorageType, typename R,typename X1, typename X2,
386 typename X3, typename X4>
387 struct FunctionTraits2<StorageType, R(*)(X1, X2, X3, X4)> {
388 static const bool kShouldRef = false;
389 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3,
390 const X4& x4) {
391 StorageType* invoker = static_cast<StorageType*>(base);
392 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), x3, x4);
393 }
394 };
395
396 // Method: Arity 3 -> 2.
397 template <typename StorageType, typename R, typename T, typename X1,
398 typename X2, typename X3>
399 struct FunctionTraits2<StorageType, R(T::*)(X1, X2, X3)> {
400 static const bool kShouldRef = true;
401 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
402 const X3& x3) {
403 StorageType* invoker = static_cast<StorageType*>(base);
404 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), x2, x3);
405 }
406 };
407
408 // Const Method: Arity 3 -> 2.
409 template <typename StorageType, typename R, typename T, typename X1,
410 typename X2, typename X3>
411 struct FunctionTraits2<StorageType, R(T::*)(X1, X2, X3) const> {
412 static const bool kShouldRef = true;
413 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
414 const X3& x3) {
415 StorageType* invoker = static_cast<StorageType*>(base);
416 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), x2, x3);
417 }
418 };
419
420 // Function: Arity 5 -> 3.
421 template <typename StorageType, typename R,typename X1, typename X2,
422 typename X3, typename X4, typename X5>
423 struct FunctionTraits2<StorageType, R(*)(X1, X2, X3, X4, X5)> {
424 static const bool kShouldRef = false;
425 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3,
426 const X4& x4, const X5& x5) {
427 StorageType* invoker = static_cast<StorageType*>(base);
428 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), x3, x4, x5);
429 }
430 };
431
432 // Method: Arity 4 -> 3.
433 template <typename StorageType, typename R, typename T, typename X1,
434 typename X2, typename X3, typename X4>
435 struct FunctionTraits2<StorageType, R(T::*)(X1, X2, X3, X4)> {
436 static const bool kShouldRef = true;
437 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
438 const X3& x3, const X4& x4) {
439 StorageType* invoker = static_cast<StorageType*>(base);
440 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), x2, x3,
441 x4);
442 }
443 };
444
445 // Const Method: Arity 4 -> 3.
446 template <typename StorageType, typename R, typename T, typename X1,
447 typename X2, typename X3, typename X4>
448 struct FunctionTraits2<StorageType, R(T::*)(X1, X2, X3, X4) const> {
449 static const bool kShouldRef = true;
450 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
451 const X3& x3, const X4& x4) {
452 StorageType* invoker = static_cast<StorageType*>(base);
453 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), x2, x3,
454 x4);
455 }
456 };
457
458 // Function: Arity 6 -> 4.
459 template <typename StorageType, typename R,typename X1, typename X2,
460 typename X3, typename X4, typename X5, typename X6>
461 struct FunctionTraits2<StorageType, R(*)(X1, X2, X3, X4, X5, X6)> {
462 static const bool kShouldRef = false;
463 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3,
464 const X4& x4, const X5& x5, const X6& x6) {
465 StorageType* invoker = static_cast<StorageType*>(base);
466 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), x3, x4, x5,
467 x6);
468 }
469 };
470
471 // Method: Arity 5 -> 4.
472 template <typename StorageType, typename R, typename T, typename X1,
473 typename X2, typename X3, typename X4, typename X5>
474 struct FunctionTraits2<StorageType, R(T::*)(X1, X2, X3, X4, X5)> {
475 static const bool kShouldRef = true;
476 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
477 const X3& x3, const X4& x4, const X5& x5) {
478 StorageType* invoker = static_cast<StorageType*>(base);
479 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), x2, x3,
480 x4, x5);
481 }
482 };
483
484 // Const Method: Arity 5 -> 4.
485 template <typename StorageType, typename R, typename T, typename X1,
486 typename X2, typename X3, typename X4, typename X5>
487 struct FunctionTraits2<StorageType, R(T::*)(X1, X2, X3, X4, X5) const> {
488 static const bool kShouldRef = true;
489 static R DoInvoke(internal::InvokerStorageBase* base, const X2& x2,
490 const X3& x3, const X4& x4, const X5& x5) {
491 StorageType* invoker = static_cast<StorageType*>(base);
492 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), x2, x3,
493 x4, x5);
494 }
495 };
496
497 template <typename StorageType, typename Sig>
498 struct FunctionTraits3;
499
500 // Function: Arity 3 -> 0.
501 template <typename StorageType, typename R,typename X1, typename X2,
502 typename X3>
503 struct FunctionTraits3<StorageType, R(*)(X1, X2, X3)> {
504 static const bool kShouldRef = false;
505 static R DoInvoke(internal::InvokerStorageBase* base) {
506 StorageType* invoker = static_cast<StorageType*>(base);
507 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
508 Unwrap(invoker->p3_));
509 }
510 };
511
512 // Method: Arity 2 -> 0.
513 template <typename StorageType, typename R, typename T, typename X1,
514 typename X2>
515 struct FunctionTraits3<StorageType, R(T::*)(X1, X2)> {
516 static const bool kShouldRef = true;
517 static R DoInvoke(internal::InvokerStorageBase* base) {
518 StorageType* invoker = static_cast<StorageType*>(base);
519 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
520 Unwrap(invoker->p3_));
521 }
522 };
523
524 // Const Method: Arity 2 -> 0.
525 template <typename StorageType, typename R, typename T, typename X1,
526 typename X2>
527 struct FunctionTraits3<StorageType, R(T::*)(X1, X2) const> {
528 static const bool kShouldRef = true;
529 static R DoInvoke(internal::InvokerStorageBase* base ) {
530 StorageType* invoker = static_cast<StorageType*>(base);
531 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
532 Unwrap(invoker->p3_));
533 }
534 };
535
536 // Function: Arity 4 -> 1.
537 template <typename StorageType, typename R,typename X1, typename X2,
538 typename X3, typename X4>
539 struct FunctionTraits3<StorageType, R(*)(X1, X2, X3, X4)> {
540 static const bool kShouldRef = false;
541 static R DoInvoke(internal::InvokerStorageBase* base, const X4& x4) {
542 StorageType* invoker = static_cast<StorageType*>(base);
543 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
544 Unwrap(invoker->p3_), x4);
545 }
546 };
547
548 // Method: Arity 3 -> 1.
549 template <typename StorageType, typename R, typename T, typename X1,
550 typename X2, typename X3>
551 struct FunctionTraits3<StorageType, R(T::*)(X1, X2, X3)> {
552 static const bool kShouldRef = true;
553 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3) {
554 StorageType* invoker = static_cast<StorageType*>(base);
555 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
556 Unwrap(invoker->p3_), x3);
557 }
558 };
559
560 // Const Method: Arity 3 -> 1.
561 template <typename StorageType, typename R, typename T, typename X1,
562 typename X2, typename X3>
563 struct FunctionTraits3<StorageType, R(T::*)(X1, X2, X3) const> {
564 static const bool kShouldRef = true;
565 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3) {
566 StorageType* invoker = static_cast<StorageType*>(base);
567 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
568 Unwrap(invoker->p3_), x3);
569 }
570 };
571
572 // Function: Arity 5 -> 2.
573 template <typename StorageType, typename R,typename X1, typename X2,
574 typename X3, typename X4, typename X5>
575 struct FunctionTraits3<StorageType, R(*)(X1, X2, X3, X4, X5)> {
576 static const bool kShouldRef = false;
577 static R DoInvoke(internal::InvokerStorageBase* base, const X4& x4,
578 const X5& x5) {
579 StorageType* invoker = static_cast<StorageType*>(base);
580 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
581 Unwrap(invoker->p3_), x4, x5);
582 }
583 };
584
585 // Method: Arity 4 -> 2.
586 template <typename StorageType, typename R, typename T, typename X1,
587 typename X2, typename X3, typename X4>
588 struct FunctionTraits3<StorageType, R(T::*)(X1, X2, X3, X4)> {
589 static const bool kShouldRef = true;
590 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3,
591 const X4& x4) {
592 StorageType* invoker = static_cast<StorageType*>(base);
593 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
594 Unwrap(invoker->p3_), x3, x4);
595 }
596 };
597
598 // Const Method: Arity 4 -> 2.
599 template <typename StorageType, typename R, typename T, typename X1,
600 typename X2, typename X3, typename X4>
601 struct FunctionTraits3<StorageType, R(T::*)(X1, X2, X3, X4) const> {
602 static const bool kShouldRef = true;
603 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3,
604 const X4& x4) {
605 StorageType* invoker = static_cast<StorageType*>(base);
606 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
607 Unwrap(invoker->p3_), x3, x4);
608 }
609 };
610
611 // Function: Arity 6 -> 3.
612 template <typename StorageType, typename R,typename X1, typename X2,
613 typename X3, typename X4, typename X5, typename X6>
614 struct FunctionTraits3<StorageType, R(*)(X1, X2, X3, X4, X5, X6)> {
615 static const bool kShouldRef = false;
616 static R DoInvoke(internal::InvokerStorageBase* base, const X4& x4,
617 const X5& x5, const X6& x6) {
618 StorageType* invoker = static_cast<StorageType*>(base);
619 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
620 Unwrap(invoker->p3_), x4, x5, x6);
621 }
622 };
623
624 // Method: Arity 5 -> 3.
625 template <typename StorageType, typename R, typename T, typename X1,
626 typename X2, typename X3, typename X4, typename X5>
627 struct FunctionTraits3<StorageType, R(T::*)(X1, X2, X3, X4, X5)> {
628 static const bool kShouldRef = true;
629 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3,
630 const X4& x4, const X5& x5) {
631 StorageType* invoker = static_cast<StorageType*>(base);
632 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
633 Unwrap(invoker->p3_), x3, x4, x5);
634 }
635 };
636
637 // Const Method: Arity 5 -> 3.
638 template <typename StorageType, typename R, typename T, typename X1,
639 typename X2, typename X3, typename X4, typename X5>
640 struct FunctionTraits3<StorageType, R(T::*)(X1, X2, X3, X4, X5) const> {
641 static const bool kShouldRef = true;
642 static R DoInvoke(internal::InvokerStorageBase* base, const X3& x3,
643 const X4& x4, const X5& x5) {
644 StorageType* invoker = static_cast<StorageType*>(base);
645 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
646 Unwrap(invoker->p3_), x3, x4, x5);
647 }
648 };
649
650 template <typename StorageType, typename Sig>
651 struct FunctionTraits4;
652
653 // Function: Arity 4 -> 0.
654 template <typename StorageType, typename R,typename X1, typename X2,
655 typename X3, typename X4>
656 struct FunctionTraits4<StorageType, R(*)(X1, X2, X3, X4)> {
657 static const bool kShouldRef = false;
658 static R DoInvoke(internal::InvokerStorageBase* base) {
659 StorageType* invoker = static_cast<StorageType*>(base);
660 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
661 Unwrap(invoker->p3_), Unwrap(invoker->p4_));
662 }
663 };
664
665 // Method: Arity 3 -> 0.
666 template <typename StorageType, typename R, typename T, typename X1,
667 typename X2, typename X3>
668 struct FunctionTraits4<StorageType, R(T::*)(X1, X2, X3)> {
669 static const bool kShouldRef = true;
670 static R DoInvoke(internal::InvokerStorageBase* base) {
671 StorageType* invoker = static_cast<StorageType*>(base);
672 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
673 Unwrap(invoker->p3_), Unwrap(invoker->p4_));
674 }
675 };
676
677 // Const Method: Arity 3 -> 0.
678 template <typename StorageType, typename R, typename T, typename X1,
679 typename X2, typename X3>
680 struct FunctionTraits4<StorageType, R(T::*)(X1, X2, X3) const> {
681 static const bool kShouldRef = true;
682 static R DoInvoke(internal::InvokerStorageBase* base ) {
683 StorageType* invoker = static_cast<StorageType*>(base);
684 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
685 Unwrap(invoker->p3_), Unwrap(invoker->p4_));
686 }
687 };
688
689 // Function: Arity 5 -> 1.
690 template <typename StorageType, typename R,typename X1, typename X2,
691 typename X3, typename X4, typename X5>
692 struct FunctionTraits4<StorageType, R(*)(X1, X2, X3, X4, X5)> {
693 static const bool kShouldRef = false;
694 static R DoInvoke(internal::InvokerStorageBase* base, const X5& x5) {
695 StorageType* invoker = static_cast<StorageType*>(base);
696 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
697 Unwrap(invoker->p3_), Unwrap(invoker->p4_), x5);
698 }
699 };
700
701 // Method: Arity 4 -> 1.
702 template <typename StorageType, typename R, typename T, typename X1,
703 typename X2, typename X3, typename X4>
704 struct FunctionTraits4<StorageType, R(T::*)(X1, X2, X3, X4)> {
705 static const bool kShouldRef = true;
706 static R DoInvoke(internal::InvokerStorageBase* base, const X4& x4) {
707 StorageType* invoker = static_cast<StorageType*>(base);
708 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
709 Unwrap(invoker->p3_), Unwrap(invoker->p4_), x4);
710 }
711 };
712
713 // Const Method: Arity 4 -> 1.
714 template <typename StorageType, typename R, typename T, typename X1,
715 typename X2, typename X3, typename X4>
716 struct FunctionTraits4<StorageType, R(T::*)(X1, X2, X3, X4) const> {
717 static const bool kShouldRef = true;
718 static R DoInvoke(internal::InvokerStorageBase* base, const X4& x4) {
719 StorageType* invoker = static_cast<StorageType*>(base);
720 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
721 Unwrap(invoker->p3_), Unwrap(invoker->p4_), x4);
722 }
723 };
724
725 // Function: Arity 6 -> 2.
726 template <typename StorageType, typename R,typename X1, typename X2,
727 typename X3, typename X4, typename X5, typename X6>
728 struct FunctionTraits4<StorageType, R(*)(X1, X2, X3, X4, X5, X6)> {
729 static const bool kShouldRef = false;
730 static R DoInvoke(internal::InvokerStorageBase* base, const X5& x5,
731 const X6& x6) {
732 StorageType* invoker = static_cast<StorageType*>(base);
733 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
734 Unwrap(invoker->p3_), Unwrap(invoker->p4_), x5, x6);
735 }
736 };
737
738 // Method: Arity 5 -> 2.
739 template <typename StorageType, typename R, typename T, typename X1,
740 typename X2, typename X3, typename X4, typename X5>
741 struct FunctionTraits4<StorageType, R(T::*)(X1, X2, X3, X4, X5)> {
742 static const bool kShouldRef = true;
743 static R DoInvoke(internal::InvokerStorageBase* base, const X4& x4,
744 const X5& x5) {
745 StorageType* invoker = static_cast<StorageType*>(base);
746 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
747 Unwrap(invoker->p3_), Unwrap(invoker->p4_), x4, x5);
748 }
749 };
750
751 // Const Method: Arity 5 -> 2.
752 template <typename StorageType, typename R, typename T, typename X1,
753 typename X2, typename X3, typename X4, typename X5>
754 struct FunctionTraits4<StorageType, R(T::*)(X1, X2, X3, X4, X5) const> {
755 static const bool kShouldRef = true;
756 static R DoInvoke(internal::InvokerStorageBase* base, const X4& x4,
757 const X5& x5) {
758 StorageType* invoker = static_cast<StorageType*>(base);
759 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
760 Unwrap(invoker->p3_), Unwrap(invoker->p4_), x4, x5);
761 }
762 };
763
764 template <typename StorageType, typename Sig>
765 struct FunctionTraits5;
766
767 // Function: Arity 5 -> 0.
768 template <typename StorageType, typename R,typename X1, typename X2,
769 typename X3, typename X4, typename X5>
770 struct FunctionTraits5<StorageType, R(*)(X1, X2, X3, X4, X5)> {
771 static const bool kShouldRef = false;
772 static R DoInvoke(internal::InvokerStorageBase* base) {
773 StorageType* invoker = static_cast<StorageType*>(base);
774 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
775 Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_));
776 }
777 };
778
779 // Method: Arity 4 -> 0.
780 template <typename StorageType, typename R, typename T, typename X1,
781 typename X2, typename X3, typename X4>
782 struct FunctionTraits5<StorageType, R(T::*)(X1, X2, X3, X4)> {
783 static const bool kShouldRef = true;
784 static R DoInvoke(internal::InvokerStorageBase* base) {
785 StorageType* invoker = static_cast<StorageType*>(base);
786 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
787 Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_));
788 }
789 };
790
791 // Const Method: Arity 4 -> 0.
792 template <typename StorageType, typename R, typename T, typename X1,
793 typename X2, typename X3, typename X4>
794 struct FunctionTraits5<StorageType, R(T::*)(X1, X2, X3, X4) const> {
795 static const bool kShouldRef = true;
796 static R DoInvoke(internal::InvokerStorageBase* base ) {
797 StorageType* invoker = static_cast<StorageType*>(base);
798 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
799 Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_));
800 }
801 };
802
803 // Function: Arity 6 -> 1.
804 template <typename StorageType, typename R,typename X1, typename X2,
805 typename X3, typename X4, typename X5, typename X6>
806 struct FunctionTraits5<StorageType, R(*)(X1, X2, X3, X4, X5, X6)> {
807 static const bool kShouldRef = false;
808 static R DoInvoke(internal::InvokerStorageBase* base, const X6& x6) {
809 StorageType* invoker = static_cast<StorageType*>(base);
810 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
811 Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_), x6);
812 }
813 };
814
815 // Method: Arity 5 -> 1.
816 template <typename StorageType, typename R, typename T, typename X1,
817 typename X2, typename X3, typename X4, typename X5>
818 struct FunctionTraits5<StorageType, R(T::*)(X1, X2, X3, X4, X5)> {
819 static const bool kShouldRef = true;
820 static R DoInvoke(internal::InvokerStorageBase* base, const X5& x5) {
821 StorageType* invoker = static_cast<StorageType*>(base);
822 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
823 Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_), x5);
824 }
825 };
826
827 // Const Method: Arity 5 -> 1.
828 template <typename StorageType, typename R, typename T, typename X1,
829 typename X2, typename X3, typename X4, typename X5>
830 struct FunctionTraits5<StorageType, R(T::*)(X1, X2, X3, X4, X5) const> {
831 static const bool kShouldRef = true;
832 static R DoInvoke(internal::InvokerStorageBase* base, const X5& x5) {
833 StorageType* invoker = static_cast<StorageType*>(base);
834 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
835 Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_), x5);
836 }
837 };
838
839 template <typename StorageType, typename Sig>
840 struct FunctionTraits6;
841
842 // Function: Arity 6 -> 0.
843 template <typename StorageType, typename R,typename X1, typename X2,
844 typename X3, typename X4, typename X5, typename X6>
845 struct FunctionTraits6<StorageType, R(*)(X1, X2, X3, X4, X5, X6)> {
846 static const bool kShouldRef = false;
847 static R DoInvoke(internal::InvokerStorageBase* base) {
848 StorageType* invoker = static_cast<StorageType*>(base);
849 return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_),
850 Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_),
851 Unwrap(invoker->p6_));
852 }
853 };
854
855 // Method: Arity 5 -> 0.
856 template <typename StorageType, typename R, typename T, typename X1,
857 typename X2, typename X3, typename X4, typename X5>
858 struct FunctionTraits6<StorageType, R(T::*)(X1, X2, X3, X4, X5)> {
859 static const bool kShouldRef = true;
860 static R DoInvoke(internal::InvokerStorageBase* base) {
861 StorageType* invoker = static_cast<StorageType*>(base);
862 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
863 Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_),
864 Unwrap(invoker->p6_));
865 }
866 };
867
868 // Const Method: Arity 5 -> 0.
869 template <typename StorageType, typename R, typename T, typename X1,
870 typename X2, typename X3, typename X4, typename X5>
871 struct FunctionTraits6<StorageType, R(T::*)(X1, X2, X3, X4, X5) const> {
872 static const bool kShouldRef = true;
873 static R DoInvoke(internal::InvokerStorageBase* base ) {
874 StorageType* invoker = static_cast<StorageType*>(base);
875 return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_),
876 Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_),
877 Unwrap(invoker->p6_));
878 }
879 };
880
881
882 // These are the actual storage classes for the invokers.
883
884 template <typename Sig>
885 class InvokerStorage0 : public internal::InvokerStorageBase {
886 public:
887 typedef InvokerStorage0 StorageType;
888 typedef FunctionTraits0<StorageType, Sig> FunctionTraits;
889
890 InvokerStorage0(Sig f)
891 : f_(f) {
892 }
893
894 virtual ~InvokerStorage0() { }
895
896 Sig f_;
897 };
898
899 template <typename Sig, typename P1>
900 class InvokerStorage1 : public internal::InvokerStorageBase {
901 public:
902 typedef InvokerStorage1 StorageType;
903 typedef FunctionTraits1<StorageType, Sig> FunctionTraits;
904
905 InvokerStorage1(Sig f, const P1& p1)
906 : f_(f), p1_(p1) {
907 MaybeRefcount<FunctionTraits::kShouldRef, P1>::AddRef(p1_);
908 }
909
910 virtual ~InvokerStorage1() {
911 MaybeRefcount<FunctionTraits::kShouldRef, P1>::Release(p1_);
912 }
913
914 Sig f_;
915 P1 p1_;
916 };
917
918 template <typename Sig, typename P1, typename P2>
919 class InvokerStorage2 : public internal::InvokerStorageBase {
920 public:
921 typedef InvokerStorage2 StorageType;
922 typedef FunctionTraits2<StorageType, Sig> FunctionTraits;
923
924 InvokerStorage2(Sig f, const P1& p1, const P2& p2)
925 : f_(f), p1_(p1), p2_(p2) {
926 MaybeRefcount<FunctionTraits::kShouldRef, P1>::AddRef(p1_);
927 }
928
929 virtual ~InvokerStorage2() {
930 MaybeRefcount<FunctionTraits::kShouldRef, P1>::Release(p1_);
931 }
932
933 Sig f_;
934 P1 p1_;
935 P2 p2_;
936 };
937
938 template <typename Sig, typename P1, typename P2, typename P3>
939 class InvokerStorage3 : public internal::InvokerStorageBase {
940 public:
941 typedef InvokerStorage3 StorageType;
942 typedef FunctionTraits3<StorageType, Sig> FunctionTraits;
943
944 InvokerStorage3(Sig f, const P1& p1, const P2& p2, const P3& p3)
945 : f_(f), p1_(p1), p2_(p2), p3_(p3) {
946 MaybeRefcount<FunctionTraits::kShouldRef, P1>::AddRef(p1_);
947 }
948
949 virtual ~InvokerStorage3() {
950 MaybeRefcount<FunctionTraits::kShouldRef, P1>::Release(p1_);
951 }
952
953 Sig f_;
954 P1 p1_;
955 P2 p2_;
956 P3 p3_;
957 };
958
959 template <typename Sig, typename P1, typename P2, typename P3, typename P4>
960 class InvokerStorage4 : public internal::InvokerStorageBase {
961 public:
962 typedef InvokerStorage4 StorageType;
963 typedef FunctionTraits4<StorageType, Sig> FunctionTraits;
964
965 InvokerStorage4(Sig f, const P1& p1, const P2& p2, const P3& p3, const P4& p4)
966 : f_(f), p1_(p1), p2_(p2), p3_(p3), p4_(p4) {
967 MaybeRefcount<FunctionTraits::kShouldRef, P1>::AddRef(p1_);
968 }
969
970 virtual ~InvokerStorage4() {
971 MaybeRefcount<FunctionTraits::kShouldRef, P1>::Release(p1_);
972 }
973
974 Sig f_;
975 P1 p1_;
976 P2 p2_;
977 P3 p3_;
978 P4 p4_;
979 };
980
981 template <typename Sig, typename P1, typename P2, typename P3, typename P4,
982 typename P5>
983 class InvokerStorage5 : public internal::InvokerStorageBase {
984 public:
985 typedef InvokerStorage5 StorageType;
986 typedef FunctionTraits5<StorageType, Sig> FunctionTraits;
987
988 InvokerStorage5(Sig f, const P1& p1, const P2& p2, const P3& p3,
989 const P4& p4, const P5& p5)
990 : f_(f), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) {
991 MaybeRefcount<FunctionTraits::kShouldRef, P1>::AddRef(p1_);
992 }
993
994 virtual ~InvokerStorage5() {
995 MaybeRefcount<FunctionTraits::kShouldRef, P1>::Release(p1_);
996 }
997
998 Sig f_;
999 P1 p1_;
1000 P2 p2_;
1001 P3 p3_;
1002 P4 p4_;
1003 P5 p5_;
1004 };
1005
1006 template <typename Sig, typename P1, typename P2, typename P3, typename P4,
1007 typename P5, typename P6>
1008 class InvokerStorage6 : public internal::InvokerStorageBase {
1009 public:
1010 typedef InvokerStorage6 StorageType;
1011 typedef FunctionTraits6<StorageType, Sig> FunctionTraits;
1012
1013 InvokerStorage6(Sig f, const P1& p1, const P2& p2, const P3& p3,
1014 const P4& p4, const P5& p5, const P6& p6)
1015 : f_(f), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) {
1016 MaybeRefcount<FunctionTraits::kShouldRef, P1>::AddRef(p1_);
1017 }
1018
1019 virtual ~InvokerStorage6() {
1020 MaybeRefcount<FunctionTraits::kShouldRef, P1>::Release(p1_);
1021 }
1022
1023 Sig f_;
1024 P1 p1_;
1025 P2 p2_;
1026 P3 p3_;
1027 P4 p4_;
1028 P5 p5_;
1029 P6 p6_;
1030 };
1031
1032 } // namespace internal
1033
1034 template <typename Sig>
1035 internal::InvokerStorageHolder<internal::InvokerStorage0<Sig> >
1036 Prebind(Sig f) {
1037 return internal::MakeInvokerStorageHolder(
1038 new internal::InvokerStorage0<Sig>(f));
1039 }
1040
1041 template <typename Sig, typename P1>
1042 internal::InvokerStorageHolder<internal::InvokerStorage1<Sig,P1> >
1043 Prebind(Sig f, const P1& p1) {
1044 return internal::MakeInvokerStorageHolder(
1045 new internal::InvokerStorage1<Sig, P1>(
1046 f, p1));
1047 }
1048
1049 template <typename Sig, typename P1, typename P2>
1050 internal::InvokerStorageHolder<internal::InvokerStorage2<Sig,P1, P2> >
1051 Prebind(Sig f, const P1& p1, const P2& p2) {
1052 return internal::MakeInvokerStorageHolder(
1053 new internal::InvokerStorage2<Sig, P1, P2>(
1054 f, p1, p2));
1055 }
1056
1057 template <typename Sig, typename P1, typename P2, typename P3>
1058 internal::InvokerStorageHolder<internal::InvokerStorage3<Sig,P1, P2, P3> >
1059 Prebind(Sig f, const P1& p1, const P2& p2, const P3& p3) {
1060 return internal::MakeInvokerStorageHolder(
1061 new internal::InvokerStorage3<Sig, P1, P2, P3>(
1062 f, p1, p2, p3));
1063 }
1064
1065 template <typename Sig, typename P1, typename P2, typename P3, typename P4>
1066 internal::InvokerStorageHolder<internal::InvokerStorage4<Sig,P1, P2, P3, P4> >
1067 Prebind(Sig f, const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
1068 return internal::MakeInvokerStorageHolder(
1069 new internal::InvokerStorage4<Sig, P1, P2, P3, P4>(
1070 f, p1, p2, p3, p4));
1071 }
1072
1073 template <typename Sig, typename P1, typename P2, typename P3, typename P4,
1074 typename P5>
1075 internal::InvokerStorageHolder<internal::InvokerStorage5<Sig,P1, P2, P3, P4,
1076 P5> >
1077 Prebind(Sig f, const P1& p1, const P2& p2, const P3& p3, const P4& p4,
1078 const P5& p5) {
1079 return internal::MakeInvokerStorageHolder(
1080 new internal::InvokerStorage5<Sig, P1, P2, P3, P4, P5>(
1081 f, p1, p2, p3, p4, p5));
1082 }
1083
1084 template <typename Sig, typename P1, typename P2, typename P3, typename P4,
1085 typename P5, typename P6>
1086 internal::InvokerStorageHolder<internal::InvokerStorage6<Sig,P1, P2, P3, P4,
1087 P5, P6> >
1088 Prebind(Sig f, const P1& p1, const P2& p2, const P3& p3, const P4& p4,
1089 const P5& p5, const P6& p6) {
1090 return internal::MakeInvokerStorageHolder(
1091 new internal::InvokerStorage6<Sig, P1, P2, P3, P4, P5, P6>(
1092 f, p1, p2, p3, p4, p5, p6));
1093 }
1094
1095 } // namespace base
1096
1097 #endif // BASE_PREBIND_H_
OLDNEW
« no previous file with comments | « base/base.gypi ('k') | base/prebind.h.pump » ('j') | base/uber_callback.h.pump » ('J')

Powered by Google App Engine
This is Rietveld 408576698