1 // This file was GENERATED by command:
2 // pump.py bind_internal.h.pump
3 // DO NOT EDIT BY HAND!!!
6 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
7 // Use of this source code is governed by a BSD-style license that can be
8 // found in the LICENSE file.
10 #ifndef BASE_BIND_INTERNAL_H_
11 #define BASE_BIND_INTERNAL_H_
13 #include "base/bind_helpers.h"
14 #include "base/callback_internal.h"
15 #include "base/memory/raw_scoped_refptr_mismatch_checker.h"
16 #include "base/memory/weak_ptr.h"
17 #include "base/template_util.h"
18 #include "build/build_config.h"
21 #include "base/bind_internal_win.h"
27 // See base/callback.h for user documentation.
31 // Runnable -- A type (really a type class) that has a single Run() method
32 // and a RunType typedef that corresponds to the type of Run().
33 // A Runnable can declare that it should treated like a method
34 // call by including a typedef named IsMethod. The value of
35 // this typedef is NOT inspected, only the existence. When a
36 // Runnable declares itself a method, Bind() will enforce special
37 // refcounting + WeakPtr handling semantics for the first
38 // parameter which is expected to be an object.
39 // Functor -- A copyable type representing something that should be called.
40 // All function pointers, Callback<>, and Runnables are functors
41 // even if the invocation syntax differs.
42 // RunType -- A function type (as opposed to function _pointer_ type) for
43 // a Run() function. Usually just a convenience typedef.
44 // (Bound)ArgsType -- A function type that is being (ab)used to store the
45 // types of set of arguments. The "return" type is always
46 // void here. We use this hack so that we do not need
47 // a new type name for each arity of type. (eg.,
48 // BindState1, BindState2). This makes forward
49 // declarations and friending much much easier.
52 // RunnableAdapter<> -- Wraps the various "function" pointer types into an
53 // object that adheres to the Runnable interface.
54 // FunctionTraits<> -- Type traits that unwrap a function signature into a
55 // a set of easier to use typedefs. Used mainly for
56 // compile time asserts.
57 // There are |ARITY| FunctionTraits types.
58 // ForceVoidReturn<> -- Helper class for translating function signatures to
59 // equivalent forms with a "void" return type.
60 // FunctorTraits<> -- Type traits used determine the correct RunType and
61 // RunnableType for a Functor. This is where function
62 // signature adapters are applied.
63 // MakeRunnable<> -- Takes a Functor and returns an object in the Runnable
64 // type class that represents the underlying Functor.
65 // There are |O(1)| MakeRunnable types.
66 // InvokeHelper<> -- Take a Runnable + arguments and actully invokes it.
67 // Handle the differing syntaxes needed for WeakPtr<> support,
68 // and for ignoring return values. This is separate from
69 // Invoker to avoid creating multiple version of Invoker<>
70 // which grows at O(n^2) with the arity.
71 // Invoker<> -- Unwraps the curried parameters and executes the Runnable.
72 // There are |(ARITY^2 + ARITY)/2| Invoketypes.
73 // BindState<> -- Stores the curried parameters, and is the main entry point
74 // into the Bind() system, doing most of the type resolution.
75 // There are ARITY BindState types.
79 // The RunnableAdapter<> templates provide a uniform interface for invoking
80 // a function pointer, method pointer, or const method pointer. The adapter
81 // exposes a Run() method with an appropriate signature. Using this wrapper
82 // allows for writing code that supports all three pointer types without
83 // undue repetition. Without it, a lot of code would need to be repeated 3
86 // For method pointers and const method pointers the first argument to Run()
87 // is considered to be the received of the method. This is similar to STL's
90 // This class also exposes a RunType typedef that is the function type of the
93 // If and only if the wrapper contains a method or const method pointer, an
94 // IsMethod typedef is exposed. The existence of this typedef (NOT the value)
95 // marks that the wrapper should be considered a method wrapper.
97 template <typename Functor
>
98 class RunnableAdapter
;
101 template <typename R
, typename
... Args
>
102 class RunnableAdapter
<R(*)(Args
...)> {
104 typedef R (RunType
)(Args
...);
106 explicit RunnableAdapter(R(*function
)(Args
...))
107 : function_(function
) {
110 R
Run(typename CallbackParamTraits
<Args
>::ForwardType
... args
) {
111 return function_(CallbackForward(args
)...);
115 R (*function_
)(Args
...);
119 template <typename R
, typename T
, typename
... Args
>
120 class RunnableAdapter
<R(T::*)(Args
...)> {
122 typedef R (RunType
)(T
*, Args
...);
123 typedef true_type IsMethod
;
125 explicit RunnableAdapter(R(T::*method
)(Args
...))
129 R
Run(T
* object
, typename CallbackParamTraits
<Args
>::ForwardType
... args
) {
130 return (object
->*method_
)(CallbackForward(args
)...);
134 R (T::*method_
)(Args
...);
138 template <typename R
, typename T
, typename
... Args
>
139 class RunnableAdapter
<R(T::*)(Args
...) const> {
141 typedef R (RunType
)(const T
*, Args
...);
142 typedef true_type IsMethod
;
144 explicit RunnableAdapter(R(T::*method
)(Args
...) const)
148 R
Run(const T
* object
,
149 typename CallbackParamTraits
<Args
>::ForwardType
... args
) {
150 return (object
->*method_
)(CallbackForward(args
)...);
154 R (T::*method_
)(Args
...) const;
157 // TODO(tzik): Remove FunctionTraits after we finish removing bind.pump.
160 // Breaks a function signature apart into typedefs for easier introspection.
161 template <typename Sig
>
162 struct FunctionTraits
;
164 template <typename R
>
165 struct FunctionTraits
<R()> {
166 typedef R ReturnType
;
169 template <typename R
, typename A1
>
170 struct FunctionTraits
<R(A1
)> {
171 typedef R ReturnType
;
175 template <typename R
, typename A1
, typename A2
>
176 struct FunctionTraits
<R(A1
, A2
)> {
177 typedef R ReturnType
;
182 template <typename R
, typename A1
, typename A2
, typename A3
>
183 struct FunctionTraits
<R(A1
, A2
, A3
)> {
184 typedef R ReturnType
;
190 template <typename R
, typename A1
, typename A2
, typename A3
, typename A4
>
191 struct FunctionTraits
<R(A1
, A2
, A3
, A4
)> {
192 typedef R ReturnType
;
199 template <typename R
, typename A1
, typename A2
, typename A3
, typename A4
,
201 struct FunctionTraits
<R(A1
, A2
, A3
, A4
, A5
)> {
202 typedef R ReturnType
;
210 template <typename R
, typename A1
, typename A2
, typename A3
, typename A4
,
211 typename A5
, typename A6
>
212 struct FunctionTraits
<R(A1
, A2
, A3
, A4
, A5
, A6
)> {
213 typedef R ReturnType
;
222 template <typename R
, typename A1
, typename A2
, typename A3
, typename A4
,
223 typename A5
, typename A6
, typename A7
>
224 struct FunctionTraits
<R(A1
, A2
, A3
, A4
, A5
, A6
, A7
)> {
225 typedef R ReturnType
;
238 // Set of templates that support forcing the function return type to void.
239 template <typename Sig
>
240 struct ForceVoidReturn
;
242 template <typename R
, typename
... Args
>
243 struct ForceVoidReturn
<R(Args
...)> {
244 typedef void(RunType
)(Args
...);
250 // See description at top of file.
251 template <typename T
>
252 struct FunctorTraits
{
253 typedef RunnableAdapter
<T
> RunnableType
;
254 typedef typename
RunnableType::RunType RunType
;
257 template <typename T
>
258 struct FunctorTraits
<IgnoreResultHelper
<T
> > {
259 typedef typename FunctorTraits
<T
>::RunnableType RunnableType
;
260 typedef typename ForceVoidReturn
<
261 typename
RunnableType::RunType
>::RunType RunType
;
264 template <typename T
>
265 struct FunctorTraits
<Callback
<T
> > {
266 typedef Callback
<T
> RunnableType
;
267 typedef typename Callback
<T
>::RunType RunType
;
273 // Converts a passed in functor to a RunnableType using type inference.
275 template <typename T
>
276 typename FunctorTraits
<T
>::RunnableType
MakeRunnable(const T
& t
) {
277 return RunnableAdapter
<T
>(t
);
280 template <typename T
>
281 typename FunctorTraits
<T
>::RunnableType
282 MakeRunnable(const IgnoreResultHelper
<T
>& t
) {
283 return MakeRunnable(t
.functor_
);
286 template <typename T
>
287 const typename FunctorTraits
<Callback
<T
> >::RunnableType
&
288 MakeRunnable(const Callback
<T
>& t
) {
289 DCHECK(!t
.is_null());
296 // There are 3 logical InvokeHelper<> specializations: normal, void-return,
299 // The normal type just calls the underlying runnable.
301 // We need a InvokeHelper to handle void return types in order to support
302 // IgnoreResult(). Normally, if the Runnable's RunType had a void return,
303 // the template system would just accept "return functor.Run()" ignoring
304 // the fact that a void function is being used with return. This piece of
305 // sugar breaks though when the Runnable's RunType is not void. Thus, we
306 // need a partial specialization to change the syntax to drop the "return"
307 // from the invocation call.
309 // WeakCalls similarly need special syntax that is applied to the first
310 // argument to check if they should no-op themselves.
311 template <bool IsWeakCall
, typename ReturnType
, typename Runnable
,
315 template <typename ReturnType
, typename Runnable
, typename
... Args
>
316 struct InvokeHelper
<false, ReturnType
, Runnable
,
318 static ReturnType
MakeItSo(Runnable runnable
, Args
... args
) {
319 return runnable
.Run(CallbackForward(args
)...);
323 template <typename Runnable
, typename
... Args
>
324 struct InvokeHelper
<false, void, Runnable
, void(Args
...)> {
325 static void MakeItSo(Runnable runnable
, Args
... args
) {
326 runnable
.Run(CallbackForward(args
)...);
330 template <typename Runnable
, typename BoundWeakPtr
, typename
... Args
>
331 struct InvokeHelper
<true, void, Runnable
, void(BoundWeakPtr
, Args
...)> {
332 static void MakeItSo(Runnable runnable
, BoundWeakPtr weak_ptr
, Args
... args
) {
333 if (!weak_ptr
.get()) {
336 runnable
.Run(weak_ptr
.get(), CallbackForward(args
)...);
340 #if !defined(_MSC_VER)
342 template <typename ReturnType
, typename Runnable
, typename ArgsType
>
343 struct InvokeHelper
<true, ReturnType
, Runnable
, ArgsType
> {
344 // WeakCalls are only supported for functions with a void return type.
345 // Otherwise, the function result would be undefined if the the WeakPtr<>
347 COMPILE_ASSERT(is_void
<ReturnType
>::value
,
348 weak_ptrs_can_only_bind_to_methods_without_return_values
);
355 // See description at the top of the file.
356 template <int NumBound
, typename Storage
, typename RunType
>
360 template <typename StorageType
, typename R
>
361 struct Invoker
<0, StorageType
, R()> {
362 typedef R(RunType
)(BindStateBase
*);
364 typedef R(UnboundRunType
)();
366 static R
Run(BindStateBase
* base
) {
367 StorageType
* storage
= static_cast<StorageType
*>(base
);
369 // Local references to make debugger stepping easier. If in a debugger,
370 // you really want to warp ahead and step through the
371 // InvokeHelper<>::MakeItSo() call below.
373 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
374 typename
StorageType::RunnableType
,
376 ::MakeItSo(storage
->runnable_
);
381 template <typename StorageType
, typename R
,typename X1
>
382 struct Invoker
<0, StorageType
, R(X1
)> {
383 typedef R(RunType
)(BindStateBase
*,
384 typename CallbackParamTraits
<X1
>::ForwardType
);
386 typedef R(UnboundRunType
)(X1
);
388 static R
Run(BindStateBase
* base
,
389 typename CallbackParamTraits
<X1
>::ForwardType x1
) {
390 StorageType
* storage
= static_cast<StorageType
*>(base
);
392 // Local references to make debugger stepping easier. If in a debugger,
393 // you really want to warp ahead and step through the
394 // InvokeHelper<>::MakeItSo() call below.
396 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
397 typename
StorageType::RunnableType
,
398 void(typename CallbackParamTraits
<X1
>::ForwardType x1
)>
399 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
));
404 template <typename StorageType
, typename R
,typename X1
>
405 struct Invoker
<1, StorageType
, R(X1
)> {
406 typedef R(RunType
)(BindStateBase
*);
408 typedef R(UnboundRunType
)();
410 static R
Run(BindStateBase
* base
) {
411 StorageType
* storage
= static_cast<StorageType
*>(base
);
413 // Local references to make debugger stepping easier. If in a debugger,
414 // you really want to warp ahead and step through the
415 // InvokeHelper<>::MakeItSo() call below.
416 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
418 typename
Bound1UnwrapTraits::ForwardType x1
=
419 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
420 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
421 typename
StorageType::RunnableType
,
422 void(typename
Bound1UnwrapTraits::ForwardType
)>
423 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
));
428 template <typename StorageType
, typename R
,typename X1
, typename X2
>
429 struct Invoker
<0, StorageType
, R(X1
, X2
)> {
430 typedef R(RunType
)(BindStateBase
*,
431 typename CallbackParamTraits
<X1
>::ForwardType
,
432 typename CallbackParamTraits
<X2
>::ForwardType
);
434 typedef R(UnboundRunType
)(X1
, X2
);
436 static R
Run(BindStateBase
* base
,
437 typename CallbackParamTraits
<X1
>::ForwardType x1
,
438 typename CallbackParamTraits
<X2
>::ForwardType x2
) {
439 StorageType
* storage
= static_cast<StorageType
*>(base
);
441 // Local references to make debugger stepping easier. If in a debugger,
442 // you really want to warp ahead and step through the
443 // InvokeHelper<>::MakeItSo() call below.
445 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
446 typename
StorageType::RunnableType
,
447 void(typename CallbackParamTraits
<X1
>::ForwardType x1
,
448 typename CallbackParamTraits
<X2
>::ForwardType x2
)>
449 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
450 CallbackForward(x2
));
455 template <typename StorageType
, typename R
,typename X1
, typename X2
>
456 struct Invoker
<1, StorageType
, R(X1
, X2
)> {
457 typedef R(RunType
)(BindStateBase
*,
458 typename CallbackParamTraits
<X2
>::ForwardType
);
460 typedef R(UnboundRunType
)(X2
);
462 static R
Run(BindStateBase
* base
,
463 typename CallbackParamTraits
<X2
>::ForwardType x2
) {
464 StorageType
* storage
= static_cast<StorageType
*>(base
);
466 // Local references to make debugger stepping easier. If in a debugger,
467 // you really want to warp ahead and step through the
468 // InvokeHelper<>::MakeItSo() call below.
469 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
471 typename
Bound1UnwrapTraits::ForwardType x1
=
472 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
473 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
474 typename
StorageType::RunnableType
,
475 void(typename
Bound1UnwrapTraits::ForwardType
,
476 typename CallbackParamTraits
<X2
>::ForwardType x2
)>
477 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
478 CallbackForward(x2
));
483 template <typename StorageType
, typename R
,typename X1
, typename X2
>
484 struct Invoker
<2, StorageType
, R(X1
, X2
)> {
485 typedef R(RunType
)(BindStateBase
*);
487 typedef R(UnboundRunType
)();
489 static R
Run(BindStateBase
* base
) {
490 StorageType
* storage
= static_cast<StorageType
*>(base
);
492 // Local references to make debugger stepping easier. If in a debugger,
493 // you really want to warp ahead and step through the
494 // InvokeHelper<>::MakeItSo() call below.
495 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
496 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
498 typename
Bound1UnwrapTraits::ForwardType x1
=
499 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
500 typename
Bound2UnwrapTraits::ForwardType x2
=
501 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
502 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
503 typename
StorageType::RunnableType
,
504 void(typename
Bound1UnwrapTraits::ForwardType
,
505 typename
Bound2UnwrapTraits::ForwardType
)>
506 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
507 CallbackForward(x2
));
512 template <typename StorageType
, typename R
,typename X1
, typename X2
,
514 struct Invoker
<0, StorageType
, R(X1
, X2
, X3
)> {
515 typedef R(RunType
)(BindStateBase
*,
516 typename CallbackParamTraits
<X1
>::ForwardType
,
517 typename CallbackParamTraits
<X2
>::ForwardType
,
518 typename CallbackParamTraits
<X3
>::ForwardType
);
520 typedef R(UnboundRunType
)(X1
, X2
, X3
);
522 static R
Run(BindStateBase
* base
,
523 typename CallbackParamTraits
<X1
>::ForwardType x1
,
524 typename CallbackParamTraits
<X2
>::ForwardType x2
,
525 typename CallbackParamTraits
<X3
>::ForwardType x3
) {
526 StorageType
* storage
= static_cast<StorageType
*>(base
);
528 // Local references to make debugger stepping easier. If in a debugger,
529 // you really want to warp ahead and step through the
530 // InvokeHelper<>::MakeItSo() call below.
532 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
533 typename
StorageType::RunnableType
,
534 void(typename CallbackParamTraits
<X1
>::ForwardType x1
,
535 typename CallbackParamTraits
<X2
>::ForwardType x2
,
536 typename CallbackParamTraits
<X3
>::ForwardType x3
)>
537 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
538 CallbackForward(x2
), CallbackForward(x3
));
543 template <typename StorageType
, typename R
,typename X1
, typename X2
,
545 struct Invoker
<1, StorageType
, R(X1
, X2
, X3
)> {
546 typedef R(RunType
)(BindStateBase
*,
547 typename CallbackParamTraits
<X2
>::ForwardType
,
548 typename CallbackParamTraits
<X3
>::ForwardType
);
550 typedef R(UnboundRunType
)(X2
, X3
);
552 static R
Run(BindStateBase
* base
,
553 typename CallbackParamTraits
<X2
>::ForwardType x2
,
554 typename CallbackParamTraits
<X3
>::ForwardType x3
) {
555 StorageType
* storage
= static_cast<StorageType
*>(base
);
557 // Local references to make debugger stepping easier. If in a debugger,
558 // you really want to warp ahead and step through the
559 // InvokeHelper<>::MakeItSo() call below.
560 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
562 typename
Bound1UnwrapTraits::ForwardType x1
=
563 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
564 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
565 typename
StorageType::RunnableType
,
566 void(typename
Bound1UnwrapTraits::ForwardType
,
567 typename CallbackParamTraits
<X2
>::ForwardType x2
,
568 typename CallbackParamTraits
<X3
>::ForwardType x3
)>
569 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
570 CallbackForward(x2
), CallbackForward(x3
));
575 template <typename StorageType
, typename R
,typename X1
, typename X2
,
577 struct Invoker
<2, StorageType
, R(X1
, X2
, X3
)> {
578 typedef R(RunType
)(BindStateBase
*,
579 typename CallbackParamTraits
<X3
>::ForwardType
);
581 typedef R(UnboundRunType
)(X3
);
583 static R
Run(BindStateBase
* base
,
584 typename CallbackParamTraits
<X3
>::ForwardType x3
) {
585 StorageType
* storage
= static_cast<StorageType
*>(base
);
587 // Local references to make debugger stepping easier. If in a debugger,
588 // you really want to warp ahead and step through the
589 // InvokeHelper<>::MakeItSo() call below.
590 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
591 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
593 typename
Bound1UnwrapTraits::ForwardType x1
=
594 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
595 typename
Bound2UnwrapTraits::ForwardType x2
=
596 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
597 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
598 typename
StorageType::RunnableType
,
599 void(typename
Bound1UnwrapTraits::ForwardType
,
600 typename
Bound2UnwrapTraits::ForwardType
,
601 typename CallbackParamTraits
<X3
>::ForwardType x3
)>
602 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
603 CallbackForward(x2
), CallbackForward(x3
));
608 template <typename StorageType
, typename R
,typename X1
, typename X2
,
610 struct Invoker
<3, StorageType
, R(X1
, X2
, X3
)> {
611 typedef R(RunType
)(BindStateBase
*);
613 typedef R(UnboundRunType
)();
615 static R
Run(BindStateBase
* base
) {
616 StorageType
* storage
= static_cast<StorageType
*>(base
);
618 // Local references to make debugger stepping easier. If in a debugger,
619 // you really want to warp ahead and step through the
620 // InvokeHelper<>::MakeItSo() call below.
621 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
622 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
623 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
625 typename
Bound1UnwrapTraits::ForwardType x1
=
626 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
627 typename
Bound2UnwrapTraits::ForwardType x2
=
628 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
629 typename
Bound3UnwrapTraits::ForwardType x3
=
630 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
631 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
632 typename
StorageType::RunnableType
,
633 void(typename
Bound1UnwrapTraits::ForwardType
,
634 typename
Bound2UnwrapTraits::ForwardType
,
635 typename
Bound3UnwrapTraits::ForwardType
)>
636 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
637 CallbackForward(x2
), CallbackForward(x3
));
642 template <typename StorageType
, typename R
,typename X1
, typename X2
,
643 typename X3
, typename X4
>
644 struct Invoker
<0, StorageType
, R(X1
, X2
, X3
, X4
)> {
645 typedef R(RunType
)(BindStateBase
*,
646 typename CallbackParamTraits
<X1
>::ForwardType
,
647 typename CallbackParamTraits
<X2
>::ForwardType
,
648 typename CallbackParamTraits
<X3
>::ForwardType
,
649 typename CallbackParamTraits
<X4
>::ForwardType
);
651 typedef R(UnboundRunType
)(X1
, X2
, X3
, X4
);
653 static R
Run(BindStateBase
* base
,
654 typename CallbackParamTraits
<X1
>::ForwardType x1
,
655 typename CallbackParamTraits
<X2
>::ForwardType x2
,
656 typename CallbackParamTraits
<X3
>::ForwardType x3
,
657 typename CallbackParamTraits
<X4
>::ForwardType x4
) {
658 StorageType
* storage
= static_cast<StorageType
*>(base
);
660 // Local references to make debugger stepping easier. If in a debugger,
661 // you really want to warp ahead and step through the
662 // InvokeHelper<>::MakeItSo() call below.
664 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
665 typename
StorageType::RunnableType
,
666 void(typename CallbackParamTraits
<X1
>::ForwardType x1
,
667 typename CallbackParamTraits
<X2
>::ForwardType x2
,
668 typename CallbackParamTraits
<X3
>::ForwardType x3
,
669 typename CallbackParamTraits
<X4
>::ForwardType x4
)>
670 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
671 CallbackForward(x2
), CallbackForward(x3
),
672 CallbackForward(x4
));
677 template <typename StorageType
, typename R
,typename X1
, typename X2
,
678 typename X3
, typename X4
>
679 struct Invoker
<1, StorageType
, R(X1
, X2
, X3
, X4
)> {
680 typedef R(RunType
)(BindStateBase
*,
681 typename CallbackParamTraits
<X2
>::ForwardType
,
682 typename CallbackParamTraits
<X3
>::ForwardType
,
683 typename CallbackParamTraits
<X4
>::ForwardType
);
685 typedef R(UnboundRunType
)(X2
, X3
, X4
);
687 static R
Run(BindStateBase
* base
,
688 typename CallbackParamTraits
<X2
>::ForwardType x2
,
689 typename CallbackParamTraits
<X3
>::ForwardType x3
,
690 typename CallbackParamTraits
<X4
>::ForwardType x4
) {
691 StorageType
* storage
= static_cast<StorageType
*>(base
);
693 // Local references to make debugger stepping easier. If in a debugger,
694 // you really want to warp ahead and step through the
695 // InvokeHelper<>::MakeItSo() call below.
696 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
698 typename
Bound1UnwrapTraits::ForwardType x1
=
699 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
700 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
701 typename
StorageType::RunnableType
,
702 void(typename
Bound1UnwrapTraits::ForwardType
,
703 typename CallbackParamTraits
<X2
>::ForwardType x2
,
704 typename CallbackParamTraits
<X3
>::ForwardType x3
,
705 typename CallbackParamTraits
<X4
>::ForwardType x4
)>
706 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
707 CallbackForward(x2
), CallbackForward(x3
),
708 CallbackForward(x4
));
713 template <typename StorageType
, typename R
,typename X1
, typename X2
,
714 typename X3
, typename X4
>
715 struct Invoker
<2, StorageType
, R(X1
, X2
, X3
, X4
)> {
716 typedef R(RunType
)(BindStateBase
*,
717 typename CallbackParamTraits
<X3
>::ForwardType
,
718 typename CallbackParamTraits
<X4
>::ForwardType
);
720 typedef R(UnboundRunType
)(X3
, X4
);
722 static R
Run(BindStateBase
* base
,
723 typename CallbackParamTraits
<X3
>::ForwardType x3
,
724 typename CallbackParamTraits
<X4
>::ForwardType x4
) {
725 StorageType
* storage
= static_cast<StorageType
*>(base
);
727 // Local references to make debugger stepping easier. If in a debugger,
728 // you really want to warp ahead and step through the
729 // InvokeHelper<>::MakeItSo() call below.
730 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
731 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
733 typename
Bound1UnwrapTraits::ForwardType x1
=
734 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
735 typename
Bound2UnwrapTraits::ForwardType x2
=
736 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
737 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
738 typename
StorageType::RunnableType
,
739 void(typename
Bound1UnwrapTraits::ForwardType
,
740 typename
Bound2UnwrapTraits::ForwardType
,
741 typename CallbackParamTraits
<X3
>::ForwardType x3
,
742 typename CallbackParamTraits
<X4
>::ForwardType x4
)>
743 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
744 CallbackForward(x2
), CallbackForward(x3
),
745 CallbackForward(x4
));
750 template <typename StorageType
, typename R
,typename X1
, typename X2
,
751 typename X3
, typename X4
>
752 struct Invoker
<3, StorageType
, R(X1
, X2
, X3
, X4
)> {
753 typedef R(RunType
)(BindStateBase
*,
754 typename CallbackParamTraits
<X4
>::ForwardType
);
756 typedef R(UnboundRunType
)(X4
);
758 static R
Run(BindStateBase
* base
,
759 typename CallbackParamTraits
<X4
>::ForwardType x4
) {
760 StorageType
* storage
= static_cast<StorageType
*>(base
);
762 // Local references to make debugger stepping easier. If in a debugger,
763 // you really want to warp ahead and step through the
764 // InvokeHelper<>::MakeItSo() call below.
765 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
766 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
767 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
769 typename
Bound1UnwrapTraits::ForwardType x1
=
770 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
771 typename
Bound2UnwrapTraits::ForwardType x2
=
772 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
773 typename
Bound3UnwrapTraits::ForwardType x3
=
774 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
775 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
776 typename
StorageType::RunnableType
,
777 void(typename
Bound1UnwrapTraits::ForwardType
,
778 typename
Bound2UnwrapTraits::ForwardType
,
779 typename
Bound3UnwrapTraits::ForwardType
,
780 typename CallbackParamTraits
<X4
>::ForwardType x4
)>
781 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
782 CallbackForward(x2
), CallbackForward(x3
),
783 CallbackForward(x4
));
788 template <typename StorageType
, typename R
,typename X1
, typename X2
,
789 typename X3
, typename X4
>
790 struct Invoker
<4, StorageType
, R(X1
, X2
, X3
, X4
)> {
791 typedef R(RunType
)(BindStateBase
*);
793 typedef R(UnboundRunType
)();
795 static R
Run(BindStateBase
* base
) {
796 StorageType
* storage
= static_cast<StorageType
*>(base
);
798 // Local references to make debugger stepping easier. If in a debugger,
799 // you really want to warp ahead and step through the
800 // InvokeHelper<>::MakeItSo() call below.
801 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
802 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
803 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
804 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
806 typename
Bound1UnwrapTraits::ForwardType x1
=
807 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
808 typename
Bound2UnwrapTraits::ForwardType x2
=
809 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
810 typename
Bound3UnwrapTraits::ForwardType x3
=
811 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
812 typename
Bound4UnwrapTraits::ForwardType x4
=
813 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
814 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
815 typename
StorageType::RunnableType
,
816 void(typename
Bound1UnwrapTraits::ForwardType
,
817 typename
Bound2UnwrapTraits::ForwardType
,
818 typename
Bound3UnwrapTraits::ForwardType
,
819 typename
Bound4UnwrapTraits::ForwardType
)>
820 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
821 CallbackForward(x2
), CallbackForward(x3
),
822 CallbackForward(x4
));
827 template <typename StorageType
, typename R
,typename X1
, typename X2
,
828 typename X3
, typename X4
, typename X5
>
829 struct Invoker
<0, StorageType
, R(X1
, X2
, X3
, X4
, X5
)> {
830 typedef R(RunType
)(BindStateBase
*,
831 typename CallbackParamTraits
<X1
>::ForwardType
,
832 typename CallbackParamTraits
<X2
>::ForwardType
,
833 typename CallbackParamTraits
<X3
>::ForwardType
,
834 typename CallbackParamTraits
<X4
>::ForwardType
,
835 typename CallbackParamTraits
<X5
>::ForwardType
);
837 typedef R(UnboundRunType
)(X1
, X2
, X3
, X4
, X5
);
839 static R
Run(BindStateBase
* base
,
840 typename CallbackParamTraits
<X1
>::ForwardType x1
,
841 typename CallbackParamTraits
<X2
>::ForwardType x2
,
842 typename CallbackParamTraits
<X3
>::ForwardType x3
,
843 typename CallbackParamTraits
<X4
>::ForwardType x4
,
844 typename CallbackParamTraits
<X5
>::ForwardType x5
) {
845 StorageType
* storage
= static_cast<StorageType
*>(base
);
847 // Local references to make debugger stepping easier. If in a debugger,
848 // you really want to warp ahead and step through the
849 // InvokeHelper<>::MakeItSo() call below.
851 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
852 typename
StorageType::RunnableType
,
853 void(typename CallbackParamTraits
<X1
>::ForwardType x1
,
854 typename CallbackParamTraits
<X2
>::ForwardType x2
,
855 typename CallbackParamTraits
<X3
>::ForwardType x3
,
856 typename CallbackParamTraits
<X4
>::ForwardType x4
,
857 typename CallbackParamTraits
<X5
>::ForwardType x5
)>
858 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
859 CallbackForward(x2
), CallbackForward(x3
),
860 CallbackForward(x4
), CallbackForward(x5
));
865 template <typename StorageType
, typename R
,typename X1
, typename X2
,
866 typename X3
, typename X4
, typename X5
>
867 struct Invoker
<1, StorageType
, R(X1
, X2
, X3
, X4
, X5
)> {
868 typedef R(RunType
)(BindStateBase
*,
869 typename CallbackParamTraits
<X2
>::ForwardType
,
870 typename CallbackParamTraits
<X3
>::ForwardType
,
871 typename CallbackParamTraits
<X4
>::ForwardType
,
872 typename CallbackParamTraits
<X5
>::ForwardType
);
874 typedef R(UnboundRunType
)(X2
, X3
, X4
, X5
);
876 static R
Run(BindStateBase
* base
,
877 typename CallbackParamTraits
<X2
>::ForwardType x2
,
878 typename CallbackParamTraits
<X3
>::ForwardType x3
,
879 typename CallbackParamTraits
<X4
>::ForwardType x4
,
880 typename CallbackParamTraits
<X5
>::ForwardType x5
) {
881 StorageType
* storage
= static_cast<StorageType
*>(base
);
883 // Local references to make debugger stepping easier. If in a debugger,
884 // you really want to warp ahead and step through the
885 // InvokeHelper<>::MakeItSo() call below.
886 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
888 typename
Bound1UnwrapTraits::ForwardType x1
=
889 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
890 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
891 typename
StorageType::RunnableType
,
892 void(typename
Bound1UnwrapTraits::ForwardType
,
893 typename CallbackParamTraits
<X2
>::ForwardType x2
,
894 typename CallbackParamTraits
<X3
>::ForwardType x3
,
895 typename CallbackParamTraits
<X4
>::ForwardType x4
,
896 typename CallbackParamTraits
<X5
>::ForwardType x5
)>
897 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
898 CallbackForward(x2
), CallbackForward(x3
),
899 CallbackForward(x4
), CallbackForward(x5
));
904 template <typename StorageType
, typename R
,typename X1
, typename X2
,
905 typename X3
, typename X4
, typename X5
>
906 struct Invoker
<2, StorageType
, R(X1
, X2
, X3
, X4
, X5
)> {
907 typedef R(RunType
)(BindStateBase
*,
908 typename CallbackParamTraits
<X3
>::ForwardType
,
909 typename CallbackParamTraits
<X4
>::ForwardType
,
910 typename CallbackParamTraits
<X5
>::ForwardType
);
912 typedef R(UnboundRunType
)(X3
, X4
, X5
);
914 static R
Run(BindStateBase
* base
,
915 typename CallbackParamTraits
<X3
>::ForwardType x3
,
916 typename CallbackParamTraits
<X4
>::ForwardType x4
,
917 typename CallbackParamTraits
<X5
>::ForwardType x5
) {
918 StorageType
* storage
= static_cast<StorageType
*>(base
);
920 // Local references to make debugger stepping easier. If in a debugger,
921 // you really want to warp ahead and step through the
922 // InvokeHelper<>::MakeItSo() call below.
923 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
924 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
926 typename
Bound1UnwrapTraits::ForwardType x1
=
927 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
928 typename
Bound2UnwrapTraits::ForwardType x2
=
929 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
930 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
931 typename
StorageType::RunnableType
,
932 void(typename
Bound1UnwrapTraits::ForwardType
,
933 typename
Bound2UnwrapTraits::ForwardType
,
934 typename CallbackParamTraits
<X3
>::ForwardType x3
,
935 typename CallbackParamTraits
<X4
>::ForwardType x4
,
936 typename CallbackParamTraits
<X5
>::ForwardType x5
)>
937 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
938 CallbackForward(x2
), CallbackForward(x3
),
939 CallbackForward(x4
), CallbackForward(x5
));
944 template <typename StorageType
, typename R
,typename X1
, typename X2
,
945 typename X3
, typename X4
, typename X5
>
946 struct Invoker
<3, StorageType
, R(X1
, X2
, X3
, X4
, X5
)> {
947 typedef R(RunType
)(BindStateBase
*,
948 typename CallbackParamTraits
<X4
>::ForwardType
,
949 typename CallbackParamTraits
<X5
>::ForwardType
);
951 typedef R(UnboundRunType
)(X4
, X5
);
953 static R
Run(BindStateBase
* base
,
954 typename CallbackParamTraits
<X4
>::ForwardType x4
,
955 typename CallbackParamTraits
<X5
>::ForwardType x5
) {
956 StorageType
* storage
= static_cast<StorageType
*>(base
);
958 // Local references to make debugger stepping easier. If in a debugger,
959 // you really want to warp ahead and step through the
960 // InvokeHelper<>::MakeItSo() call below.
961 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
962 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
963 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
965 typename
Bound1UnwrapTraits::ForwardType x1
=
966 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
967 typename
Bound2UnwrapTraits::ForwardType x2
=
968 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
969 typename
Bound3UnwrapTraits::ForwardType x3
=
970 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
971 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
972 typename
StorageType::RunnableType
,
973 void(typename
Bound1UnwrapTraits::ForwardType
,
974 typename
Bound2UnwrapTraits::ForwardType
,
975 typename
Bound3UnwrapTraits::ForwardType
,
976 typename CallbackParamTraits
<X4
>::ForwardType x4
,
977 typename CallbackParamTraits
<X5
>::ForwardType x5
)>
978 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
979 CallbackForward(x2
), CallbackForward(x3
),
980 CallbackForward(x4
), CallbackForward(x5
));
985 template <typename StorageType
, typename R
,typename X1
, typename X2
,
986 typename X3
, typename X4
, typename X5
>
987 struct Invoker
<4, StorageType
, R(X1
, X2
, X3
, X4
, X5
)> {
988 typedef R(RunType
)(BindStateBase
*,
989 typename CallbackParamTraits
<X5
>::ForwardType
);
991 typedef R(UnboundRunType
)(X5
);
993 static R
Run(BindStateBase
* base
,
994 typename CallbackParamTraits
<X5
>::ForwardType x5
) {
995 StorageType
* storage
= static_cast<StorageType
*>(base
);
997 // Local references to make debugger stepping easier. If in a debugger,
998 // you really want to warp ahead and step through the
999 // InvokeHelper<>::MakeItSo() call below.
1000 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1001 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1002 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1003 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
1005 typename
Bound1UnwrapTraits::ForwardType x1
=
1006 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1007 typename
Bound2UnwrapTraits::ForwardType x2
=
1008 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1009 typename
Bound3UnwrapTraits::ForwardType x3
=
1010 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1011 typename
Bound4UnwrapTraits::ForwardType x4
=
1012 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
1013 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1014 typename
StorageType::RunnableType
,
1015 void(typename
Bound1UnwrapTraits::ForwardType
,
1016 typename
Bound2UnwrapTraits::ForwardType
,
1017 typename
Bound3UnwrapTraits::ForwardType
,
1018 typename
Bound4UnwrapTraits::ForwardType
,
1019 typename CallbackParamTraits
<X5
>::ForwardType x5
)>
1020 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1021 CallbackForward(x2
), CallbackForward(x3
),
1022 CallbackForward(x4
), CallbackForward(x5
));
1027 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1028 typename X3
, typename X4
, typename X5
>
1029 struct Invoker
<5, StorageType
, R(X1
, X2
, X3
, X4
, X5
)> {
1030 typedef R(RunType
)(BindStateBase
*);
1032 typedef R(UnboundRunType
)();
1034 static R
Run(BindStateBase
* base
) {
1035 StorageType
* storage
= static_cast<StorageType
*>(base
);
1037 // Local references to make debugger stepping easier. If in a debugger,
1038 // you really want to warp ahead and step through the
1039 // InvokeHelper<>::MakeItSo() call below.
1040 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1041 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1042 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1043 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
1044 typedef typename
StorageType::Bound5UnwrapTraits Bound5UnwrapTraits
;
1046 typename
Bound1UnwrapTraits::ForwardType x1
=
1047 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1048 typename
Bound2UnwrapTraits::ForwardType x2
=
1049 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1050 typename
Bound3UnwrapTraits::ForwardType x3
=
1051 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1052 typename
Bound4UnwrapTraits::ForwardType x4
=
1053 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
1054 typename
Bound5UnwrapTraits::ForwardType x5
=
1055 Bound5UnwrapTraits::Unwrap(storage
->p5_
);
1056 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1057 typename
StorageType::RunnableType
,
1058 void(typename
Bound1UnwrapTraits::ForwardType
,
1059 typename
Bound2UnwrapTraits::ForwardType
,
1060 typename
Bound3UnwrapTraits::ForwardType
,
1061 typename
Bound4UnwrapTraits::ForwardType
,
1062 typename
Bound5UnwrapTraits::ForwardType
)>
1063 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1064 CallbackForward(x2
), CallbackForward(x3
),
1065 CallbackForward(x4
), CallbackForward(x5
));
1070 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1071 typename X3
, typename X4
, typename X5
, typename X6
>
1072 struct Invoker
<0, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
)> {
1073 typedef R(RunType
)(BindStateBase
*,
1074 typename CallbackParamTraits
<X1
>::ForwardType
,
1075 typename CallbackParamTraits
<X2
>::ForwardType
,
1076 typename CallbackParamTraits
<X3
>::ForwardType
,
1077 typename CallbackParamTraits
<X4
>::ForwardType
,
1078 typename CallbackParamTraits
<X5
>::ForwardType
,
1079 typename CallbackParamTraits
<X6
>::ForwardType
);
1081 typedef R(UnboundRunType
)(X1
, X2
, X3
, X4
, X5
, X6
);
1083 static R
Run(BindStateBase
* base
,
1084 typename CallbackParamTraits
<X1
>::ForwardType x1
,
1085 typename CallbackParamTraits
<X2
>::ForwardType x2
,
1086 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1087 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1088 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1089 typename CallbackParamTraits
<X6
>::ForwardType x6
) {
1090 StorageType
* storage
= static_cast<StorageType
*>(base
);
1092 // Local references to make debugger stepping easier. If in a debugger,
1093 // you really want to warp ahead and step through the
1094 // InvokeHelper<>::MakeItSo() call below.
1096 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1097 typename
StorageType::RunnableType
,
1098 void(typename CallbackParamTraits
<X1
>::ForwardType x1
,
1099 typename CallbackParamTraits
<X2
>::ForwardType x2
,
1100 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1101 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1102 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1103 typename CallbackParamTraits
<X6
>::ForwardType x6
)>
1104 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1105 CallbackForward(x2
), CallbackForward(x3
),
1106 CallbackForward(x4
), CallbackForward(x5
),
1107 CallbackForward(x6
));
1112 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1113 typename X3
, typename X4
, typename X5
, typename X6
>
1114 struct Invoker
<1, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
)> {
1115 typedef R(RunType
)(BindStateBase
*,
1116 typename CallbackParamTraits
<X2
>::ForwardType
,
1117 typename CallbackParamTraits
<X3
>::ForwardType
,
1118 typename CallbackParamTraits
<X4
>::ForwardType
,
1119 typename CallbackParamTraits
<X5
>::ForwardType
,
1120 typename CallbackParamTraits
<X6
>::ForwardType
);
1122 typedef R(UnboundRunType
)(X2
, X3
, X4
, X5
, X6
);
1124 static R
Run(BindStateBase
* base
,
1125 typename CallbackParamTraits
<X2
>::ForwardType x2
,
1126 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1127 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1128 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1129 typename CallbackParamTraits
<X6
>::ForwardType x6
) {
1130 StorageType
* storage
= static_cast<StorageType
*>(base
);
1132 // Local references to make debugger stepping easier. If in a debugger,
1133 // you really want to warp ahead and step through the
1134 // InvokeHelper<>::MakeItSo() call below.
1135 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1137 typename
Bound1UnwrapTraits::ForwardType x1
=
1138 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1139 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1140 typename
StorageType::RunnableType
,
1141 void(typename
Bound1UnwrapTraits::ForwardType
,
1142 typename CallbackParamTraits
<X2
>::ForwardType x2
,
1143 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1144 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1145 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1146 typename CallbackParamTraits
<X6
>::ForwardType x6
)>
1147 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1148 CallbackForward(x2
), CallbackForward(x3
),
1149 CallbackForward(x4
), CallbackForward(x5
),
1150 CallbackForward(x6
));
1155 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1156 typename X3
, typename X4
, typename X5
, typename X6
>
1157 struct Invoker
<2, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
)> {
1158 typedef R(RunType
)(BindStateBase
*,
1159 typename CallbackParamTraits
<X3
>::ForwardType
,
1160 typename CallbackParamTraits
<X4
>::ForwardType
,
1161 typename CallbackParamTraits
<X5
>::ForwardType
,
1162 typename CallbackParamTraits
<X6
>::ForwardType
);
1164 typedef R(UnboundRunType
)(X3
, X4
, X5
, X6
);
1166 static R
Run(BindStateBase
* base
,
1167 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1168 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1169 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1170 typename CallbackParamTraits
<X6
>::ForwardType x6
) {
1171 StorageType
* storage
= static_cast<StorageType
*>(base
);
1173 // Local references to make debugger stepping easier. If in a debugger,
1174 // you really want to warp ahead and step through the
1175 // InvokeHelper<>::MakeItSo() call below.
1176 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1177 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1179 typename
Bound1UnwrapTraits::ForwardType x1
=
1180 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1181 typename
Bound2UnwrapTraits::ForwardType x2
=
1182 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1183 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1184 typename
StorageType::RunnableType
,
1185 void(typename
Bound1UnwrapTraits::ForwardType
,
1186 typename
Bound2UnwrapTraits::ForwardType
,
1187 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1188 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1189 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1190 typename CallbackParamTraits
<X6
>::ForwardType x6
)>
1191 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1192 CallbackForward(x2
), CallbackForward(x3
),
1193 CallbackForward(x4
), CallbackForward(x5
),
1194 CallbackForward(x6
));
1199 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1200 typename X3
, typename X4
, typename X5
, typename X6
>
1201 struct Invoker
<3, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
)> {
1202 typedef R(RunType
)(BindStateBase
*,
1203 typename CallbackParamTraits
<X4
>::ForwardType
,
1204 typename CallbackParamTraits
<X5
>::ForwardType
,
1205 typename CallbackParamTraits
<X6
>::ForwardType
);
1207 typedef R(UnboundRunType
)(X4
, X5
, X6
);
1209 static R
Run(BindStateBase
* base
,
1210 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1211 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1212 typename CallbackParamTraits
<X6
>::ForwardType x6
) {
1213 StorageType
* storage
= static_cast<StorageType
*>(base
);
1215 // Local references to make debugger stepping easier. If in a debugger,
1216 // you really want to warp ahead and step through the
1217 // InvokeHelper<>::MakeItSo() call below.
1218 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1219 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1220 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1222 typename
Bound1UnwrapTraits::ForwardType x1
=
1223 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1224 typename
Bound2UnwrapTraits::ForwardType x2
=
1225 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1226 typename
Bound3UnwrapTraits::ForwardType x3
=
1227 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1228 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1229 typename
StorageType::RunnableType
,
1230 void(typename
Bound1UnwrapTraits::ForwardType
,
1231 typename
Bound2UnwrapTraits::ForwardType
,
1232 typename
Bound3UnwrapTraits::ForwardType
,
1233 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1234 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1235 typename CallbackParamTraits
<X6
>::ForwardType x6
)>
1236 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1237 CallbackForward(x2
), CallbackForward(x3
),
1238 CallbackForward(x4
), CallbackForward(x5
),
1239 CallbackForward(x6
));
1244 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1245 typename X3
, typename X4
, typename X5
, typename X6
>
1246 struct Invoker
<4, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
)> {
1247 typedef R(RunType
)(BindStateBase
*,
1248 typename CallbackParamTraits
<X5
>::ForwardType
,
1249 typename CallbackParamTraits
<X6
>::ForwardType
);
1251 typedef R(UnboundRunType
)(X5
, X6
);
1253 static R
Run(BindStateBase
* base
,
1254 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1255 typename CallbackParamTraits
<X6
>::ForwardType x6
) {
1256 StorageType
* storage
= static_cast<StorageType
*>(base
);
1258 // Local references to make debugger stepping easier. If in a debugger,
1259 // you really want to warp ahead and step through the
1260 // InvokeHelper<>::MakeItSo() call below.
1261 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1262 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1263 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1264 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
1266 typename
Bound1UnwrapTraits::ForwardType x1
=
1267 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1268 typename
Bound2UnwrapTraits::ForwardType x2
=
1269 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1270 typename
Bound3UnwrapTraits::ForwardType x3
=
1271 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1272 typename
Bound4UnwrapTraits::ForwardType x4
=
1273 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
1274 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1275 typename
StorageType::RunnableType
,
1276 void(typename
Bound1UnwrapTraits::ForwardType
,
1277 typename
Bound2UnwrapTraits::ForwardType
,
1278 typename
Bound3UnwrapTraits::ForwardType
,
1279 typename
Bound4UnwrapTraits::ForwardType
,
1280 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1281 typename CallbackParamTraits
<X6
>::ForwardType x6
)>
1282 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1283 CallbackForward(x2
), CallbackForward(x3
),
1284 CallbackForward(x4
), CallbackForward(x5
),
1285 CallbackForward(x6
));
1290 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1291 typename X3
, typename X4
, typename X5
, typename X6
>
1292 struct Invoker
<5, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
)> {
1293 typedef R(RunType
)(BindStateBase
*,
1294 typename CallbackParamTraits
<X6
>::ForwardType
);
1296 typedef R(UnboundRunType
)(X6
);
1298 static R
Run(BindStateBase
* base
,
1299 typename CallbackParamTraits
<X6
>::ForwardType x6
) {
1300 StorageType
* storage
= static_cast<StorageType
*>(base
);
1302 // Local references to make debugger stepping easier. If in a debugger,
1303 // you really want to warp ahead and step through the
1304 // InvokeHelper<>::MakeItSo() call below.
1305 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1306 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1307 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1308 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
1309 typedef typename
StorageType::Bound5UnwrapTraits Bound5UnwrapTraits
;
1311 typename
Bound1UnwrapTraits::ForwardType x1
=
1312 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1313 typename
Bound2UnwrapTraits::ForwardType x2
=
1314 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1315 typename
Bound3UnwrapTraits::ForwardType x3
=
1316 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1317 typename
Bound4UnwrapTraits::ForwardType x4
=
1318 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
1319 typename
Bound5UnwrapTraits::ForwardType x5
=
1320 Bound5UnwrapTraits::Unwrap(storage
->p5_
);
1321 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1322 typename
StorageType::RunnableType
,
1323 void(typename
Bound1UnwrapTraits::ForwardType
,
1324 typename
Bound2UnwrapTraits::ForwardType
,
1325 typename
Bound3UnwrapTraits::ForwardType
,
1326 typename
Bound4UnwrapTraits::ForwardType
,
1327 typename
Bound5UnwrapTraits::ForwardType
,
1328 typename CallbackParamTraits
<X6
>::ForwardType x6
)>
1329 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1330 CallbackForward(x2
), CallbackForward(x3
),
1331 CallbackForward(x4
), CallbackForward(x5
),
1332 CallbackForward(x6
));
1337 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1338 typename X3
, typename X4
, typename X5
, typename X6
>
1339 struct Invoker
<6, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
)> {
1340 typedef R(RunType
)(BindStateBase
*);
1342 typedef R(UnboundRunType
)();
1344 static R
Run(BindStateBase
* base
) {
1345 StorageType
* storage
= static_cast<StorageType
*>(base
);
1347 // Local references to make debugger stepping easier. If in a debugger,
1348 // you really want to warp ahead and step through the
1349 // InvokeHelper<>::MakeItSo() call below.
1350 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1351 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1352 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1353 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
1354 typedef typename
StorageType::Bound5UnwrapTraits Bound5UnwrapTraits
;
1355 typedef typename
StorageType::Bound6UnwrapTraits Bound6UnwrapTraits
;
1357 typename
Bound1UnwrapTraits::ForwardType x1
=
1358 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1359 typename
Bound2UnwrapTraits::ForwardType x2
=
1360 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1361 typename
Bound3UnwrapTraits::ForwardType x3
=
1362 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1363 typename
Bound4UnwrapTraits::ForwardType x4
=
1364 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
1365 typename
Bound5UnwrapTraits::ForwardType x5
=
1366 Bound5UnwrapTraits::Unwrap(storage
->p5_
);
1367 typename
Bound6UnwrapTraits::ForwardType x6
=
1368 Bound6UnwrapTraits::Unwrap(storage
->p6_
);
1369 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1370 typename
StorageType::RunnableType
,
1371 void(typename
Bound1UnwrapTraits::ForwardType
,
1372 typename
Bound2UnwrapTraits::ForwardType
,
1373 typename
Bound3UnwrapTraits::ForwardType
,
1374 typename
Bound4UnwrapTraits::ForwardType
,
1375 typename
Bound5UnwrapTraits::ForwardType
,
1376 typename
Bound6UnwrapTraits::ForwardType
)>
1377 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1378 CallbackForward(x2
), CallbackForward(x3
),
1379 CallbackForward(x4
), CallbackForward(x5
),
1380 CallbackForward(x6
));
1385 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1386 typename X3
, typename X4
, typename X5
, typename X6
, typename X7
>
1387 struct Invoker
<0, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
, X7
)> {
1388 typedef R(RunType
)(BindStateBase
*,
1389 typename CallbackParamTraits
<X1
>::ForwardType
,
1390 typename CallbackParamTraits
<X2
>::ForwardType
,
1391 typename CallbackParamTraits
<X3
>::ForwardType
,
1392 typename CallbackParamTraits
<X4
>::ForwardType
,
1393 typename CallbackParamTraits
<X5
>::ForwardType
,
1394 typename CallbackParamTraits
<X6
>::ForwardType
,
1395 typename CallbackParamTraits
<X7
>::ForwardType
);
1397 typedef R(UnboundRunType
)(X1
, X2
, X3
, X4
, X5
, X6
, X7
);
1399 static R
Run(BindStateBase
* base
,
1400 typename CallbackParamTraits
<X1
>::ForwardType x1
,
1401 typename CallbackParamTraits
<X2
>::ForwardType x2
,
1402 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1403 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1404 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1405 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1406 typename CallbackParamTraits
<X7
>::ForwardType x7
) {
1407 StorageType
* storage
= static_cast<StorageType
*>(base
);
1409 // Local references to make debugger stepping easier. If in a debugger,
1410 // you really want to warp ahead and step through the
1411 // InvokeHelper<>::MakeItSo() call below.
1413 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1414 typename
StorageType::RunnableType
,
1415 void(typename CallbackParamTraits
<X1
>::ForwardType x1
,
1416 typename CallbackParamTraits
<X2
>::ForwardType x2
,
1417 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1418 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1419 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1420 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1421 typename CallbackParamTraits
<X7
>::ForwardType x7
)>
1422 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1423 CallbackForward(x2
), CallbackForward(x3
),
1424 CallbackForward(x4
), CallbackForward(x5
),
1425 CallbackForward(x6
), CallbackForward(x7
));
1430 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1431 typename X3
, typename X4
, typename X5
, typename X6
, typename X7
>
1432 struct Invoker
<1, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
, X7
)> {
1433 typedef R(RunType
)(BindStateBase
*,
1434 typename CallbackParamTraits
<X2
>::ForwardType
,
1435 typename CallbackParamTraits
<X3
>::ForwardType
,
1436 typename CallbackParamTraits
<X4
>::ForwardType
,
1437 typename CallbackParamTraits
<X5
>::ForwardType
,
1438 typename CallbackParamTraits
<X6
>::ForwardType
,
1439 typename CallbackParamTraits
<X7
>::ForwardType
);
1441 typedef R(UnboundRunType
)(X2
, X3
, X4
, X5
, X6
, X7
);
1443 static R
Run(BindStateBase
* base
,
1444 typename CallbackParamTraits
<X2
>::ForwardType x2
,
1445 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1446 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1447 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1448 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1449 typename CallbackParamTraits
<X7
>::ForwardType x7
) {
1450 StorageType
* storage
= static_cast<StorageType
*>(base
);
1452 // Local references to make debugger stepping easier. If in a debugger,
1453 // you really want to warp ahead and step through the
1454 // InvokeHelper<>::MakeItSo() call below.
1455 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1457 typename
Bound1UnwrapTraits::ForwardType x1
=
1458 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1459 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1460 typename
StorageType::RunnableType
,
1461 void(typename
Bound1UnwrapTraits::ForwardType
,
1462 typename CallbackParamTraits
<X2
>::ForwardType x2
,
1463 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1464 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1465 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1466 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1467 typename CallbackParamTraits
<X7
>::ForwardType x7
)>
1468 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1469 CallbackForward(x2
), CallbackForward(x3
),
1470 CallbackForward(x4
), CallbackForward(x5
),
1471 CallbackForward(x6
), CallbackForward(x7
));
1476 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1477 typename X3
, typename X4
, typename X5
, typename X6
, typename X7
>
1478 struct Invoker
<2, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
, X7
)> {
1479 typedef R(RunType
)(BindStateBase
*,
1480 typename CallbackParamTraits
<X3
>::ForwardType
,
1481 typename CallbackParamTraits
<X4
>::ForwardType
,
1482 typename CallbackParamTraits
<X5
>::ForwardType
,
1483 typename CallbackParamTraits
<X6
>::ForwardType
,
1484 typename CallbackParamTraits
<X7
>::ForwardType
);
1486 typedef R(UnboundRunType
)(X3
, X4
, X5
, X6
, X7
);
1488 static R
Run(BindStateBase
* base
,
1489 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1490 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1491 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1492 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1493 typename CallbackParamTraits
<X7
>::ForwardType x7
) {
1494 StorageType
* storage
= static_cast<StorageType
*>(base
);
1496 // Local references to make debugger stepping easier. If in a debugger,
1497 // you really want to warp ahead and step through the
1498 // InvokeHelper<>::MakeItSo() call below.
1499 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1500 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1502 typename
Bound1UnwrapTraits::ForwardType x1
=
1503 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1504 typename
Bound2UnwrapTraits::ForwardType x2
=
1505 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1506 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1507 typename
StorageType::RunnableType
,
1508 void(typename
Bound1UnwrapTraits::ForwardType
,
1509 typename
Bound2UnwrapTraits::ForwardType
,
1510 typename CallbackParamTraits
<X3
>::ForwardType x3
,
1511 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1512 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1513 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1514 typename CallbackParamTraits
<X7
>::ForwardType x7
)>
1515 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1516 CallbackForward(x2
), CallbackForward(x3
),
1517 CallbackForward(x4
), CallbackForward(x5
),
1518 CallbackForward(x6
), CallbackForward(x7
));
1523 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1524 typename X3
, typename X4
, typename X5
, typename X6
, typename X7
>
1525 struct Invoker
<3, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
, X7
)> {
1526 typedef R(RunType
)(BindStateBase
*,
1527 typename CallbackParamTraits
<X4
>::ForwardType
,
1528 typename CallbackParamTraits
<X5
>::ForwardType
,
1529 typename CallbackParamTraits
<X6
>::ForwardType
,
1530 typename CallbackParamTraits
<X7
>::ForwardType
);
1532 typedef R(UnboundRunType
)(X4
, X5
, X6
, X7
);
1534 static R
Run(BindStateBase
* base
,
1535 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1536 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1537 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1538 typename CallbackParamTraits
<X7
>::ForwardType x7
) {
1539 StorageType
* storage
= static_cast<StorageType
*>(base
);
1541 // Local references to make debugger stepping easier. If in a debugger,
1542 // you really want to warp ahead and step through the
1543 // InvokeHelper<>::MakeItSo() call below.
1544 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1545 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1546 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1548 typename
Bound1UnwrapTraits::ForwardType x1
=
1549 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1550 typename
Bound2UnwrapTraits::ForwardType x2
=
1551 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1552 typename
Bound3UnwrapTraits::ForwardType x3
=
1553 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1554 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1555 typename
StorageType::RunnableType
,
1556 void(typename
Bound1UnwrapTraits::ForwardType
,
1557 typename
Bound2UnwrapTraits::ForwardType
,
1558 typename
Bound3UnwrapTraits::ForwardType
,
1559 typename CallbackParamTraits
<X4
>::ForwardType x4
,
1560 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1561 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1562 typename CallbackParamTraits
<X7
>::ForwardType x7
)>
1563 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1564 CallbackForward(x2
), CallbackForward(x3
),
1565 CallbackForward(x4
), CallbackForward(x5
),
1566 CallbackForward(x6
), CallbackForward(x7
));
1571 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1572 typename X3
, typename X4
, typename X5
, typename X6
, typename X7
>
1573 struct Invoker
<4, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
, X7
)> {
1574 typedef R(RunType
)(BindStateBase
*,
1575 typename CallbackParamTraits
<X5
>::ForwardType
,
1576 typename CallbackParamTraits
<X6
>::ForwardType
,
1577 typename CallbackParamTraits
<X7
>::ForwardType
);
1579 typedef R(UnboundRunType
)(X5
, X6
, X7
);
1581 static R
Run(BindStateBase
* base
,
1582 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1583 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1584 typename CallbackParamTraits
<X7
>::ForwardType x7
) {
1585 StorageType
* storage
= static_cast<StorageType
*>(base
);
1587 // Local references to make debugger stepping easier. If in a debugger,
1588 // you really want to warp ahead and step through the
1589 // InvokeHelper<>::MakeItSo() call below.
1590 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1591 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1592 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1593 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
1595 typename
Bound1UnwrapTraits::ForwardType x1
=
1596 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1597 typename
Bound2UnwrapTraits::ForwardType x2
=
1598 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1599 typename
Bound3UnwrapTraits::ForwardType x3
=
1600 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1601 typename
Bound4UnwrapTraits::ForwardType x4
=
1602 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
1603 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1604 typename
StorageType::RunnableType
,
1605 void(typename
Bound1UnwrapTraits::ForwardType
,
1606 typename
Bound2UnwrapTraits::ForwardType
,
1607 typename
Bound3UnwrapTraits::ForwardType
,
1608 typename
Bound4UnwrapTraits::ForwardType
,
1609 typename CallbackParamTraits
<X5
>::ForwardType x5
,
1610 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1611 typename CallbackParamTraits
<X7
>::ForwardType x7
)>
1612 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1613 CallbackForward(x2
), CallbackForward(x3
),
1614 CallbackForward(x4
), CallbackForward(x5
),
1615 CallbackForward(x6
), CallbackForward(x7
));
1620 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1621 typename X3
, typename X4
, typename X5
, typename X6
, typename X7
>
1622 struct Invoker
<5, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
, X7
)> {
1623 typedef R(RunType
)(BindStateBase
*,
1624 typename CallbackParamTraits
<X6
>::ForwardType
,
1625 typename CallbackParamTraits
<X7
>::ForwardType
);
1627 typedef R(UnboundRunType
)(X6
, X7
);
1629 static R
Run(BindStateBase
* base
,
1630 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1631 typename CallbackParamTraits
<X7
>::ForwardType x7
) {
1632 StorageType
* storage
= static_cast<StorageType
*>(base
);
1634 // Local references to make debugger stepping easier. If in a debugger,
1635 // you really want to warp ahead and step through the
1636 // InvokeHelper<>::MakeItSo() call below.
1637 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1638 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1639 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1640 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
1641 typedef typename
StorageType::Bound5UnwrapTraits Bound5UnwrapTraits
;
1643 typename
Bound1UnwrapTraits::ForwardType x1
=
1644 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1645 typename
Bound2UnwrapTraits::ForwardType x2
=
1646 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1647 typename
Bound3UnwrapTraits::ForwardType x3
=
1648 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1649 typename
Bound4UnwrapTraits::ForwardType x4
=
1650 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
1651 typename
Bound5UnwrapTraits::ForwardType x5
=
1652 Bound5UnwrapTraits::Unwrap(storage
->p5_
);
1653 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1654 typename
StorageType::RunnableType
,
1655 void(typename
Bound1UnwrapTraits::ForwardType
,
1656 typename
Bound2UnwrapTraits::ForwardType
,
1657 typename
Bound3UnwrapTraits::ForwardType
,
1658 typename
Bound4UnwrapTraits::ForwardType
,
1659 typename
Bound5UnwrapTraits::ForwardType
,
1660 typename CallbackParamTraits
<X6
>::ForwardType x6
,
1661 typename CallbackParamTraits
<X7
>::ForwardType x7
)>
1662 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1663 CallbackForward(x2
), CallbackForward(x3
),
1664 CallbackForward(x4
), CallbackForward(x5
),
1665 CallbackForward(x6
), CallbackForward(x7
));
1670 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1671 typename X3
, typename X4
, typename X5
, typename X6
, typename X7
>
1672 struct Invoker
<6, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
, X7
)> {
1673 typedef R(RunType
)(BindStateBase
*,
1674 typename CallbackParamTraits
<X7
>::ForwardType
);
1676 typedef R(UnboundRunType
)(X7
);
1678 static R
Run(BindStateBase
* base
,
1679 typename CallbackParamTraits
<X7
>::ForwardType x7
) {
1680 StorageType
* storage
= static_cast<StorageType
*>(base
);
1682 // Local references to make debugger stepping easier. If in a debugger,
1683 // you really want to warp ahead and step through the
1684 // InvokeHelper<>::MakeItSo() call below.
1685 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1686 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1687 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1688 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
1689 typedef typename
StorageType::Bound5UnwrapTraits Bound5UnwrapTraits
;
1690 typedef typename
StorageType::Bound6UnwrapTraits Bound6UnwrapTraits
;
1692 typename
Bound1UnwrapTraits::ForwardType x1
=
1693 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1694 typename
Bound2UnwrapTraits::ForwardType x2
=
1695 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1696 typename
Bound3UnwrapTraits::ForwardType x3
=
1697 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1698 typename
Bound4UnwrapTraits::ForwardType x4
=
1699 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
1700 typename
Bound5UnwrapTraits::ForwardType x5
=
1701 Bound5UnwrapTraits::Unwrap(storage
->p5_
);
1702 typename
Bound6UnwrapTraits::ForwardType x6
=
1703 Bound6UnwrapTraits::Unwrap(storage
->p6_
);
1704 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1705 typename
StorageType::RunnableType
,
1706 void(typename
Bound1UnwrapTraits::ForwardType
,
1707 typename
Bound2UnwrapTraits::ForwardType
,
1708 typename
Bound3UnwrapTraits::ForwardType
,
1709 typename
Bound4UnwrapTraits::ForwardType
,
1710 typename
Bound5UnwrapTraits::ForwardType
,
1711 typename
Bound6UnwrapTraits::ForwardType
,
1712 typename CallbackParamTraits
<X7
>::ForwardType x7
)>
1713 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1714 CallbackForward(x2
), CallbackForward(x3
),
1715 CallbackForward(x4
), CallbackForward(x5
),
1716 CallbackForward(x6
), CallbackForward(x7
));
1721 template <typename StorageType
, typename R
,typename X1
, typename X2
,
1722 typename X3
, typename X4
, typename X5
, typename X6
, typename X7
>
1723 struct Invoker
<7, StorageType
, R(X1
, X2
, X3
, X4
, X5
, X6
, X7
)> {
1724 typedef R(RunType
)(BindStateBase
*);
1726 typedef R(UnboundRunType
)();
1728 static R
Run(BindStateBase
* base
) {
1729 StorageType
* storage
= static_cast<StorageType
*>(base
);
1731 // Local references to make debugger stepping easier. If in a debugger,
1732 // you really want to warp ahead and step through the
1733 // InvokeHelper<>::MakeItSo() call below.
1734 typedef typename
StorageType::Bound1UnwrapTraits Bound1UnwrapTraits
;
1735 typedef typename
StorageType::Bound2UnwrapTraits Bound2UnwrapTraits
;
1736 typedef typename
StorageType::Bound3UnwrapTraits Bound3UnwrapTraits
;
1737 typedef typename
StorageType::Bound4UnwrapTraits Bound4UnwrapTraits
;
1738 typedef typename
StorageType::Bound5UnwrapTraits Bound5UnwrapTraits
;
1739 typedef typename
StorageType::Bound6UnwrapTraits Bound6UnwrapTraits
;
1740 typedef typename
StorageType::Bound7UnwrapTraits Bound7UnwrapTraits
;
1742 typename
Bound1UnwrapTraits::ForwardType x1
=
1743 Bound1UnwrapTraits::Unwrap(storage
->p1_
);
1744 typename
Bound2UnwrapTraits::ForwardType x2
=
1745 Bound2UnwrapTraits::Unwrap(storage
->p2_
);
1746 typename
Bound3UnwrapTraits::ForwardType x3
=
1747 Bound3UnwrapTraits::Unwrap(storage
->p3_
);
1748 typename
Bound4UnwrapTraits::ForwardType x4
=
1749 Bound4UnwrapTraits::Unwrap(storage
->p4_
);
1750 typename
Bound5UnwrapTraits::ForwardType x5
=
1751 Bound5UnwrapTraits::Unwrap(storage
->p5_
);
1752 typename
Bound6UnwrapTraits::ForwardType x6
=
1753 Bound6UnwrapTraits::Unwrap(storage
->p6_
);
1754 typename
Bound7UnwrapTraits::ForwardType x7
=
1755 Bound7UnwrapTraits::Unwrap(storage
->p7_
);
1756 return InvokeHelper
<StorageType::IsWeakCall::value
, R
,
1757 typename
StorageType::RunnableType
,
1758 void(typename
Bound1UnwrapTraits::ForwardType
,
1759 typename
Bound2UnwrapTraits::ForwardType
,
1760 typename
Bound3UnwrapTraits::ForwardType
,
1761 typename
Bound4UnwrapTraits::ForwardType
,
1762 typename
Bound5UnwrapTraits::ForwardType
,
1763 typename
Bound6UnwrapTraits::ForwardType
,
1764 typename
Bound7UnwrapTraits::ForwardType
)>
1765 ::MakeItSo(storage
->runnable_
, CallbackForward(x1
),
1766 CallbackForward(x2
), CallbackForward(x3
),
1767 CallbackForward(x4
), CallbackForward(x5
),
1768 CallbackForward(x6
), CallbackForward(x7
));
1775 // This stores all the state passed into Bind() and is also where most
1776 // of the template resolution magic occurs.
1778 // Runnable is the functor we are binding arguments to.
1779 // RunType is type of the Run() function that the Invoker<> should use.
1780 // Normally, this is the same as the RunType of the Runnable, but it can
1781 // be different if an adapter like IgnoreResult() has been used.
1783 // BoundArgsType contains the storage type for all the bound arguments by
1784 // (ab)using a function type.
1785 template <typename Runnable
, typename RunType
, typename BoundArgsType
>
1788 template <typename Runnable
, typename RunType
>
1789 struct BindState
<Runnable
, RunType
, void()> : public BindStateBase
{
1790 typedef Runnable RunnableType
;
1791 typedef false_type IsWeakCall
;
1792 typedef Invoker
<0, BindState
, RunType
> InvokerType
;
1793 typedef typename
InvokerType::UnboundRunType UnboundRunType
;
1794 explicit BindState(const Runnable
& runnable
)
1795 : runnable_(runnable
) {
1798 virtual ~BindState() { }
1800 RunnableType runnable_
;
1803 template <typename Runnable
, typename RunType
, typename P1
>
1804 struct BindState
<Runnable
, RunType
, void(P1
)> : public BindStateBase
{
1805 typedef Runnable RunnableType
;
1806 typedef IsWeakMethod
<HasIsMethodTag
<Runnable
>::value
, P1
> IsWeakCall
;
1807 typedef Invoker
<1, BindState
, RunType
> InvokerType
;
1808 typedef typename
InvokerType::UnboundRunType UnboundRunType
;
1810 // Convenience typedefs for bound argument types.
1811 typedef UnwrapTraits
<P1
> Bound1UnwrapTraits
;
1813 BindState(const Runnable
& runnable
, const P1
& p1
)
1814 : runnable_(runnable
),
1816 MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
, P1
>::AddRef(p1_
);
1819 virtual ~BindState() { MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
,
1820 P1
>::Release(p1_
); }
1822 RunnableType runnable_
;
1826 template <typename Runnable
, typename RunType
, typename P1
, typename P2
>
1827 struct BindState
<Runnable
, RunType
, void(P1
, P2
)> : public BindStateBase
{
1828 typedef Runnable RunnableType
;
1829 typedef IsWeakMethod
<HasIsMethodTag
<Runnable
>::value
, P1
> IsWeakCall
;
1830 typedef Invoker
<2, BindState
, RunType
> InvokerType
;
1831 typedef typename
InvokerType::UnboundRunType UnboundRunType
;
1833 // Convenience typedefs for bound argument types.
1834 typedef UnwrapTraits
<P1
> Bound1UnwrapTraits
;
1835 typedef UnwrapTraits
<P2
> Bound2UnwrapTraits
;
1837 BindState(const Runnable
& runnable
, const P1
& p1
, const P2
& p2
)
1838 : runnable_(runnable
),
1841 MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
, P1
>::AddRef(p1_
);
1844 virtual ~BindState() { MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
,
1845 P1
>::Release(p1_
); }
1847 RunnableType runnable_
;
1852 template <typename Runnable
, typename RunType
, typename P1
, typename P2
,
1854 struct BindState
<Runnable
, RunType
, void(P1
, P2
, P3
)> : public BindStateBase
{
1855 typedef Runnable RunnableType
;
1856 typedef IsWeakMethod
<HasIsMethodTag
<Runnable
>::value
, P1
> IsWeakCall
;
1857 typedef Invoker
<3, BindState
, RunType
> InvokerType
;
1858 typedef typename
InvokerType::UnboundRunType UnboundRunType
;
1860 // Convenience typedefs for bound argument types.
1861 typedef UnwrapTraits
<P1
> Bound1UnwrapTraits
;
1862 typedef UnwrapTraits
<P2
> Bound2UnwrapTraits
;
1863 typedef UnwrapTraits
<P3
> Bound3UnwrapTraits
;
1865 BindState(const Runnable
& runnable
, const P1
& p1
, const P2
& p2
, const P3
& p3
)
1866 : runnable_(runnable
),
1870 MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
, P1
>::AddRef(p1_
);
1873 virtual ~BindState() { MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
,
1874 P1
>::Release(p1_
); }
1876 RunnableType runnable_
;
1882 template <typename Runnable
, typename RunType
, typename P1
, typename P2
,
1883 typename P3
, typename P4
>
1884 struct BindState
<Runnable
, RunType
, void(P1
, P2
, P3
,
1885 P4
)> : public BindStateBase
{
1886 typedef Runnable RunnableType
;
1887 typedef IsWeakMethod
<HasIsMethodTag
<Runnable
>::value
, P1
> IsWeakCall
;
1888 typedef Invoker
<4, BindState
, RunType
> InvokerType
;
1889 typedef typename
InvokerType::UnboundRunType UnboundRunType
;
1891 // Convenience typedefs for bound argument types.
1892 typedef UnwrapTraits
<P1
> Bound1UnwrapTraits
;
1893 typedef UnwrapTraits
<P2
> Bound2UnwrapTraits
;
1894 typedef UnwrapTraits
<P3
> Bound3UnwrapTraits
;
1895 typedef UnwrapTraits
<P4
> Bound4UnwrapTraits
;
1897 BindState(const Runnable
& runnable
, const P1
& p1
, const P2
& p2
, const P3
& p3
,
1899 : runnable_(runnable
),
1904 MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
, P1
>::AddRef(p1_
);
1907 virtual ~BindState() { MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
,
1908 P1
>::Release(p1_
); }
1910 RunnableType runnable_
;
1917 template <typename Runnable
, typename RunType
, typename P1
, typename P2
,
1918 typename P3
, typename P4
, typename P5
>
1919 struct BindState
<Runnable
, RunType
, void(P1
, P2
, P3
, P4
,
1920 P5
)> : public BindStateBase
{
1921 typedef Runnable RunnableType
;
1922 typedef IsWeakMethod
<HasIsMethodTag
<Runnable
>::value
, P1
> IsWeakCall
;
1923 typedef Invoker
<5, BindState
, RunType
> InvokerType
;
1924 typedef typename
InvokerType::UnboundRunType UnboundRunType
;
1926 // Convenience typedefs for bound argument types.
1927 typedef UnwrapTraits
<P1
> Bound1UnwrapTraits
;
1928 typedef UnwrapTraits
<P2
> Bound2UnwrapTraits
;
1929 typedef UnwrapTraits
<P3
> Bound3UnwrapTraits
;
1930 typedef UnwrapTraits
<P4
> Bound4UnwrapTraits
;
1931 typedef UnwrapTraits
<P5
> Bound5UnwrapTraits
;
1933 BindState(const Runnable
& runnable
, const P1
& p1
, const P2
& p2
, const P3
& p3
,
1934 const P4
& p4
, const P5
& p5
)
1935 : runnable_(runnable
),
1941 MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
, P1
>::AddRef(p1_
);
1944 virtual ~BindState() { MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
,
1945 P1
>::Release(p1_
); }
1947 RunnableType runnable_
;
1955 template <typename Runnable
, typename RunType
, typename P1
, typename P2
,
1956 typename P3
, typename P4
, typename P5
, typename P6
>
1957 struct BindState
<Runnable
, RunType
, void(P1
, P2
, P3
, P4
, P5
,
1958 P6
)> : public BindStateBase
{
1959 typedef Runnable RunnableType
;
1960 typedef IsWeakMethod
<HasIsMethodTag
<Runnable
>::value
, P1
> IsWeakCall
;
1961 typedef Invoker
<6, BindState
, RunType
> InvokerType
;
1962 typedef typename
InvokerType::UnboundRunType UnboundRunType
;
1964 // Convenience typedefs for bound argument types.
1965 typedef UnwrapTraits
<P1
> Bound1UnwrapTraits
;
1966 typedef UnwrapTraits
<P2
> Bound2UnwrapTraits
;
1967 typedef UnwrapTraits
<P3
> Bound3UnwrapTraits
;
1968 typedef UnwrapTraits
<P4
> Bound4UnwrapTraits
;
1969 typedef UnwrapTraits
<P5
> Bound5UnwrapTraits
;
1970 typedef UnwrapTraits
<P6
> Bound6UnwrapTraits
;
1972 BindState(const Runnable
& runnable
, const P1
& p1
, const P2
& p2
, const P3
& p3
,
1973 const P4
& p4
, const P5
& p5
, const P6
& p6
)
1974 : runnable_(runnable
),
1981 MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
, P1
>::AddRef(p1_
);
1984 virtual ~BindState() { MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
,
1985 P1
>::Release(p1_
); }
1987 RunnableType runnable_
;
1996 template <typename Runnable
, typename RunType
, typename P1
, typename P2
,
1997 typename P3
, typename P4
, typename P5
, typename P6
, typename P7
>
1998 struct BindState
<Runnable
, RunType
, void(P1
, P2
, P3
, P4
, P5
, P6
,
1999 P7
)> : public BindStateBase
{
2000 typedef Runnable RunnableType
;
2001 typedef IsWeakMethod
<HasIsMethodTag
<Runnable
>::value
, P1
> IsWeakCall
;
2002 typedef Invoker
<7, BindState
, RunType
> InvokerType
;
2003 typedef typename
InvokerType::UnboundRunType UnboundRunType
;
2005 // Convenience typedefs for bound argument types.
2006 typedef UnwrapTraits
<P1
> Bound1UnwrapTraits
;
2007 typedef UnwrapTraits
<P2
> Bound2UnwrapTraits
;
2008 typedef UnwrapTraits
<P3
> Bound3UnwrapTraits
;
2009 typedef UnwrapTraits
<P4
> Bound4UnwrapTraits
;
2010 typedef UnwrapTraits
<P5
> Bound5UnwrapTraits
;
2011 typedef UnwrapTraits
<P6
> Bound6UnwrapTraits
;
2012 typedef UnwrapTraits
<P7
> Bound7UnwrapTraits
;
2014 BindState(const Runnable
& runnable
, const P1
& p1
, const P2
& p2
, const P3
& p3
,
2015 const P4
& p4
, const P5
& p5
, const P6
& p6
, const P7
& p7
)
2016 : runnable_(runnable
),
2024 MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
, P1
>::AddRef(p1_
);
2027 virtual ~BindState() { MaybeRefcount
<HasIsMethodTag
<Runnable
>::value
,
2028 P1
>::Release(p1_
); }
2030 RunnableType runnable_
;
2040 } // namespace internal
2043 #endif // BASE_BIND_INTERNAL_H_