Index: base/tuple.h |
diff --git a/base/tuple.h b/base/tuple.h |
index 04809d9bdb096112966a6e7e8fba0145367d2197..12f7f84ea50b79e4a0f92c1cb47ae0e2319a1d4a 100644 |
--- a/base/tuple.h |
+++ b/base/tuple.h |
@@ -29,6 +29,8 @@ |
#ifndef BASE_TUPLE_H__ |
#define BASE_TUPLE_H__ |
+#include "base/bind_helpers.h" |
+ |
// Traits ---------------------------------------------------------------------- |
// |
// A simple traits class for tuple arguments. |
@@ -538,58 +540,86 @@ inline void DispatchToMethod(ObjT* obj, Method method, const Tuple0& arg) { |
template <class ObjT, class Method, class A> |
inline void DispatchToMethod(ObjT* obj, Method method, const A& arg) { |
- (obj->*method)(arg); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg)); |
} |
template <class ObjT, class Method, class A> |
inline void DispatchToMethod(ObjT* obj, Method method, const Tuple1<A>& arg) { |
- (obj->*method)(arg.a); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a)); |
} |
template<class ObjT, class Method, class A, class B> |
inline void DispatchToMethod(ObjT* obj, |
Method method, |
const Tuple2<A, B>& arg) { |
- (obj->*method)(arg.a, arg.b); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b)); |
} |
template<class ObjT, class Method, class A, class B, class C> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple3<A, B, C>& arg) { |
- (obj->*method)(arg.a, arg.b, arg.c); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c)); |
} |
template<class ObjT, class Method, class A, class B, class C, class D> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple4<A, B, C, D>& arg) { |
- (obj->*method)(arg.a, arg.b, arg.c, arg.d); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d)); |
} |
template<class ObjT, class Method, class A, class B, class C, class D, class E> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple5<A, B, C, D, E>& arg) { |
- (obj->*method)(arg.a, arg.b, arg.c, arg.d, arg.e); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e)); |
} |
template<class ObjT, class Method, class A, class B, class C, class D, class E, |
class F> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple6<A, B, C, D, E, F>& arg) { |
- (obj->*method)(arg.a, arg.b, arg.c, arg.d, arg.e, arg.f); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e), |
+ base::internal::UnwrapTraits<F>::Unwrap(arg.f)); |
} |
template<class ObjT, class Method, class A, class B, class C, class D, class E, |
class F, class G> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple7<A, B, C, D, E, F, G>& arg) { |
- (obj->*method)(arg.a, arg.b, arg.c, arg.d, arg.e, arg.f, arg.g); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e), |
+ base::internal::UnwrapTraits<F>::Unwrap(arg.f), |
+ base::internal::UnwrapTraits<G>::Unwrap(arg.g)); |
} |
template<class ObjT, class Method, class A, class B, class C, class D, class E, |
class F, class G, class H> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple8<A, B, C, D, E, F, G, H>& arg) { |
- (obj->*method)(arg.a, arg.b, arg.c, arg.d, arg.e, arg.f, arg.g, arg.h); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e), |
+ base::internal::UnwrapTraits<F>::Unwrap(arg.f), |
+ base::internal::UnwrapTraits<G>::Unwrap(arg.g), |
+ base::internal::UnwrapTraits<H>::Unwrap(arg.h)); |
} |
// Static Dispatchers with no out params. |
@@ -606,49 +636,77 @@ inline void DispatchToFunction(Function function, const A& arg) { |
template <class Function, class A> |
inline void DispatchToFunction(Function function, const Tuple1<A>& arg) { |
- (*function)(arg.a); |
+ (*function)(base::internal::UnwrapTraits<A>::Unwrap(arg.a)); |
} |
template<class Function, class A, class B> |
inline void DispatchToFunction(Function function, const Tuple2<A, B>& arg) { |
- (*function)(arg.a, arg.b); |
+ (*function)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b)); |
} |
template<class Function, class A, class B, class C> |
inline void DispatchToFunction(Function function, const Tuple3<A, B, C>& arg) { |
- (*function)(arg.a, arg.b, arg.c); |
+ (*function)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c)); |
} |
template<class Function, class A, class B, class C, class D> |
inline void DispatchToFunction(Function function, |
const Tuple4<A, B, C, D>& arg) { |
- (*function)(arg.a, arg.b, arg.c, arg.d); |
+ (*function)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d)); |
} |
template<class Function, class A, class B, class C, class D, class E> |
inline void DispatchToFunction(Function function, |
const Tuple5<A, B, C, D, E>& arg) { |
- (*function)(arg.a, arg.b, arg.c, arg.d, arg.e); |
+ (*function)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e)); |
} |
template<class Function, class A, class B, class C, class D, class E, class F> |
inline void DispatchToFunction(Function function, |
const Tuple6<A, B, C, D, E, F>& arg) { |
- (*function)(arg.a, arg.b, arg.c, arg.d, arg.e, arg.f); |
+ (*function)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e), |
+ base::internal::UnwrapTraits<F>::Unwrap(arg.f)); |
} |
template<class Function, class A, class B, class C, class D, class E, class F, |
class G> |
inline void DispatchToFunction(Function function, |
const Tuple7<A, B, C, D, E, F, G>& arg) { |
- (*function)(arg.a, arg.b, arg.c, arg.d, arg.e, arg.f, arg.g); |
+ (*function)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e), |
+ base::internal::UnwrapTraits<F>::Unwrap(arg.f), |
+ base::internal::UnwrapTraits<G>::Unwrap(arg.g)); |
} |
template<class Function, class A, class B, class C, class D, class E, class F, |
class G, class H> |
inline void DispatchToFunction(Function function, |
const Tuple8<A, B, C, D, E, F, G, H>& arg) { |
- (*function)(arg.a, arg.b, arg.c, arg.d, arg.e, arg.f, arg.g, arg.h); |
+ (*function)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e), |
+ base::internal::UnwrapTraits<F>::Unwrap(arg.f), |
+ base::internal::UnwrapTraits<G>::Unwrap(arg.g), |
+ base::internal::UnwrapTraits<H>::Unwrap(arg.h)); |
} |
// Dispatchers with 0 out param (as a Tuple0). |
@@ -662,46 +720,61 @@ inline void DispatchToMethod(ObjT* obj, |
template <class ObjT, class Method, class A> |
inline void DispatchToMethod(ObjT* obj, Method method, const A& arg, Tuple0*) { |
- (obj->*method)(arg); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg)); |
} |
template <class ObjT, class Method, class A> |
inline void DispatchToMethod(ObjT* obj, |
Method method, |
const Tuple1<A>& arg, Tuple0*) { |
- (obj->*method)(arg.a); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a)); |
} |
template<class ObjT, class Method, class A, class B> |
inline void DispatchToMethod(ObjT* obj, |
Method method, |
const Tuple2<A, B>& arg, Tuple0*) { |
- (obj->*method)(arg.a, arg.b); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b)); |
} |
template<class ObjT, class Method, class A, class B, class C> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple3<A, B, C>& arg, Tuple0*) { |
- (obj->*method)(arg.a, arg.b, arg.c); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c)); |
} |
template<class ObjT, class Method, class A, class B, class C, class D> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple4<A, B, C, D>& arg, Tuple0*) { |
- (obj->*method)(arg.a, arg.b, arg.c, arg.d); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d)); |
} |
template<class ObjT, class Method, class A, class B, class C, class D, class E> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple5<A, B, C, D, E>& arg, Tuple0*) { |
- (obj->*method)(arg.a, arg.b, arg.c, arg.d, arg.e); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e)); |
} |
template<class ObjT, class Method, class A, class B, class C, class D, class E, |
class F> |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple6<A, B, C, D, E, F>& arg, Tuple0*) { |
- (obj->*method)(arg.a, arg.b, arg.c, arg.d, arg.e, arg.f); |
+ (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg.a), |
+ base::internal::UnwrapTraits<B>::Unwrap(arg.b), |
+ base::internal::UnwrapTraits<C>::Unwrap(arg.c), |
+ base::internal::UnwrapTraits<D>::Unwrap(arg.d), |
+ base::internal::UnwrapTraits<E>::Unwrap(arg.e), |
+ base::internal::UnwrapTraits<F>::Unwrap(arg.f)); |
} |
// Dispatchers with 1 out param. |
@@ -727,7 +800,7 @@ template<class ObjT, class Method, class InA, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple1<InA>& in, |
Tuple1<OutA>* out) { |
- (obj->*method)(in.a, &out->a); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), &out->a); |
} |
template<class ObjT, class Method, class InA, class InB, |
@@ -735,7 +808,9 @@ template<class ObjT, class Method, class InA, class InB, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple2<InA, InB>& in, |
Tuple1<OutA>* out) { |
- (obj->*method)(in.a, in.b, &out->a); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ &out->a); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, |
@@ -743,7 +818,10 @@ template<class ObjT, class Method, class InA, class InB, class InC, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple3<InA, InB, InC>& in, |
Tuple1<OutA>* out) { |
- (obj->*method)(in.a, in.b, in.c, &out->a); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ &out->a); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
@@ -751,7 +829,11 @@ template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple4<InA, InB, InC, InD>& in, |
Tuple1<OutA>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, &out->a); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ &out->a); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
@@ -759,7 +841,12 @@ template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple5<InA, InB, InC, InD, InE>& in, |
Tuple1<OutA>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, &out->a); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ &out->a); |
} |
template<class ObjT, class Method, |
@@ -768,7 +855,13 @@ template<class ObjT, class Method, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple6<InA, InB, InC, InD, InE, InF>& in, |
Tuple1<OutA>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, &out->a); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ base::internal::UnwrapTraits<InF>::Unwrap(in.f), |
+ &out->a); |
} |
// Dispatchers with 2 out params. |
@@ -794,7 +887,8 @@ template<class ObjT, class Method, class InA, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple1<InA>& in, |
Tuple2<OutA, OutB>* out) { |
- (obj->*method)(in.a, &out->a, &out->b); |
+ (obj->*method)( |
+ base::internal::UnwrapTraits<InA>::Unwrap(in.a), &out->a, &out->b); |
} |
template<class ObjT, class Method, class InA, class InB, |
@@ -802,7 +896,10 @@ template<class ObjT, class Method, class InA, class InB, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple2<InA, InB>& in, |
Tuple2<OutA, OutB>* out) { |
- (obj->*method)(in.a, in.b, &out->a, &out->b); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ &out->a, |
+ &out->b); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, |
@@ -810,7 +907,11 @@ template<class ObjT, class Method, class InA, class InB, class InC, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple3<InA, InB, InC>& in, |
Tuple2<OutA, OutB>* out) { |
- (obj->*method)(in.a, in.b, in.c, &out->a, &out->b); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ &out->a, |
+ &out->b); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
@@ -818,7 +919,12 @@ template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple4<InA, InB, InC, InD>& in, |
Tuple2<OutA, OutB>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, &out->a, &out->b); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ &out->a, |
+ &out->b); |
} |
template<class ObjT, class Method, |
@@ -827,7 +933,13 @@ template<class ObjT, class Method, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple5<InA, InB, InC, InD, InE>& in, |
Tuple2<OutA, OutB>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, &out->a, &out->b); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ &out->a, |
+ &out->b); |
} |
template<class ObjT, class Method, |
@@ -836,7 +948,14 @@ template<class ObjT, class Method, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple6<InA, InB, InC, InD, InE, InF>& in, |
Tuple2<OutA, OutB>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, &out->a, &out->b); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ base::internal::UnwrapTraits<InF>::Unwrap(in.f), |
+ &out->a, |
+ &out->b); |
} |
// Dispatchers with 3 out params. |
@@ -862,7 +981,10 @@ template<class ObjT, class Method, class InA, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple1<InA>& in, |
Tuple3<OutA, OutB, OutC>* out) { |
- (obj->*method)(in.a, &out->a, &out->b, &out->c); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ &out->a, |
+ &out->b, |
+ &out->c); |
} |
template<class ObjT, class Method, class InA, class InB, |
@@ -870,7 +992,11 @@ template<class ObjT, class Method, class InA, class InB, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple2<InA, InB>& in, |
Tuple3<OutA, OutB, OutC>* out) { |
- (obj->*method)(in.a, in.b, &out->a, &out->b, &out->c); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ &out->a, |
+ &out->b, |
+ &out->c); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, |
@@ -878,7 +1004,12 @@ template<class ObjT, class Method, class InA, class InB, class InC, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple3<InA, InB, InC>& in, |
Tuple3<OutA, OutB, OutC>* out) { |
- (obj->*method)(in.a, in.b, in.c, &out->a, &out->b, &out->c); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ &out->a, |
+ &out->b, |
+ &out->c); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
@@ -886,7 +1017,13 @@ template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple4<InA, InB, InC, InD>& in, |
Tuple3<OutA, OutB, OutC>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, &out->a, &out->b, &out->c); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ &out->a, |
+ &out->b, |
+ &out->c); |
} |
template<class ObjT, class Method, |
@@ -895,7 +1032,14 @@ template<class ObjT, class Method, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple5<InA, InB, InC, InD, InE>& in, |
Tuple3<OutA, OutB, OutC>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, &out->a, &out->b, &out->c); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ &out->a, |
+ &out->b, |
+ &out->c); |
} |
template<class ObjT, class Method, |
@@ -904,7 +1048,15 @@ template<class ObjT, class Method, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple6<InA, InB, InC, InD, InE, InF>& in, |
Tuple3<OutA, OutB, OutC>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, &out->a, &out->b, &out->c); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ base::internal::UnwrapTraits<InF>::Unwrap(in.f), |
+ &out->a, |
+ &out->b, |
+ &out->c); |
} |
// Dispatchers with 4 out params. |
@@ -922,7 +1074,11 @@ template<class ObjT, class Method, class InA, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const InA& in, |
Tuple4<OutA, OutB, OutC, OutD>* out) { |
- (obj->*method)(in, &out->a, &out->b, &out->c, &out->d); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d); |
} |
template<class ObjT, class Method, class InA, |
@@ -930,7 +1086,11 @@ template<class ObjT, class Method, class InA, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple1<InA>& in, |
Tuple4<OutA, OutB, OutC, OutD>* out) { |
- (obj->*method)(in.a, &out->a, &out->b, &out->c, &out->d); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d); |
} |
template<class ObjT, class Method, class InA, class InB, |
@@ -938,7 +1098,12 @@ template<class ObjT, class Method, class InA, class InB, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple2<InA, InB>& in, |
Tuple4<OutA, OutB, OutC, OutD>* out) { |
- (obj->*method)(in.a, in.b, &out->a, &out->b, &out->c, &out->d); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, |
@@ -946,7 +1111,13 @@ template<class ObjT, class Method, class InA, class InB, class InC, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple3<InA, InB, InC>& in, |
Tuple4<OutA, OutB, OutC, OutD>* out) { |
- (obj->*method)(in.a, in.b, in.c, &out->a, &out->b, &out->c, &out->d); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
@@ -954,7 +1125,14 @@ template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple4<InA, InB, InC, InD>& in, |
Tuple4<OutA, OutB, OutC, OutD>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, &out->a, &out->b, &out->c, &out->d); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d); |
} |
template<class ObjT, class Method, |
@@ -963,8 +1141,15 @@ template<class ObjT, class Method, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple5<InA, InB, InC, InD, InE>& in, |
Tuple4<OutA, OutB, OutC, OutD>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, |
- &out->a, &out->b, &out->c, &out->d); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d); |
} |
template<class ObjT, class Method, |
@@ -973,8 +1158,16 @@ template<class ObjT, class Method, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple6<InA, InB, InC, InD, InE, InF>& in, |
Tuple4<OutA, OutB, OutC, OutD>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, |
- &out->a, &out->b, &out->c, &out->d); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ base::internal::UnwrapTraits<InF>::Unwrap(in.f), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d); |
} |
// Dispatchers with 5 out params. |
@@ -992,7 +1185,12 @@ template<class ObjT, class Method, class InA, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const InA& in, |
Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
- (obj->*method)(in, &out->a, &out->b, &out->c, &out->d, &out->e); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d, |
+ &out->e); |
} |
template<class ObjT, class Method, class InA, |
@@ -1000,7 +1198,12 @@ template<class ObjT, class Method, class InA, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple1<InA>& in, |
Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
- (obj->*method)(in.a, &out->a, &out->b, &out->c, &out->d, &out->e); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d, |
+ &out->e); |
} |
template<class ObjT, class Method, class InA, class InB, |
@@ -1008,7 +1211,13 @@ template<class ObjT, class Method, class InA, class InB, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple2<InA, InB>& in, |
Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
- (obj->*method)(in.a, in.b, &out->a, &out->b, &out->c, &out->d, &out->e); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d, |
+ &out->e); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, |
@@ -1016,7 +1225,14 @@ template<class ObjT, class Method, class InA, class InB, class InC, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple3<InA, InB, InC>& in, |
Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
- (obj->*method)(in.a, in.b, in.c, &out->a, &out->b, &out->c, &out->d, &out->e); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d, |
+ &out->e); |
} |
template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
@@ -1024,7 +1240,14 @@ template<class ObjT, class Method, class InA, class InB, class InC, class InD, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple4<InA, InB, InC, InD>& in, |
Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, &out->a, &out->b, &out->c, &out->d, |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d, |
&out->e); |
} |
@@ -1034,8 +1257,16 @@ template<class ObjT, class Method, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple5<InA, InB, InC, InD, InE>& in, |
Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, |
- &out->a, &out->b, &out->c, &out->d, &out->e); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d, |
+ &out->e); |
} |
template<class ObjT, class Method, |
@@ -1044,8 +1275,17 @@ template<class ObjT, class Method, |
inline void DispatchToMethod(ObjT* obj, Method method, |
const Tuple6<InA, InB, InC, InD, InE, InF>& in, |
Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
- (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, |
- &out->a, &out->b, &out->c, &out->d, &out->e); |
+ (obj->*method)(base::internal::UnwrapTraits<InA>::Unwrap(in.a), |
+ base::internal::UnwrapTraits<InB>::Unwrap(in.b), |
+ base::internal::UnwrapTraits<InC>::Unwrap(in.c), |
+ base::internal::UnwrapTraits<InD>::Unwrap(in.d), |
+ base::internal::UnwrapTraits<InE>::Unwrap(in.e), |
+ base::internal::UnwrapTraits<InF>::Unwrap(in.f), |
+ &out->a, |
+ &out->b, |
+ &out->c, |
+ &out->d, |
+ &out->e); |
} |
#endif // BASE_TUPLE_H__ |