| Index: base/tuple.h
|
| ===================================================================
|
| --- base/tuple.h (revision 5130)
|
| +++ base/tuple.h (working copy)
|
| @@ -233,6 +233,51 @@
|
| F f;
|
| };
|
|
|
| +template <class A, class B, class C, class D, class E, class F, class G>
|
| +struct Tuple7 {
|
| +public:
|
| + typedef A TypeA;
|
| + typedef B TypeB;
|
| + typedef C TypeC;
|
| + typedef D TypeD;
|
| + typedef E TypeE;
|
| + typedef F TypeF;
|
| + typedef G TypeG;
|
| + typedef Tuple7<typename TupleTraits<A>::ValueType,
|
| + typename TupleTraits<B>::ValueType,
|
| + typename TupleTraits<C>::ValueType,
|
| + typename TupleTraits<D>::ValueType,
|
| + typename TupleTraits<E>::ValueType,
|
| + typename TupleTraits<F>::ValueType,
|
| + typename TupleTraits<G>::ValueType> ValueTuple;
|
| + typedef Tuple7<typename TupleTraits<A>::RefType,
|
| + typename TupleTraits<B>::RefType,
|
| + typename TupleTraits<C>::RefType,
|
| + typename TupleTraits<D>::RefType,
|
| + typename TupleTraits<E>::RefType,
|
| + typename TupleTraits<F>::RefType,
|
| + typename TupleTraits<G>::RefType> RefTuple;
|
| +
|
| + Tuple7() {}
|
| + Tuple7(typename TupleTraits<A>::ParamType a,
|
| + typename TupleTraits<B>::ParamType b,
|
| + typename TupleTraits<C>::ParamType c,
|
| + typename TupleTraits<D>::ParamType d,
|
| + typename TupleTraits<E>::ParamType e,
|
| + typename TupleTraits<F>::ParamType f,
|
| + typename TupleTraits<G>::ParamType g)
|
| + : a(a), b(b), c(c), d(d), e(e), f(f), g(g) {
|
| + }
|
| +
|
| + A a;
|
| + B b;
|
| + C c;
|
| + D d;
|
| + E e;
|
| + F f;
|
| + G g;
|
| +};
|
| +
|
| // Tuple creators -------------------------------------------------------------
|
| //
|
| // Helper functions for constructing tuples while inferring the template
|
| @@ -275,6 +320,13 @@
|
| return Tuple6<A, B, C, D, E, F>(a, b, c, d, e, f);
|
| }
|
|
|
| +template <class A, class B, class C, class D, class E, class F, class G>
|
| +inline Tuple7<A, B, C, D, E, F, G> MakeTuple(const A& a, const B& b, const C& c,
|
| + const D& d, const E& e, const F& f,
|
| + const G& g) {
|
| + return Tuple7<A, B, C, D, E, F, G>(a, b, c, d, e, f, g);
|
| +}
|
| +
|
| // The following set of helpers make what Boost refers to as "Tiers" - a tuple
|
| // of references.
|
|
|
| @@ -309,6 +361,12 @@
|
| return Tuple6<A&, B&, C&, D&, E&, F&>(a, b, c, d, e, f);
|
| }
|
|
|
| +template <class A, class B, class C, class D, class E, class F, class G>
|
| +inline Tuple7<A&, B&, C&, D&, E&, F&, G&> MakeRefTuple(A& a, B& b, C& c, D& d,
|
| + E& e, F& f, G& g) {
|
| + return Tuple7<A&, B&, C&, D&, E&, F&, G&>(a, b, c, d, e, f, g);
|
| +}
|
| +
|
| // Dispatchers ----------------------------------------------------------------
|
| //
|
| // Helper functions that call the given method on an object, with the unpacked
|
| @@ -365,6 +423,13 @@
|
| (obj->*method)(arg.a, arg.b, arg.c, arg.d, arg.e, 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);
|
| +}
|
| +
|
| // Static Dispatchers with no out params.
|
|
|
| template <class Function>
|
|
|