| Index: base/tuple.h
|
| diff --git a/base/tuple.h b/base/tuple.h
|
| index bcd2ad4f2ef76b116d5fa2ba3eefa8e87946c93d..b67d924906aa2642cff57d9e46e8fafe0bfe4094 100644
|
| --- a/base/tuple.h
|
| +++ b/base/tuple.h
|
| @@ -52,6 +52,9 @@ struct TupleTraits<P&> {
|
| typedef P& ParamType;
|
| };
|
|
|
| +template <class P>
|
| +struct TupleTypes { };
|
| +
|
| // Tuple -----------------------------------------------------------------------
|
| //
|
| // This set of classes is useful for bundling 0 or more heterogeneous data types
|
| @@ -76,9 +79,6 @@ template <class A>
|
| struct Tuple1 {
|
| public:
|
| typedef A TypeA;
|
| - typedef Tuple1<typename TupleTraits<A>::ValueType> ValueTuple;
|
| - typedef Tuple1<typename TupleTraits<A>::RefType> RefTuple;
|
| - typedef Tuple1<typename TupleTraits<A>::ParamType> ParamTuple;
|
|
|
| Tuple1() {}
|
| explicit Tuple1(typename TupleTraits<A>::ParamType a) : a(a) {}
|
| @@ -91,12 +91,6 @@ struct Tuple2 {
|
| public:
|
| typedef A TypeA;
|
| typedef B TypeB;
|
| - typedef Tuple2<typename TupleTraits<A>::ValueType,
|
| - typename TupleTraits<B>::ValueType> ValueTuple;
|
| - typedef Tuple2<typename TupleTraits<A>::RefType,
|
| - typename TupleTraits<B>::RefType> RefTuple;
|
| - typedef Tuple2<typename TupleTraits<A>::ParamType,
|
| - typename TupleTraits<B>::ParamType> ParamTuple;
|
|
|
| Tuple2() {}
|
| Tuple2(typename TupleTraits<A>::ParamType a,
|
| @@ -114,15 +108,6 @@ struct Tuple3 {
|
| typedef A TypeA;
|
| typedef B TypeB;
|
| typedef C TypeC;
|
| - typedef Tuple3<typename TupleTraits<A>::ValueType,
|
| - typename TupleTraits<B>::ValueType,
|
| - typename TupleTraits<C>::ValueType> ValueTuple;
|
| - typedef Tuple3<typename TupleTraits<A>::RefType,
|
| - typename TupleTraits<B>::RefType,
|
| - typename TupleTraits<C>::RefType> RefTuple;
|
| - typedef Tuple3<typename TupleTraits<A>::ParamType,
|
| - typename TupleTraits<B>::ParamType,
|
| - typename TupleTraits<C>::ParamType> ParamTuple;
|
|
|
| Tuple3() {}
|
| Tuple3(typename TupleTraits<A>::ParamType a,
|
| @@ -143,18 +128,6 @@ struct Tuple4 {
|
| typedef B TypeB;
|
| typedef C TypeC;
|
| typedef D TypeD;
|
| - typedef Tuple4<typename TupleTraits<A>::ValueType,
|
| - typename TupleTraits<B>::ValueType,
|
| - typename TupleTraits<C>::ValueType,
|
| - typename TupleTraits<D>::ValueType> ValueTuple;
|
| - typedef Tuple4<typename TupleTraits<A>::RefType,
|
| - typename TupleTraits<B>::RefType,
|
| - typename TupleTraits<C>::RefType,
|
| - typename TupleTraits<D>::RefType> RefTuple;
|
| - typedef Tuple4<typename TupleTraits<A>::ParamType,
|
| - typename TupleTraits<B>::ParamType,
|
| - typename TupleTraits<C>::ParamType,
|
| - typename TupleTraits<D>::ParamType> ParamTuple;
|
|
|
| Tuple4() {}
|
| Tuple4(typename TupleTraits<A>::ParamType a,
|
| @@ -178,21 +151,6 @@ struct Tuple5 {
|
| typedef C TypeC;
|
| typedef D TypeD;
|
| typedef E TypeE;
|
| - typedef Tuple5<typename TupleTraits<A>::ValueType,
|
| - typename TupleTraits<B>::ValueType,
|
| - typename TupleTraits<C>::ValueType,
|
| - typename TupleTraits<D>::ValueType,
|
| - typename TupleTraits<E>::ValueType> ValueTuple;
|
| - typedef Tuple5<typename TupleTraits<A>::RefType,
|
| - typename TupleTraits<B>::RefType,
|
| - typename TupleTraits<C>::RefType,
|
| - typename TupleTraits<D>::RefType,
|
| - typename TupleTraits<E>::RefType> RefTuple;
|
| - typedef Tuple5<typename TupleTraits<A>::ParamType,
|
| - typename TupleTraits<B>::ParamType,
|
| - typename TupleTraits<C>::ParamType,
|
| - typename TupleTraits<D>::ParamType,
|
| - typename TupleTraits<E>::ParamType> ParamTuple;
|
|
|
| Tuple5() {}
|
| Tuple5(typename TupleTraits<A>::ParamType a,
|
| @@ -219,24 +177,6 @@ struct Tuple6 {
|
| typedef D TypeD;
|
| typedef E TypeE;
|
| typedef F TypeF;
|
| - typedef Tuple6<typename TupleTraits<A>::ValueType,
|
| - typename TupleTraits<B>::ValueType,
|
| - typename TupleTraits<C>::ValueType,
|
| - typename TupleTraits<D>::ValueType,
|
| - typename TupleTraits<E>::ValueType,
|
| - typename TupleTraits<F>::ValueType> ValueTuple;
|
| - typedef Tuple6<typename TupleTraits<A>::RefType,
|
| - typename TupleTraits<B>::RefType,
|
| - typename TupleTraits<C>::RefType,
|
| - typename TupleTraits<D>::RefType,
|
| - typename TupleTraits<E>::RefType,
|
| - typename TupleTraits<F>::RefType> RefTuple;
|
| - typedef Tuple6<typename TupleTraits<A>::ParamType,
|
| - typename TupleTraits<B>::ParamType,
|
| - typename TupleTraits<C>::ParamType,
|
| - typename TupleTraits<D>::ParamType,
|
| - typename TupleTraits<E>::ParamType,
|
| - typename TupleTraits<F>::ParamType> ParamTuple;
|
|
|
| Tuple6() {}
|
| Tuple6(typename TupleTraits<A>::ParamType a,
|
| @@ -266,27 +206,6 @@ struct Tuple7 {
|
| 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;
|
| - typedef Tuple7<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> ParamTuple;
|
|
|
| Tuple7() {}
|
| Tuple7(typename TupleTraits<A>::ParamType a,
|
| @@ -320,30 +239,6 @@ struct Tuple8 {
|
| 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,
|
| @@ -367,6 +262,159 @@ struct Tuple8 {
|
| H h;
|
| };
|
|
|
| +// Tuple types ----------------------------------------------------------------
|
| +//
|
| +// Allows for selection of ValueTuple/RefTuple/ParamTuple without needing the
|
| +// definitions of class types the tuple takes as parameters.
|
| +
|
| +template <>
|
| +struct TupleTypes< Tuple0 > {
|
| + typedef Tuple0 ValueTuple;
|
| + typedef Tuple0 RefTuple;
|
| + typedef Tuple0 ParamTuple;
|
| +};
|
| +
|
| +template <class A>
|
| +struct TupleTypes< Tuple1<A> > {
|
| + typedef Tuple1<typename TupleTraits<A>::ValueType> ValueTuple;
|
| + typedef Tuple1<typename TupleTraits<A>::RefType> RefTuple;
|
| + typedef Tuple1<typename TupleTraits<A>::ParamType> ParamTuple;
|
| +};
|
| +
|
| +template <class A, class B>
|
| +struct TupleTypes< Tuple2<A, B> > {
|
| + typedef Tuple2<typename TupleTraits<A>::ValueType,
|
| + typename TupleTraits<B>::ValueType> ValueTuple;
|
| +typedef Tuple2<typename TupleTraits<A>::RefType,
|
| + typename TupleTraits<B>::RefType> RefTuple;
|
| + typedef Tuple2<typename TupleTraits<A>::ParamType,
|
| + typename TupleTraits<B>::ParamType> ParamTuple;
|
| +};
|
| +
|
| +template <class A, class B, class C>
|
| +struct TupleTypes< Tuple3<A, B, C> > {
|
| + typedef Tuple3<typename TupleTraits<A>::ValueType,
|
| + typename TupleTraits<B>::ValueType,
|
| + typename TupleTraits<C>::ValueType> ValueTuple;
|
| +typedef Tuple3<typename TupleTraits<A>::RefType,
|
| + typename TupleTraits<B>::RefType,
|
| + typename TupleTraits<C>::RefType> RefTuple;
|
| + typedef Tuple3<typename TupleTraits<A>::ParamType,
|
| + typename TupleTraits<B>::ParamType,
|
| + typename TupleTraits<C>::ParamType> ParamTuple;
|
| +};
|
| +
|
| +template <class A, class B, class C, class D>
|
| +struct TupleTypes< Tuple4<A, B, C, D> > {
|
| + typedef Tuple4<typename TupleTraits<A>::ValueType,
|
| + typename TupleTraits<B>::ValueType,
|
| + typename TupleTraits<C>::ValueType,
|
| + typename TupleTraits<D>::ValueType> ValueTuple;
|
| +typedef Tuple4<typename TupleTraits<A>::RefType,
|
| + typename TupleTraits<B>::RefType,
|
| + typename TupleTraits<C>::RefType,
|
| + typename TupleTraits<D>::RefType> RefTuple;
|
| + typedef Tuple4<typename TupleTraits<A>::ParamType,
|
| + typename TupleTraits<B>::ParamType,
|
| + typename TupleTraits<C>::ParamType,
|
| + typename TupleTraits<D>::ParamType> ParamTuple;
|
| +};
|
| +
|
| +template <class A, class B, class C, class D, class E>
|
| +struct TupleTypes< Tuple5<A, B, C, D, E> > {
|
| + typedef Tuple5<typename TupleTraits<A>::ValueType,
|
| + typename TupleTraits<B>::ValueType,
|
| + typename TupleTraits<C>::ValueType,
|
| + typename TupleTraits<D>::ValueType,
|
| + typename TupleTraits<E>::ValueType> ValueTuple;
|
| +typedef Tuple5<typename TupleTraits<A>::RefType,
|
| + typename TupleTraits<B>::RefType,
|
| + typename TupleTraits<C>::RefType,
|
| + typename TupleTraits<D>::RefType,
|
| + typename TupleTraits<E>::RefType> RefTuple;
|
| + typedef Tuple5<typename TupleTraits<A>::ParamType,
|
| + typename TupleTraits<B>::ParamType,
|
| + typename TupleTraits<C>::ParamType,
|
| + typename TupleTraits<D>::ParamType,
|
| + typename TupleTraits<E>::ParamType> ParamTuple;
|
| +};
|
| +
|
| +template <class A, class B, class C, class D, class E, class F>
|
| +struct TupleTypes< Tuple6<A, B, C, D, E, F> > {
|
| + typedef Tuple6<typename TupleTraits<A>::ValueType,
|
| + typename TupleTraits<B>::ValueType,
|
| + typename TupleTraits<C>::ValueType,
|
| + typename TupleTraits<D>::ValueType,
|
| + typename TupleTraits<E>::ValueType,
|
| + typename TupleTraits<F>::ValueType> ValueTuple;
|
| +typedef Tuple6<typename TupleTraits<A>::RefType,
|
| + typename TupleTraits<B>::RefType,
|
| + typename TupleTraits<C>::RefType,
|
| + typename TupleTraits<D>::RefType,
|
| + typename TupleTraits<E>::RefType,
|
| + typename TupleTraits<F>::RefType> RefTuple;
|
| + typedef Tuple6<typename TupleTraits<A>::ParamType,
|
| + typename TupleTraits<B>::ParamType,
|
| + typename TupleTraits<C>::ParamType,
|
| + typename TupleTraits<D>::ParamType,
|
| + typename TupleTraits<E>::ParamType,
|
| + typename TupleTraits<F>::ParamType> ParamTuple;
|
| +};
|
| +
|
| +template <class A, class B, class C, class D, class E, class F, class G>
|
| +struct TupleTypes< Tuple7<A, B, C, D, E, F, G> > {
|
| + 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;
|
| + typedef Tuple7<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> ParamTuple;
|
| +};
|
| +
|
| +template <class A, class B, class C, class D, class E, class F, class G,
|
| + class H>
|
| +struct TupleTypes< Tuple8<A, B, C, D, E, F, G, H> > {
|
| + 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;
|
| +};
|
| +
|
| // Tuple creators -------------------------------------------------------------
|
| //
|
| // Helper functions for constructing tuples while inferring the template
|
|
|