Index: base/tuple.h |
diff --git a/base/tuple.h b/base/tuple.h |
index b3a7515aec1525e0654ca8e539099a4a1eba3ae4..d17d9f5afc24070811e73d27580c68e5c8a7e724 100644 |
--- a/base/tuple.h |
+++ b/base/tuple.h |
@@ -307,6 +307,65 @@ struct Tuple7 { |
G g; |
}; |
+template <class A, class B, class C, class D, class E, class F, class G, |
+ class H> |
+struct Tuple8 { |
+ public: |
+ typedef A TypeA; |
+ typedef B TypeB; |
+ typedef C TypeC; |
+ typedef D TypeD; |
+ typedef E TypeE; |
+ typedef F TypeF; |
+ typedef G TypeG; |
+ typedef H TypeH; |
+ typedef Tuple8<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, |
+ typename TupleTraits<H>::ValueType> ValueTuple; |
+ typedef Tuple8<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, |
+ typename TupleTraits<H>::RefType> RefTuple; |
+ typedef Tuple8<typename TupleTraits<A>::ParamType, |
+ typename TupleTraits<B>::ParamType, |
+ typename TupleTraits<C>::ParamType, |
+ typename TupleTraits<D>::ParamType, |
+ typename TupleTraits<E>::ParamType, |
+ typename TupleTraits<F>::ParamType, |
+ typename TupleTraits<G>::ParamType, |
+ typename TupleTraits<H>::ParamType> ParamTuple; |
+ |
+ Tuple8() {} |
+ Tuple8(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, |
+ typename TupleTraits<H>::ParamType h) |
+ : a(a), b(b), c(c), d(d), e(e), f(f), g(g), h(h) { |
+ } |
+ |
+ A a; |
+ B b; |
+ C c; |
+ D d; |
+ E e; |
+ F f; |
+ G g; |
+ H h; |
+}; |
+ |
// Tuple creators ------------------------------------------------------------- |
// |
// Helper functions for constructing tuples while inferring the template |
@@ -356,6 +415,15 @@ inline Tuple7<A, B, C, D, E, F, G> MakeTuple(const A& a, const B& b, const C& c, |
return Tuple7<A, B, C, D, E, F, G>(a, b, c, d, e, f, g); |
} |
+template <class A, class B, class C, class D, class E, class F, class G, |
+ class H> |
+inline Tuple8<A, B, C, D, E, F, G, H> MakeTuple(const A& a, const B& b, |
+ const C& c, const D& d, |
+ const E& e, const F& f, |
+ const G& g, const H& h) { |
+ return Tuple8<A, B, C, D, E, F, G, H>(a, b, c, d, e, f, g, h); |
+} |
+ |
// The following set of helpers make what Boost refers to as "Tiers" - a tuple |
// of references. |
@@ -396,6 +464,14 @@ inline Tuple7<A&, B&, C&, D&, E&, F&, G&> MakeRefTuple(A& a, B& b, C& c, D& d, |
return Tuple7<A&, B&, C&, D&, E&, F&, G&>(a, b, c, d, e, f, g); |
} |
+template <class A, class B, class C, class D, class E, class F, class G, |
+ class H> |
+inline Tuple8<A&, B&, C&, D&, E&, F&, G&, H&> MakeRefTuple(A& a, B& b, C& c, |
+ D& d, E& e, F& f, |
+ G& g, H& h) { |
+ return Tuple8<A&, B&, C&, D&, E&, F&, G&, H&>(a, b, c, d, e, f, g, h); |
+} |
+ |
// Dispatchers ---------------------------------------------------------------- |
// |
// Helper functions that call the given method on an object, with the unpacked |
@@ -506,6 +582,20 @@ inline void DispatchToFunction(Function function, |
(*function)(arg.a, arg.b, arg.c, arg.d, arg.e, 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); |
+} |
+ |
+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); |
+} |
+ |
// Dispatchers with 0 out param (as a Tuple0). |
template <class ObjT, class Method> |