| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // A Tuple is a generic templatized container, similar in concept to std::pair. | 5 // A Tuple is a generic templatized container, similar in concept to std::pair. |
| 6 // There are classes Tuple0 to Tuple6, cooresponding to the number of elements | 6 // There are classes Tuple0 to Tuple6, cooresponding to the number of elements |
| 7 // it contains. The convenient MakeTuple() function takes 0 to 6 arguments, | 7 // it contains. The convenient MakeTuple() function takes 0 to 6 arguments, |
| 8 // and will construct and return the appropriate Tuple object. The functions | 8 // and will construct and return the appropriate Tuple object. The functions |
| 9 // DispatchToMethod and DispatchToFunction take a function pointer or instance | 9 // DispatchToMethod and DispatchToFunction take a function pointer or instance |
| 10 // and method pointer, and unpack a tuple into arguments to the call. | 10 // and method pointer, and unpack a tuple into arguments to the call. |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 // Tuple0 is supplied to act as a 'void' type. It can be used, for example, | 61 // Tuple0 is supplied to act as a 'void' type. It can be used, for example, |
| 62 // when dispatching to a function that accepts no arguments (see the | 62 // when dispatching to a function that accepts no arguments (see the |
| 63 // Dispatchers below). | 63 // Dispatchers below). |
| 64 // Tuple1<A> is rarely useful. One such use is when A is non-const ref that you | 64 // Tuple1<A> is rarely useful. One such use is when A is non-const ref that you |
| 65 // want filled by the dispatchee, and the tuple is merely a container for that | 65 // want filled by the dispatchee, and the tuple is merely a container for that |
| 66 // output (a "tier"). See MakeRefTuple and its usages. | 66 // output (a "tier"). See MakeRefTuple and its usages. |
| 67 | 67 |
| 68 struct Tuple0 { | 68 struct Tuple0 { |
| 69 typedef Tuple0 ValueTuple; | 69 typedef Tuple0 ValueTuple; |
| 70 typedef Tuple0 RefTuple; | 70 typedef Tuple0 RefTuple; |
| 71 typedef Tuple0 ParamTuple; |
| 71 }; | 72 }; |
| 72 | 73 |
| 73 template <class A> | 74 template <class A> |
| 74 struct Tuple1 { | 75 struct Tuple1 { |
| 75 public: | 76 public: |
| 76 typedef A TypeA; | 77 typedef A TypeA; |
| 77 typedef Tuple1<typename TupleTraits<A>::ValueType> ValueTuple; | 78 typedef Tuple1<typename TupleTraits<A>::ValueType> ValueTuple; |
| 78 typedef Tuple1<typename TupleTraits<A>::RefType> RefTuple; | 79 typedef Tuple1<typename TupleTraits<A>::RefType> RefTuple; |
| 80 typedef Tuple1<typename TupleTraits<A>::ParamType> ParamTuple; |
| 79 | 81 |
| 80 Tuple1() {} | 82 Tuple1() {} |
| 81 explicit Tuple1(typename TupleTraits<A>::ParamType a) : a(a) {} | 83 explicit Tuple1(typename TupleTraits<A>::ParamType a) : a(a) {} |
| 82 | 84 |
| 83 A a; | 85 A a; |
| 84 }; | 86 }; |
| 85 | 87 |
| 86 template <class A, class B> | 88 template <class A, class B> |
| 87 struct Tuple2 { | 89 struct Tuple2 { |
| 88 public: | 90 public: |
| 89 typedef A TypeA; | 91 typedef A TypeA; |
| 90 typedef B TypeB; | 92 typedef B TypeB; |
| 91 typedef Tuple2<typename TupleTraits<A>::ValueType, | 93 typedef Tuple2<typename TupleTraits<A>::ValueType, |
| 92 typename TupleTraits<B>::ValueType> ValueTuple; | 94 typename TupleTraits<B>::ValueType> ValueTuple; |
| 93 typedef Tuple2<typename TupleTraits<A>::RefType, | 95 typedef Tuple2<typename TupleTraits<A>::RefType, |
| 94 typename TupleTraits<B>::RefType> RefTuple; | 96 typename TupleTraits<B>::RefType> RefTuple; |
| 97 typedef Tuple2<typename TupleTraits<A>::ParamType, |
| 98 typename TupleTraits<B>::ParamType> ParamTuple; |
| 95 | 99 |
| 96 Tuple2() {} | 100 Tuple2() {} |
| 97 Tuple2(typename TupleTraits<A>::ParamType a, | 101 Tuple2(typename TupleTraits<A>::ParamType a, |
| 98 typename TupleTraits<B>::ParamType b) | 102 typename TupleTraits<B>::ParamType b) |
| 99 : a(a), b(b) { | 103 : a(a), b(b) { |
| 100 } | 104 } |
| 101 | 105 |
| 102 A a; | 106 A a; |
| 103 B b; | 107 B b; |
| 104 }; | 108 }; |
| 105 | 109 |
| 106 template <class A, class B, class C> | 110 template <class A, class B, class C> |
| 107 struct Tuple3 { | 111 struct Tuple3 { |
| 108 public: | 112 public: |
| 109 typedef A TypeA; | 113 typedef A TypeA; |
| 110 typedef B TypeB; | 114 typedef B TypeB; |
| 111 typedef C TypeC; | 115 typedef C TypeC; |
| 112 typedef Tuple3<typename TupleTraits<A>::ValueType, | 116 typedef Tuple3<typename TupleTraits<A>::ValueType, |
| 113 typename TupleTraits<B>::ValueType, | 117 typename TupleTraits<B>::ValueType, |
| 114 typename TupleTraits<C>::ValueType> ValueTuple; | 118 typename TupleTraits<C>::ValueType> ValueTuple; |
| 115 typedef Tuple3<typename TupleTraits<A>::RefType, | 119 typedef Tuple3<typename TupleTraits<A>::RefType, |
| 116 typename TupleTraits<B>::RefType, | 120 typename TupleTraits<B>::RefType, |
| 117 typename TupleTraits<C>::RefType> RefTuple; | 121 typename TupleTraits<C>::RefType> RefTuple; |
| 122 typedef Tuple3<typename TupleTraits<A>::ParamType, |
| 123 typename TupleTraits<B>::ParamType, |
| 124 typename TupleTraits<C>::ParamType> ParamTuple; |
| 118 | 125 |
| 119 Tuple3() {} | 126 Tuple3() {} |
| 120 Tuple3(typename TupleTraits<A>::ParamType a, | 127 Tuple3(typename TupleTraits<A>::ParamType a, |
| 121 typename TupleTraits<B>::ParamType b, | 128 typename TupleTraits<B>::ParamType b, |
| 122 typename TupleTraits<C>::ParamType c) | 129 typename TupleTraits<C>::ParamType c) |
| 123 : a(a), b(b), c(c){ | 130 : a(a), b(b), c(c){ |
| 124 } | 131 } |
| 125 | 132 |
| 126 A a; | 133 A a; |
| 127 B b; | 134 B b; |
| 128 C c; | 135 C c; |
| 129 }; | 136 }; |
| 130 | 137 |
| 131 template <class A, class B, class C, class D> | 138 template <class A, class B, class C, class D> |
| 132 struct Tuple4 { | 139 struct Tuple4 { |
| 133 public: | 140 public: |
| 134 typedef A TypeA; | 141 typedef A TypeA; |
| 135 typedef B TypeB; | 142 typedef B TypeB; |
| 136 typedef C TypeC; | 143 typedef C TypeC; |
| 137 typedef D TypeD; | 144 typedef D TypeD; |
| 138 typedef Tuple4<typename TupleTraits<A>::ValueType, | 145 typedef Tuple4<typename TupleTraits<A>::ValueType, |
| 139 typename TupleTraits<B>::ValueType, | 146 typename TupleTraits<B>::ValueType, |
| 140 typename TupleTraits<C>::ValueType, | 147 typename TupleTraits<C>::ValueType, |
| 141 typename TupleTraits<D>::ValueType> ValueTuple; | 148 typename TupleTraits<D>::ValueType> ValueTuple; |
| 142 typedef Tuple4<typename TupleTraits<A>::RefType, | 149 typedef Tuple4<typename TupleTraits<A>::RefType, |
| 143 typename TupleTraits<B>::RefType, | 150 typename TupleTraits<B>::RefType, |
| 144 typename TupleTraits<C>::RefType, | 151 typename TupleTraits<C>::RefType, |
| 145 typename TupleTraits<D>::RefType> RefTuple; | 152 typename TupleTraits<D>::RefType> RefTuple; |
| 153 typedef Tuple4<typename TupleTraits<A>::ParamType, |
| 154 typename TupleTraits<B>::ParamType, |
| 155 typename TupleTraits<C>::ParamType, |
| 156 typename TupleTraits<D>::ParamType> ParamTuple; |
| 146 | 157 |
| 147 Tuple4() {} | 158 Tuple4() {} |
| 148 Tuple4(typename TupleTraits<A>::ParamType a, | 159 Tuple4(typename TupleTraits<A>::ParamType a, |
| 149 typename TupleTraits<B>::ParamType b, | 160 typename TupleTraits<B>::ParamType b, |
| 150 typename TupleTraits<C>::ParamType c, | 161 typename TupleTraits<C>::ParamType c, |
| 151 typename TupleTraits<D>::ParamType d) | 162 typename TupleTraits<D>::ParamType d) |
| 152 : a(a), b(b), c(c), d(d) { | 163 : a(a), b(b), c(c), d(d) { |
| 153 } | 164 } |
| 154 | 165 |
| 155 A a; | 166 A a; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 169 typedef Tuple5<typename TupleTraits<A>::ValueType, | 180 typedef Tuple5<typename TupleTraits<A>::ValueType, |
| 170 typename TupleTraits<B>::ValueType, | 181 typename TupleTraits<B>::ValueType, |
| 171 typename TupleTraits<C>::ValueType, | 182 typename TupleTraits<C>::ValueType, |
| 172 typename TupleTraits<D>::ValueType, | 183 typename TupleTraits<D>::ValueType, |
| 173 typename TupleTraits<E>::ValueType> ValueTuple; | 184 typename TupleTraits<E>::ValueType> ValueTuple; |
| 174 typedef Tuple5<typename TupleTraits<A>::RefType, | 185 typedef Tuple5<typename TupleTraits<A>::RefType, |
| 175 typename TupleTraits<B>::RefType, | 186 typename TupleTraits<B>::RefType, |
| 176 typename TupleTraits<C>::RefType, | 187 typename TupleTraits<C>::RefType, |
| 177 typename TupleTraits<D>::RefType, | 188 typename TupleTraits<D>::RefType, |
| 178 typename TupleTraits<E>::RefType> RefTuple; | 189 typename TupleTraits<E>::RefType> RefTuple; |
| 190 typedef Tuple5<typename TupleTraits<A>::ParamType, |
| 191 typename TupleTraits<B>::ParamType, |
| 192 typename TupleTraits<C>::ParamType, |
| 193 typename TupleTraits<D>::ParamType, |
| 194 typename TupleTraits<E>::ParamType> ParamTuple; |
| 179 | 195 |
| 180 Tuple5() {} | 196 Tuple5() {} |
| 181 Tuple5(typename TupleTraits<A>::ParamType a, | 197 Tuple5(typename TupleTraits<A>::ParamType a, |
| 182 typename TupleTraits<B>::ParamType b, | 198 typename TupleTraits<B>::ParamType b, |
| 183 typename TupleTraits<C>::ParamType c, | 199 typename TupleTraits<C>::ParamType c, |
| 184 typename TupleTraits<D>::ParamType d, | 200 typename TupleTraits<D>::ParamType d, |
| 185 typename TupleTraits<E>::ParamType e) | 201 typename TupleTraits<E>::ParamType e) |
| 186 : a(a), b(b), c(c), d(d), e(e) { | 202 : a(a), b(b), c(c), d(d), e(e) { |
| 187 } | 203 } |
| 188 | 204 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 207 typename TupleTraits<C>::ValueType, | 223 typename TupleTraits<C>::ValueType, |
| 208 typename TupleTraits<D>::ValueType, | 224 typename TupleTraits<D>::ValueType, |
| 209 typename TupleTraits<E>::ValueType, | 225 typename TupleTraits<E>::ValueType, |
| 210 typename TupleTraits<F>::ValueType> ValueTuple; | 226 typename TupleTraits<F>::ValueType> ValueTuple; |
| 211 typedef Tuple6<typename TupleTraits<A>::RefType, | 227 typedef Tuple6<typename TupleTraits<A>::RefType, |
| 212 typename TupleTraits<B>::RefType, | 228 typename TupleTraits<B>::RefType, |
| 213 typename TupleTraits<C>::RefType, | 229 typename TupleTraits<C>::RefType, |
| 214 typename TupleTraits<D>::RefType, | 230 typename TupleTraits<D>::RefType, |
| 215 typename TupleTraits<E>::RefType, | 231 typename TupleTraits<E>::RefType, |
| 216 typename TupleTraits<F>::RefType> RefTuple; | 232 typename TupleTraits<F>::RefType> RefTuple; |
| 233 typedef Tuple6<typename TupleTraits<A>::ParamType, |
| 234 typename TupleTraits<B>::ParamType, |
| 235 typename TupleTraits<C>::ParamType, |
| 236 typename TupleTraits<D>::ParamType, |
| 237 typename TupleTraits<E>::ParamType, |
| 238 typename TupleTraits<F>::ParamType> ParamTuple; |
| 217 | 239 |
| 218 Tuple6() {} | 240 Tuple6() {} |
| 219 Tuple6(typename TupleTraits<A>::ParamType a, | 241 Tuple6(typename TupleTraits<A>::ParamType a, |
| 220 typename TupleTraits<B>::ParamType b, | 242 typename TupleTraits<B>::ParamType b, |
| 221 typename TupleTraits<C>::ParamType c, | 243 typename TupleTraits<C>::ParamType c, |
| 222 typename TupleTraits<D>::ParamType d, | 244 typename TupleTraits<D>::ParamType d, |
| 223 typename TupleTraits<E>::ParamType e, | 245 typename TupleTraits<E>::ParamType e, |
| 224 typename TupleTraits<F>::ParamType f) | 246 typename TupleTraits<F>::ParamType f) |
| 225 : a(a), b(b), c(c), d(d), e(e), f(f) { | 247 : a(a), b(b), c(c), d(d), e(e), f(f) { |
| 226 } | 248 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 250 typename TupleTraits<E>::ValueType, | 272 typename TupleTraits<E>::ValueType, |
| 251 typename TupleTraits<F>::ValueType, | 273 typename TupleTraits<F>::ValueType, |
| 252 typename TupleTraits<G>::ValueType> ValueTuple; | 274 typename TupleTraits<G>::ValueType> ValueTuple; |
| 253 typedef Tuple7<typename TupleTraits<A>::RefType, | 275 typedef Tuple7<typename TupleTraits<A>::RefType, |
| 254 typename TupleTraits<B>::RefType, | 276 typename TupleTraits<B>::RefType, |
| 255 typename TupleTraits<C>::RefType, | 277 typename TupleTraits<C>::RefType, |
| 256 typename TupleTraits<D>::RefType, | 278 typename TupleTraits<D>::RefType, |
| 257 typename TupleTraits<E>::RefType, | 279 typename TupleTraits<E>::RefType, |
| 258 typename TupleTraits<F>::RefType, | 280 typename TupleTraits<F>::RefType, |
| 259 typename TupleTraits<G>::RefType> RefTuple; | 281 typename TupleTraits<G>::RefType> RefTuple; |
| 282 typedef Tuple7<typename TupleTraits<A>::ParamType, |
| 283 typename TupleTraits<B>::ParamType, |
| 284 typename TupleTraits<C>::ParamType, |
| 285 typename TupleTraits<D>::ParamType, |
| 286 typename TupleTraits<E>::ParamType, |
| 287 typename TupleTraits<F>::ParamType, |
| 288 typename TupleTraits<G>::ParamType> ParamTuple; |
| 260 | 289 |
| 261 Tuple7() {} | 290 Tuple7() {} |
| 262 Tuple7(typename TupleTraits<A>::ParamType a, | 291 Tuple7(typename TupleTraits<A>::ParamType a, |
| 263 typename TupleTraits<B>::ParamType b, | 292 typename TupleTraits<B>::ParamType b, |
| 264 typename TupleTraits<C>::ParamType c, | 293 typename TupleTraits<C>::ParamType c, |
| 265 typename TupleTraits<D>::ParamType d, | 294 typename TupleTraits<D>::ParamType d, |
| 266 typename TupleTraits<E>::ParamType e, | 295 typename TupleTraits<E>::ParamType e, |
| 267 typename TupleTraits<F>::ParamType f, | 296 typename TupleTraits<F>::ParamType f, |
| 268 typename TupleTraits<G>::ParamType g) | 297 typename TupleTraits<G>::ParamType g) |
| 269 : a(a), b(b), c(c), d(d), e(e), f(f), g(g) { | 298 : a(a), b(b), c(c), d(d), e(e), f(f), g(g) { |
| (...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 869 class InA, class InB, class InC, class InD, class InE, class InF, | 898 class InA, class InB, class InC, class InD, class InE, class InF, |
| 870 class OutA, class OutB, class OutC, class OutD, class OutE> | 899 class OutA, class OutB, class OutC, class OutD, class OutE> |
| 871 inline void DispatchToMethod(ObjT* obj, Method method, | 900 inline void DispatchToMethod(ObjT* obj, Method method, |
| 872 const Tuple6<InA, InB, InC, InD, InE, InF>& in, | 901 const Tuple6<InA, InB, InC, InD, InE, InF>& in, |
| 873 Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { | 902 Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
| 874 (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, | 903 (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, |
| 875 &out->a, &out->b, &out->c, &out->d, &out->e); | 904 &out->a, &out->b, &out->c, &out->d, &out->e); |
| 876 } | 905 } |
| 877 | 906 |
| 878 #endif // BASE_TUPLE_H__ | 907 #endif // BASE_TUPLE_H__ |
| OLD | NEW |