Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Side by Side Diff: base/tuple.h

Issue 112042: Prevent an extra copy of data types that get passed into IPC messages when... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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__
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698