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> |