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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 typedef const P& ParamType; | 45 typedef const P& ParamType; |
46 }; | 46 }; |
47 | 47 |
48 template <class P> | 48 template <class P> |
49 struct TupleTraits<P&> { | 49 struct TupleTraits<P&> { |
50 typedef P ValueType; | 50 typedef P ValueType; |
51 typedef P& RefType; | 51 typedef P& RefType; |
52 typedef P& ParamType; | 52 typedef P& ParamType; |
53 }; | 53 }; |
54 | 54 |
55 template <class P> | |
56 struct TupleTypes { }; | |
57 | |
58 // Tuple ----------------------------------------------------------------------- | 55 // Tuple ----------------------------------------------------------------------- |
59 // | 56 // |
60 // This set of classes is useful for bundling 0 or more heterogeneous data types | 57 // This set of classes is useful for bundling 0 or more heterogeneous data types |
61 // into a single variable. The advantage of this is that it greatly simplifies | 58 // into a single variable. The advantage of this is that it greatly simplifies |
62 // function objects that need to take an arbitrary number of parameters; see | 59 // function objects that need to take an arbitrary number of parameters; see |
63 // RunnableMethod and IPC::MessageWithTuple. | 60 // RunnableMethod and IPC::MessageWithTuple. |
64 // | 61 // |
65 // Tuple0 is supplied to act as a 'void' type. It can be used, for example, | 62 // Tuple0 is supplied to act as a 'void' type. It can be used, for example, |
66 // when dispatching to a function that accepts no arguments (see the | 63 // when dispatching to a function that accepts no arguments (see the |
67 // Dispatchers below). | 64 // Dispatchers below). |
68 // Tuple1<A> is rarely useful. One such use is when A is non-const ref that you | 65 // Tuple1<A> is rarely useful. One such use is when A is non-const ref that you |
69 // want filled by the dispatchee, and the tuple is merely a container for that | 66 // want filled by the dispatchee, and the tuple is merely a container for that |
70 // output (a "tier"). See MakeRefTuple and its usages. | 67 // output (a "tier"). See MakeRefTuple and its usages. |
71 | 68 |
72 struct Tuple0 { | 69 struct Tuple0 { |
73 typedef Tuple0 ValueTuple; | 70 typedef Tuple0 ValueTuple; |
74 typedef Tuple0 RefTuple; | 71 typedef Tuple0 RefTuple; |
75 typedef Tuple0 ParamTuple; | 72 typedef Tuple0 ParamTuple; |
76 }; | 73 }; |
77 | 74 |
78 template <class A> | 75 template <class A> |
79 struct Tuple1 { | 76 struct Tuple1 { |
80 public: | 77 public: |
81 typedef A TypeA; | 78 typedef A TypeA; |
| 79 typedef Tuple1<typename TupleTraits<A>::ValueType> ValueTuple; |
| 80 typedef Tuple1<typename TupleTraits<A>::RefType> RefTuple; |
| 81 typedef Tuple1<typename TupleTraits<A>::ParamType> ParamTuple; |
82 | 82 |
83 Tuple1() {} | 83 Tuple1() {} |
84 explicit Tuple1(typename TupleTraits<A>::ParamType a) : a(a) {} | 84 explicit Tuple1(typename TupleTraits<A>::ParamType a) : a(a) {} |
85 | 85 |
86 A a; | 86 A a; |
87 }; | 87 }; |
88 | 88 |
89 template <class A, class B> | 89 template <class A, class B> |
90 struct Tuple2 { | 90 struct Tuple2 { |
91 public: | 91 public: |
92 typedef A TypeA; | 92 typedef A TypeA; |
93 typedef B TypeB; | 93 typedef B TypeB; |
| 94 typedef Tuple2<typename TupleTraits<A>::ValueType, |
| 95 typename TupleTraits<B>::ValueType> ValueTuple; |
| 96 typedef Tuple2<typename TupleTraits<A>::RefType, |
| 97 typename TupleTraits<B>::RefType> RefTuple; |
| 98 typedef Tuple2<typename TupleTraits<A>::ParamType, |
| 99 typename TupleTraits<B>::ParamType> ParamTuple; |
94 | 100 |
95 Tuple2() {} | 101 Tuple2() {} |
96 Tuple2(typename TupleTraits<A>::ParamType a, | 102 Tuple2(typename TupleTraits<A>::ParamType a, |
97 typename TupleTraits<B>::ParamType b) | 103 typename TupleTraits<B>::ParamType b) |
98 : a(a), b(b) { | 104 : a(a), b(b) { |
99 } | 105 } |
100 | 106 |
101 A a; | 107 A a; |
102 B b; | 108 B b; |
103 }; | 109 }; |
104 | 110 |
105 template <class A, class B, class C> | 111 template <class A, class B, class C> |
106 struct Tuple3 { | 112 struct Tuple3 { |
107 public: | 113 public: |
108 typedef A TypeA; | 114 typedef A TypeA; |
109 typedef B TypeB; | 115 typedef B TypeB; |
110 typedef C TypeC; | 116 typedef C TypeC; |
| 117 typedef Tuple3<typename TupleTraits<A>::ValueType, |
| 118 typename TupleTraits<B>::ValueType, |
| 119 typename TupleTraits<C>::ValueType> ValueTuple; |
| 120 typedef Tuple3<typename TupleTraits<A>::RefType, |
| 121 typename TupleTraits<B>::RefType, |
| 122 typename TupleTraits<C>::RefType> RefTuple; |
| 123 typedef Tuple3<typename TupleTraits<A>::ParamType, |
| 124 typename TupleTraits<B>::ParamType, |
| 125 typename TupleTraits<C>::ParamType> ParamTuple; |
111 | 126 |
112 Tuple3() {} | 127 Tuple3() {} |
113 Tuple3(typename TupleTraits<A>::ParamType a, | 128 Tuple3(typename TupleTraits<A>::ParamType a, |
114 typename TupleTraits<B>::ParamType b, | 129 typename TupleTraits<B>::ParamType b, |
115 typename TupleTraits<C>::ParamType c) | 130 typename TupleTraits<C>::ParamType c) |
116 : a(a), b(b), c(c){ | 131 : a(a), b(b), c(c){ |
117 } | 132 } |
118 | 133 |
119 A a; | 134 A a; |
120 B b; | 135 B b; |
121 C c; | 136 C c; |
122 }; | 137 }; |
123 | 138 |
124 template <class A, class B, class C, class D> | 139 template <class A, class B, class C, class D> |
125 struct Tuple4 { | 140 struct Tuple4 { |
126 public: | 141 public: |
127 typedef A TypeA; | 142 typedef A TypeA; |
128 typedef B TypeB; | 143 typedef B TypeB; |
129 typedef C TypeC; | 144 typedef C TypeC; |
130 typedef D TypeD; | 145 typedef D TypeD; |
| 146 typedef Tuple4<typename TupleTraits<A>::ValueType, |
| 147 typename TupleTraits<B>::ValueType, |
| 148 typename TupleTraits<C>::ValueType, |
| 149 typename TupleTraits<D>::ValueType> ValueTuple; |
| 150 typedef Tuple4<typename TupleTraits<A>::RefType, |
| 151 typename TupleTraits<B>::RefType, |
| 152 typename TupleTraits<C>::RefType, |
| 153 typename TupleTraits<D>::RefType> RefTuple; |
| 154 typedef Tuple4<typename TupleTraits<A>::ParamType, |
| 155 typename TupleTraits<B>::ParamType, |
| 156 typename TupleTraits<C>::ParamType, |
| 157 typename TupleTraits<D>::ParamType> ParamTuple; |
131 | 158 |
132 Tuple4() {} | 159 Tuple4() {} |
133 Tuple4(typename TupleTraits<A>::ParamType a, | 160 Tuple4(typename TupleTraits<A>::ParamType a, |
134 typename TupleTraits<B>::ParamType b, | 161 typename TupleTraits<B>::ParamType b, |
135 typename TupleTraits<C>::ParamType c, | 162 typename TupleTraits<C>::ParamType c, |
136 typename TupleTraits<D>::ParamType d) | 163 typename TupleTraits<D>::ParamType d) |
137 : a(a), b(b), c(c), d(d) { | 164 : a(a), b(b), c(c), d(d) { |
138 } | 165 } |
139 | 166 |
140 A a; | 167 A a; |
141 B b; | 168 B b; |
142 C c; | 169 C c; |
143 D d; | 170 D d; |
144 }; | 171 }; |
145 | 172 |
146 template <class A, class B, class C, class D, class E> | 173 template <class A, class B, class C, class D, class E> |
147 struct Tuple5 { | 174 struct Tuple5 { |
148 public: | 175 public: |
149 typedef A TypeA; | 176 typedef A TypeA; |
150 typedef B TypeB; | 177 typedef B TypeB; |
151 typedef C TypeC; | 178 typedef C TypeC; |
152 typedef D TypeD; | 179 typedef D TypeD; |
153 typedef E TypeE; | 180 typedef E TypeE; |
| 181 typedef Tuple5<typename TupleTraits<A>::ValueType, |
| 182 typename TupleTraits<B>::ValueType, |
| 183 typename TupleTraits<C>::ValueType, |
| 184 typename TupleTraits<D>::ValueType, |
| 185 typename TupleTraits<E>::ValueType> ValueTuple; |
| 186 typedef Tuple5<typename TupleTraits<A>::RefType, |
| 187 typename TupleTraits<B>::RefType, |
| 188 typename TupleTraits<C>::RefType, |
| 189 typename TupleTraits<D>::RefType, |
| 190 typename TupleTraits<E>::RefType> RefTuple; |
| 191 typedef Tuple5<typename TupleTraits<A>::ParamType, |
| 192 typename TupleTraits<B>::ParamType, |
| 193 typename TupleTraits<C>::ParamType, |
| 194 typename TupleTraits<D>::ParamType, |
| 195 typename TupleTraits<E>::ParamType> ParamTuple; |
154 | 196 |
155 Tuple5() {} | 197 Tuple5() {} |
156 Tuple5(typename TupleTraits<A>::ParamType a, | 198 Tuple5(typename TupleTraits<A>::ParamType a, |
157 typename TupleTraits<B>::ParamType b, | 199 typename TupleTraits<B>::ParamType b, |
158 typename TupleTraits<C>::ParamType c, | 200 typename TupleTraits<C>::ParamType c, |
159 typename TupleTraits<D>::ParamType d, | 201 typename TupleTraits<D>::ParamType d, |
160 typename TupleTraits<E>::ParamType e) | 202 typename TupleTraits<E>::ParamType e) |
161 : a(a), b(b), c(c), d(d), e(e) { | 203 : a(a), b(b), c(c), d(d), e(e) { |
162 } | 204 } |
163 | 205 |
164 A a; | 206 A a; |
165 B b; | 207 B b; |
166 C c; | 208 C c; |
167 D d; | 209 D d; |
168 E e; | 210 E e; |
169 }; | 211 }; |
170 | 212 |
171 template <class A, class B, class C, class D, class E, class F> | 213 template <class A, class B, class C, class D, class E, class F> |
172 struct Tuple6 { | 214 struct Tuple6 { |
173 public: | 215 public: |
174 typedef A TypeA; | 216 typedef A TypeA; |
175 typedef B TypeB; | 217 typedef B TypeB; |
176 typedef C TypeC; | 218 typedef C TypeC; |
177 typedef D TypeD; | 219 typedef D TypeD; |
178 typedef E TypeE; | 220 typedef E TypeE; |
179 typedef F TypeF; | 221 typedef F TypeF; |
| 222 typedef Tuple6<typename TupleTraits<A>::ValueType, |
| 223 typename TupleTraits<B>::ValueType, |
| 224 typename TupleTraits<C>::ValueType, |
| 225 typename TupleTraits<D>::ValueType, |
| 226 typename TupleTraits<E>::ValueType, |
| 227 typename TupleTraits<F>::ValueType> ValueTuple; |
| 228 typedef Tuple6<typename TupleTraits<A>::RefType, |
| 229 typename TupleTraits<B>::RefType, |
| 230 typename TupleTraits<C>::RefType, |
| 231 typename TupleTraits<D>::RefType, |
| 232 typename TupleTraits<E>::RefType, |
| 233 typename TupleTraits<F>::RefType> RefTuple; |
| 234 typedef Tuple6<typename TupleTraits<A>::ParamType, |
| 235 typename TupleTraits<B>::ParamType, |
| 236 typename TupleTraits<C>::ParamType, |
| 237 typename TupleTraits<D>::ParamType, |
| 238 typename TupleTraits<E>::ParamType, |
| 239 typename TupleTraits<F>::ParamType> ParamTuple; |
180 | 240 |
181 Tuple6() {} | 241 Tuple6() {} |
182 Tuple6(typename TupleTraits<A>::ParamType a, | 242 Tuple6(typename TupleTraits<A>::ParamType a, |
183 typename TupleTraits<B>::ParamType b, | 243 typename TupleTraits<B>::ParamType b, |
184 typename TupleTraits<C>::ParamType c, | 244 typename TupleTraits<C>::ParamType c, |
185 typename TupleTraits<D>::ParamType d, | 245 typename TupleTraits<D>::ParamType d, |
186 typename TupleTraits<E>::ParamType e, | 246 typename TupleTraits<E>::ParamType e, |
187 typename TupleTraits<F>::ParamType f) | 247 typename TupleTraits<F>::ParamType f) |
188 : a(a), b(b), c(c), d(d), e(e), f(f) { | 248 : a(a), b(b), c(c), d(d), e(e), f(f) { |
189 } | 249 } |
190 | 250 |
191 A a; | 251 A a; |
192 B b; | 252 B b; |
193 C c; | 253 C c; |
194 D d; | 254 D d; |
195 E e; | 255 E e; |
196 F f; | 256 F f; |
197 }; | 257 }; |
198 | 258 |
199 template <class A, class B, class C, class D, class E, class F, class G> | 259 template <class A, class B, class C, class D, class E, class F, class G> |
200 struct Tuple7 { | 260 struct Tuple7 { |
201 public: | 261 public: |
202 typedef A TypeA; | 262 typedef A TypeA; |
203 typedef B TypeB; | 263 typedef B TypeB; |
204 typedef C TypeC; | 264 typedef C TypeC; |
205 typedef D TypeD; | 265 typedef D TypeD; |
206 typedef E TypeE; | 266 typedef E TypeE; |
207 typedef F TypeF; | 267 typedef F TypeF; |
208 typedef G TypeG; | 268 typedef G TypeG; |
| 269 typedef Tuple7<typename TupleTraits<A>::ValueType, |
| 270 typename TupleTraits<B>::ValueType, |
| 271 typename TupleTraits<C>::ValueType, |
| 272 typename TupleTraits<D>::ValueType, |
| 273 typename TupleTraits<E>::ValueType, |
| 274 typename TupleTraits<F>::ValueType, |
| 275 typename TupleTraits<G>::ValueType> ValueTuple; |
| 276 typedef Tuple7<typename TupleTraits<A>::RefType, |
| 277 typename TupleTraits<B>::RefType, |
| 278 typename TupleTraits<C>::RefType, |
| 279 typename TupleTraits<D>::RefType, |
| 280 typename TupleTraits<E>::RefType, |
| 281 typename TupleTraits<F>::RefType, |
| 282 typename TupleTraits<G>::RefType> RefTuple; |
| 283 typedef Tuple7<typename TupleTraits<A>::ParamType, |
| 284 typename TupleTraits<B>::ParamType, |
| 285 typename TupleTraits<C>::ParamType, |
| 286 typename TupleTraits<D>::ParamType, |
| 287 typename TupleTraits<E>::ParamType, |
| 288 typename TupleTraits<F>::ParamType, |
| 289 typename TupleTraits<G>::ParamType> ParamTuple; |
209 | 290 |
210 Tuple7() {} | 291 Tuple7() {} |
211 Tuple7(typename TupleTraits<A>::ParamType a, | 292 Tuple7(typename TupleTraits<A>::ParamType a, |
212 typename TupleTraits<B>::ParamType b, | 293 typename TupleTraits<B>::ParamType b, |
213 typename TupleTraits<C>::ParamType c, | 294 typename TupleTraits<C>::ParamType c, |
214 typename TupleTraits<D>::ParamType d, | 295 typename TupleTraits<D>::ParamType d, |
215 typename TupleTraits<E>::ParamType e, | 296 typename TupleTraits<E>::ParamType e, |
216 typename TupleTraits<F>::ParamType f, | 297 typename TupleTraits<F>::ParamType f, |
217 typename TupleTraits<G>::ParamType g) | 298 typename TupleTraits<G>::ParamType g) |
218 : a(a), b(b), c(c), d(d), e(e), f(f), g(g) { | 299 : a(a), b(b), c(c), d(d), e(e), f(f), g(g) { |
(...skipping 13 matching lines...) Expand all Loading... |
232 struct Tuple8 { | 313 struct Tuple8 { |
233 public: | 314 public: |
234 typedef A TypeA; | 315 typedef A TypeA; |
235 typedef B TypeB; | 316 typedef B TypeB; |
236 typedef C TypeC; | 317 typedef C TypeC; |
237 typedef D TypeD; | 318 typedef D TypeD; |
238 typedef E TypeE; | 319 typedef E TypeE; |
239 typedef F TypeF; | 320 typedef F TypeF; |
240 typedef G TypeG; | 321 typedef G TypeG; |
241 typedef H TypeH; | 322 typedef H TypeH; |
| 323 typedef Tuple8<typename TupleTraits<A>::ValueType, |
| 324 typename TupleTraits<B>::ValueType, |
| 325 typename TupleTraits<C>::ValueType, |
| 326 typename TupleTraits<D>::ValueType, |
| 327 typename TupleTraits<E>::ValueType, |
| 328 typename TupleTraits<F>::ValueType, |
| 329 typename TupleTraits<G>::ValueType, |
| 330 typename TupleTraits<H>::ValueType> ValueTuple; |
| 331 typedef Tuple8<typename TupleTraits<A>::RefType, |
| 332 typename TupleTraits<B>::RefType, |
| 333 typename TupleTraits<C>::RefType, |
| 334 typename TupleTraits<D>::RefType, |
| 335 typename TupleTraits<E>::RefType, |
| 336 typename TupleTraits<F>::RefType, |
| 337 typename TupleTraits<G>::RefType, |
| 338 typename TupleTraits<H>::RefType> RefTuple; |
| 339 typedef Tuple8<typename TupleTraits<A>::ParamType, |
| 340 typename TupleTraits<B>::ParamType, |
| 341 typename TupleTraits<C>::ParamType, |
| 342 typename TupleTraits<D>::ParamType, |
| 343 typename TupleTraits<E>::ParamType, |
| 344 typename TupleTraits<F>::ParamType, |
| 345 typename TupleTraits<G>::ParamType, |
| 346 typename TupleTraits<H>::ParamType> ParamTuple; |
242 | 347 |
243 Tuple8() {} | 348 Tuple8() {} |
244 Tuple8(typename TupleTraits<A>::ParamType a, | 349 Tuple8(typename TupleTraits<A>::ParamType a, |
245 typename TupleTraits<B>::ParamType b, | 350 typename TupleTraits<B>::ParamType b, |
246 typename TupleTraits<C>::ParamType c, | 351 typename TupleTraits<C>::ParamType c, |
247 typename TupleTraits<D>::ParamType d, | 352 typename TupleTraits<D>::ParamType d, |
248 typename TupleTraits<E>::ParamType e, | 353 typename TupleTraits<E>::ParamType e, |
249 typename TupleTraits<F>::ParamType f, | 354 typename TupleTraits<F>::ParamType f, |
250 typename TupleTraits<G>::ParamType g, | 355 typename TupleTraits<G>::ParamType g, |
251 typename TupleTraits<H>::ParamType h) | 356 typename TupleTraits<H>::ParamType h) |
252 : a(a), b(b), c(c), d(d), e(e), f(f), g(g), h(h) { | 357 : a(a), b(b), c(c), d(d), e(e), f(f), g(g), h(h) { |
253 } | 358 } |
254 | 359 |
255 A a; | 360 A a; |
256 B b; | 361 B b; |
257 C c; | 362 C c; |
258 D d; | 363 D d; |
259 E e; | 364 E e; |
260 F f; | 365 F f; |
261 G g; | 366 G g; |
262 H h; | 367 H h; |
263 }; | 368 }; |
264 | 369 |
265 // Tuple types ---------------------------------------------------------------- | |
266 // | |
267 // Allows for selection of ValueTuple/RefTuple/ParamTuple without needing the | |
268 // definitions of class types the tuple takes as parameters. | |
269 | |
270 template <> | |
271 struct TupleTypes< Tuple0 > { | |
272 typedef Tuple0 ValueTuple; | |
273 typedef Tuple0 RefTuple; | |
274 typedef Tuple0 ParamTuple; | |
275 }; | |
276 | |
277 template <class A> | |
278 struct TupleTypes< Tuple1<A> > { | |
279 typedef Tuple1<typename TupleTraits<A>::ValueType> ValueTuple; | |
280 typedef Tuple1<typename TupleTraits<A>::RefType> RefTuple; | |
281 typedef Tuple1<typename TupleTraits<A>::ParamType> ParamTuple; | |
282 }; | |
283 | |
284 template <class A, class B> | |
285 struct TupleTypes< Tuple2<A, B> > { | |
286 typedef Tuple2<typename TupleTraits<A>::ValueType, | |
287 typename TupleTraits<B>::ValueType> ValueTuple; | |
288 typedef Tuple2<typename TupleTraits<A>::RefType, | |
289 typename TupleTraits<B>::RefType> RefTuple; | |
290 typedef Tuple2<typename TupleTraits<A>::ParamType, | |
291 typename TupleTraits<B>::ParamType> ParamTuple; | |
292 }; | |
293 | |
294 template <class A, class B, class C> | |
295 struct TupleTypes< Tuple3<A, B, C> > { | |
296 typedef Tuple3<typename TupleTraits<A>::ValueType, | |
297 typename TupleTraits<B>::ValueType, | |
298 typename TupleTraits<C>::ValueType> ValueTuple; | |
299 typedef Tuple3<typename TupleTraits<A>::RefType, | |
300 typename TupleTraits<B>::RefType, | |
301 typename TupleTraits<C>::RefType> RefTuple; | |
302 typedef Tuple3<typename TupleTraits<A>::ParamType, | |
303 typename TupleTraits<B>::ParamType, | |
304 typename TupleTraits<C>::ParamType> ParamTuple; | |
305 }; | |
306 | |
307 template <class A, class B, class C, class D> | |
308 struct TupleTypes< Tuple4<A, B, C, D> > { | |
309 typedef Tuple4<typename TupleTraits<A>::ValueType, | |
310 typename TupleTraits<B>::ValueType, | |
311 typename TupleTraits<C>::ValueType, | |
312 typename TupleTraits<D>::ValueType> ValueTuple; | |
313 typedef Tuple4<typename TupleTraits<A>::RefType, | |
314 typename TupleTraits<B>::RefType, | |
315 typename TupleTraits<C>::RefType, | |
316 typename TupleTraits<D>::RefType> RefTuple; | |
317 typedef Tuple4<typename TupleTraits<A>::ParamType, | |
318 typename TupleTraits<B>::ParamType, | |
319 typename TupleTraits<C>::ParamType, | |
320 typename TupleTraits<D>::ParamType> ParamTuple; | |
321 }; | |
322 | |
323 template <class A, class B, class C, class D, class E> | |
324 struct TupleTypes< Tuple5<A, B, C, D, E> > { | |
325 typedef Tuple5<typename TupleTraits<A>::ValueType, | |
326 typename TupleTraits<B>::ValueType, | |
327 typename TupleTraits<C>::ValueType, | |
328 typename TupleTraits<D>::ValueType, | |
329 typename TupleTraits<E>::ValueType> ValueTuple; | |
330 typedef Tuple5<typename TupleTraits<A>::RefType, | |
331 typename TupleTraits<B>::RefType, | |
332 typename TupleTraits<C>::RefType, | |
333 typename TupleTraits<D>::RefType, | |
334 typename TupleTraits<E>::RefType> RefTuple; | |
335 typedef Tuple5<typename TupleTraits<A>::ParamType, | |
336 typename TupleTraits<B>::ParamType, | |
337 typename TupleTraits<C>::ParamType, | |
338 typename TupleTraits<D>::ParamType, | |
339 typename TupleTraits<E>::ParamType> ParamTuple; | |
340 }; | |
341 | |
342 template <class A, class B, class C, class D, class E, class F> | |
343 struct TupleTypes< Tuple6<A, B, C, D, E, F> > { | |
344 typedef Tuple6<typename TupleTraits<A>::ValueType, | |
345 typename TupleTraits<B>::ValueType, | |
346 typename TupleTraits<C>::ValueType, | |
347 typename TupleTraits<D>::ValueType, | |
348 typename TupleTraits<E>::ValueType, | |
349 typename TupleTraits<F>::ValueType> ValueTuple; | |
350 typedef Tuple6<typename TupleTraits<A>::RefType, | |
351 typename TupleTraits<B>::RefType, | |
352 typename TupleTraits<C>::RefType, | |
353 typename TupleTraits<D>::RefType, | |
354 typename TupleTraits<E>::RefType, | |
355 typename TupleTraits<F>::RefType> RefTuple; | |
356 typedef Tuple6<typename TupleTraits<A>::ParamType, | |
357 typename TupleTraits<B>::ParamType, | |
358 typename TupleTraits<C>::ParamType, | |
359 typename TupleTraits<D>::ParamType, | |
360 typename TupleTraits<E>::ParamType, | |
361 typename TupleTraits<F>::ParamType> ParamTuple; | |
362 }; | |
363 | |
364 template <class A, class B, class C, class D, class E, class F, class G> | |
365 struct TupleTypes< Tuple7<A, B, C, D, E, F, G> > { | |
366 typedef Tuple7<typename TupleTraits<A>::ValueType, | |
367 typename TupleTraits<B>::ValueType, | |
368 typename TupleTraits<C>::ValueType, | |
369 typename TupleTraits<D>::ValueType, | |
370 typename TupleTraits<E>::ValueType, | |
371 typename TupleTraits<F>::ValueType, | |
372 typename TupleTraits<G>::ValueType> ValueTuple; | |
373 typedef Tuple7<typename TupleTraits<A>::RefType, | |
374 typename TupleTraits<B>::RefType, | |
375 typename TupleTraits<C>::RefType, | |
376 typename TupleTraits<D>::RefType, | |
377 typename TupleTraits<E>::RefType, | |
378 typename TupleTraits<F>::RefType, | |
379 typename TupleTraits<G>::RefType> RefTuple; | |
380 typedef Tuple7<typename TupleTraits<A>::ParamType, | |
381 typename TupleTraits<B>::ParamType, | |
382 typename TupleTraits<C>::ParamType, | |
383 typename TupleTraits<D>::ParamType, | |
384 typename TupleTraits<E>::ParamType, | |
385 typename TupleTraits<F>::ParamType, | |
386 typename TupleTraits<G>::ParamType> ParamTuple; | |
387 }; | |
388 | |
389 template <class A, class B, class C, class D, class E, class F, class G, | |
390 class H> | |
391 struct TupleTypes< Tuple8<A, B, C, D, E, F, G, H> > { | |
392 typedef Tuple8<typename TupleTraits<A>::ValueType, | |
393 typename TupleTraits<B>::ValueType, | |
394 typename TupleTraits<C>::ValueType, | |
395 typename TupleTraits<D>::ValueType, | |
396 typename TupleTraits<E>::ValueType, | |
397 typename TupleTraits<F>::ValueType, | |
398 typename TupleTraits<G>::ValueType, | |
399 typename TupleTraits<H>::ValueType> ValueTuple; | |
400 typedef Tuple8<typename TupleTraits<A>::RefType, | |
401 typename TupleTraits<B>::RefType, | |
402 typename TupleTraits<C>::RefType, | |
403 typename TupleTraits<D>::RefType, | |
404 typename TupleTraits<E>::RefType, | |
405 typename TupleTraits<F>::RefType, | |
406 typename TupleTraits<G>::RefType, | |
407 typename TupleTraits<H>::RefType> RefTuple; | |
408 typedef Tuple8<typename TupleTraits<A>::ParamType, | |
409 typename TupleTraits<B>::ParamType, | |
410 typename TupleTraits<C>::ParamType, | |
411 typename TupleTraits<D>::ParamType, | |
412 typename TupleTraits<E>::ParamType, | |
413 typename TupleTraits<F>::ParamType, | |
414 typename TupleTraits<G>::ParamType, | |
415 typename TupleTraits<H>::ParamType> ParamTuple; | |
416 }; | |
417 | |
418 // Tuple creators ------------------------------------------------------------- | 370 // Tuple creators ------------------------------------------------------------- |
419 // | 371 // |
420 // Helper functions for constructing tuples while inferring the template | 372 // Helper functions for constructing tuples while inferring the template |
421 // argument types. | 373 // argument types. |
422 | 374 |
423 inline Tuple0 MakeTuple() { | 375 inline Tuple0 MakeTuple() { |
424 return Tuple0(); | 376 return Tuple0(); |
425 } | 377 } |
426 | 378 |
427 template <class A> | 379 template <class A> |
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1036 class InA, class InB, class InC, class InD, class InE, class InF, | 988 class InA, class InB, class InC, class InD, class InE, class InF, |
1037 class OutA, class OutB, class OutC, class OutD, class OutE> | 989 class OutA, class OutB, class OutC, class OutD, class OutE> |
1038 inline void DispatchToMethod(ObjT* obj, Method method, | 990 inline void DispatchToMethod(ObjT* obj, Method method, |
1039 const Tuple6<InA, InB, InC, InD, InE, InF>& in, | 991 const Tuple6<InA, InB, InC, InD, InE, InF>& in, |
1040 Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { | 992 Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
1041 (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, | 993 (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, |
1042 &out->a, &out->b, &out->c, &out->d, &out->e); | 994 &out->a, &out->b, &out->c, &out->d, &out->e); |
1043 } | 995 } |
1044 | 996 |
1045 #endif // BASE_TUPLE_H__ | 997 #endif // BASE_TUPLE_H__ |
OLD | NEW |