| OLD | NEW |
| 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 // 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 10 matching lines...) Expand all Loading... |
| 21 // DispatchToFunction(&SomeFunc, tuple_a); // SomeFunc(1, "wee") | 21 // DispatchToFunction(&SomeFunc, tuple_a); // SomeFunc(1, "wee") |
| 22 // DispatchToFunction( | 22 // DispatchToFunction( |
| 23 // &SomeFunc, MakeTuple(10, "foo")); // SomeFunc(10, "foo") | 23 // &SomeFunc, MakeTuple(10, "foo")); // SomeFunc(10, "foo") |
| 24 // | 24 // |
| 25 // struct { void SomeMeth(int a, int b, int c) { } } foo; | 25 // struct { void SomeMeth(int a, int b, int c) { } } foo; |
| 26 // DispatchToMethod(&foo, &Foo::SomeMeth, MakeTuple(1, 2, 3)); | 26 // DispatchToMethod(&foo, &Foo::SomeMeth, MakeTuple(1, 2, 3)); |
| 27 // // foo->SomeMeth(1, 2, 3); | 27 // // foo->SomeMeth(1, 2, 3); |
| 28 | 28 |
| 29 #ifndef BASE_TUPLE_H__ | 29 #ifndef BASE_TUPLE_H__ |
| 30 #define BASE_TUPLE_H__ | 30 #define BASE_TUPLE_H__ |
| 31 #pragma once | |
| 32 | 31 |
| 33 // Traits ---------------------------------------------------------------------- | 32 // Traits ---------------------------------------------------------------------- |
| 34 // | 33 // |
| 35 // A simple traits class for tuple arguments. | 34 // A simple traits class for tuple arguments. |
| 36 // | 35 // |
| 37 // ValueType: the bare, nonref version of a type (same as the type for nonrefs). | 36 // ValueType: the bare, nonref version of a type (same as the type for nonrefs). |
| 38 // RefType: the ref version of a type (same as the type for refs). | 37 // RefType: the ref version of a type (same as the type for refs). |
| 39 // ParamType: what type to pass to functions (refs should not be constified). | 38 // ParamType: what type to pass to functions (refs should not be constified). |
| 40 | 39 |
| 41 template <class P> | 40 template <class P> |
| (...skipping 1001 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1043 class InA, class InB, class InC, class InD, class InE, class InF, | 1042 class InA, class InB, class InC, class InD, class InE, class InF, |
| 1044 class OutA, class OutB, class OutC, class OutD, class OutE> | 1043 class OutA, class OutB, class OutC, class OutD, class OutE> |
| 1045 inline void DispatchToMethod(ObjT* obj, Method method, | 1044 inline void DispatchToMethod(ObjT* obj, Method method, |
| 1046 const Tuple6<InA, InB, InC, InD, InE, InF>& in, | 1045 const Tuple6<InA, InB, InC, InD, InE, InF>& in, |
| 1047 Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { | 1046 Tuple5<OutA, OutB, OutC, OutD, OutE>* out) { |
| 1048 (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, | 1047 (obj->*method)(in.a, in.b, in.c, in.d, in.e, in.f, |
| 1049 &out->a, &out->b, &out->c, &out->d, &out->e); | 1048 &out->a, &out->b, &out->c, &out->d, &out->e); |
| 1050 } | 1049 } |
| 1051 | 1050 |
| 1052 #endif // BASE_TUPLE_H__ | 1051 #endif // BASE_TUPLE_H__ |
| OLD | NEW |