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

Side by Side Diff: base/tuple.h

Issue 1535643002: Remove unused Tuple dispatch functions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « no previous file | no next file » | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // and std::tuple. The convenient MakeTuple() function takes any number of 6 // and std::tuple. The convenient MakeTuple() function takes any number of
7 // arguments and will construct and return the appropriate Tuple object. The 7 // arguments and will construct and return the appropriate Tuple object. The
8 // functions DispatchToMethod and DispatchToFunction take a function pointer or 8 // functions DispatchToMethod and DispatchToFunction take a function pointer or
9 // instance and method pointer, and unpack a tuple into arguments to the call. 9 // instance and method pointer, and unpack a tuple into arguments to the call.
10 // 10 //
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 // 234 //
235 // Helper functions that call the given method on an object, with the unpacked 235 // Helper functions that call the given method on an object, with the unpacked
236 // tuple arguments. Notice that they all have the same number of arguments, 236 // tuple arguments. Notice that they all have the same number of arguments,
237 // so you need only write: 237 // so you need only write:
238 // DispatchToMethod(object, &Object::method, args); 238 // DispatchToMethod(object, &Object::method, args);
239 // This is very useful for templated dispatchers, since they don't need to know 239 // This is very useful for templated dispatchers, since they don't need to know
240 // what type |args| is. 240 // what type |args| is.
241 241
242 // Non-Static Dispatchers with no out params. 242 // Non-Static Dispatchers with no out params.
243 243
244 template <typename ObjT, typename Method, typename A>
245 inline void DispatchToMethod(ObjT* obj, Method method, const A& arg) {
246 (obj->*method)(base::internal::UnwrapTraits<A>::Unwrap(arg));
247 }
248
249 template <typename ObjT, typename Method, typename... Ts, size_t... Ns> 244 template <typename ObjT, typename Method, typename... Ts, size_t... Ns>
250 inline void DispatchToMethodImpl(ObjT* obj, 245 inline void DispatchToMethodImpl(ObjT* obj,
251 Method method, 246 Method method,
252 const Tuple<Ts...>& arg, 247 const Tuple<Ts...>& arg,
253 IndexSequence<Ns...>) { 248 IndexSequence<Ns...>) {
254 (obj->*method)(base::internal::UnwrapTraits<Ts>::Unwrap(get<Ns>(arg))...); 249 (obj->*method)(base::internal::UnwrapTraits<Ts>::Unwrap(get<Ns>(arg))...);
255 } 250 }
256 251
257 template <typename ObjT, typename Method, typename... Ts> 252 template <typename ObjT, typename Method, typename... Ts>
258 inline void DispatchToMethod(ObjT* obj, 253 inline void DispatchToMethod(ObjT* obj,
259 Method method, 254 Method method,
260 const Tuple<Ts...>& arg) { 255 const Tuple<Ts...>& arg) {
261 DispatchToMethodImpl(obj, method, arg, MakeIndexSequence<sizeof...(Ts)>()); 256 DispatchToMethodImpl(obj, method, arg, MakeIndexSequence<sizeof...(Ts)>());
262 } 257 }
263 258
264 // Static Dispatchers with no out params. 259 // Static Dispatchers with no out params.
265 260
266 template <typename Function, typename A>
267 inline void DispatchToMethod(Function function, const A& arg) {
268 (*function)(base::internal::UnwrapTraits<A>::Unwrap(arg));
269 }
270
271 template <typename Function, typename... Ts, size_t... Ns> 261 template <typename Function, typename... Ts, size_t... Ns>
272 inline void DispatchToFunctionImpl(Function function, 262 inline void DispatchToFunctionImpl(Function function,
273 const Tuple<Ts...>& arg, 263 const Tuple<Ts...>& arg,
274 IndexSequence<Ns...>) { 264 IndexSequence<Ns...>) {
275 (*function)(base::internal::UnwrapTraits<Ts>::Unwrap(get<Ns>(arg))...); 265 (*function)(base::internal::UnwrapTraits<Ts>::Unwrap(get<Ns>(arg))...);
276 } 266 }
277 267
278 template <typename Function, typename... Ts> 268 template <typename Function, typename... Ts>
279 inline void DispatchToFunction(Function function, const Tuple<Ts...>& arg) { 269 inline void DispatchToFunction(Function function, const Tuple<Ts...>& arg) {
280 DispatchToFunctionImpl(function, arg, MakeIndexSequence<sizeof...(Ts)>()); 270 DispatchToFunctionImpl(function, arg, MakeIndexSequence<sizeof...(Ts)>());
281 } 271 }
282 272
283 // Dispatchers with out parameters. 273 // Dispatchers with out parameters.
284 274
285 template <typename ObjT, 275 template <typename ObjT,
286 typename Method, 276 typename Method,
287 typename In,
288 typename... OutTs,
289 size_t... OutNs>
290 inline void DispatchToMethodImpl(ObjT* obj,
291 Method method,
292 const In& in,
293 Tuple<OutTs...>* out,
294 IndexSequence<OutNs...>) {
295 (obj->*method)(base::internal::UnwrapTraits<In>::Unwrap(in),
296 &get<OutNs>(*out)...);
297 }
298
299 template <typename ObjT, typename Method, typename In, typename... OutTs>
300 inline void DispatchToMethod(ObjT* obj,
301 Method method,
302 const In& in,
303 Tuple<OutTs...>* out) {
304 DispatchToMethodImpl(obj, method, in, out,
305 MakeIndexSequence<sizeof...(OutTs)>());
306 }
307
308 template <typename ObjT,
309 typename Method,
310 typename... InTs, 277 typename... InTs,
311 typename... OutTs, 278 typename... OutTs,
312 size_t... InNs, 279 size_t... InNs,
313 size_t... OutNs> 280 size_t... OutNs>
314 inline void DispatchToMethodImpl(ObjT* obj, 281 inline void DispatchToMethodImpl(ObjT* obj,
315 Method method, 282 Method method,
316 const Tuple<InTs...>& in, 283 const Tuple<InTs...>& in,
317 Tuple<OutTs...>* out, 284 Tuple<OutTs...>* out,
318 IndexSequence<InNs...>, 285 IndexSequence<InNs...>,
319 IndexSequence<OutNs...>) { 286 IndexSequence<OutNs...>) {
320 (obj->*method)(base::internal::UnwrapTraits<InTs>::Unwrap(get<InNs>(in))..., 287 (obj->*method)(base::internal::UnwrapTraits<InTs>::Unwrap(get<InNs>(in))...,
321 &get<OutNs>(*out)...); 288 &get<OutNs>(*out)...);
322 } 289 }
323 290
324 template <typename ObjT, typename Method, typename... InTs, typename... OutTs> 291 template <typename ObjT, typename Method, typename... InTs, typename... OutTs>
325 inline void DispatchToMethod(ObjT* obj, 292 inline void DispatchToMethod(ObjT* obj,
326 Method method, 293 Method method,
327 const Tuple<InTs...>& in, 294 const Tuple<InTs...>& in,
328 Tuple<OutTs...>* out) { 295 Tuple<OutTs...>* out) {
329 DispatchToMethodImpl(obj, method, in, out, 296 DispatchToMethodImpl(obj, method, in, out,
330 MakeIndexSequence<sizeof...(InTs)>(), 297 MakeIndexSequence<sizeof...(InTs)>(),
331 MakeIndexSequence<sizeof...(OutTs)>()); 298 MakeIndexSequence<sizeof...(OutTs)>());
332 } 299 }
333 300
334 } // namespace base 301 } // namespace base
335 302
336 #endif // BASE_TUPLE_H_ 303 #endif // BASE_TUPLE_H_
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698