| Index: base/tuple.h
|
| diff --git a/base/tuple.h b/base/tuple.h
|
| index df69bf01169cf3784edb5605de2ba021795e3c7c..62344a1233916317b5ff96659fc5370daa5c4260 100644
|
| --- a/base/tuple.h
|
| +++ b/base/tuple.h
|
| @@ -2,27 +2,24 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -// A Tuple is a generic templatized container, similar in concept to std::pair
|
| -// and std::tuple. The convenient MakeTuple() function takes any number of
|
| -// arguments and will construct and return the appropriate Tuple object. The
|
| -// functions DispatchToMethod and DispatchToFunction take a function pointer or
|
| -// instance and method pointer, and unpack a tuple into arguments to the call.
|
| -//
|
| -// Tuple elements are copied by value, and stored in the tuple. See the unit
|
| -// tests for more details of how/when the values are copied.
|
| +// Use std::tuple as tuple type. This file contains helper functions for
|
| +// working with std::tuples.
|
| +// The functions DispatchToMethod and DispatchToFunction take a function pointer
|
| +// or instance and method pointer, and unpack a tuple into arguments to the
|
| +// call.
|
| //
|
| // Example usage:
|
| // // These two methods of creating a Tuple are identical.
|
| -// Tuple<int, const char*> tuple_a(1, "wee");
|
| -// Tuple<int, const char*> tuple_b = MakeTuple(1, "wee");
|
| +// std::tuple<int, const char*> tuple_a(1, "wee");
|
| +// std::tuple<int, const char*> tuple_b = std::make_tuple(1, "wee");
|
| //
|
| // void SomeFunc(int a, const char* b) { }
|
| // DispatchToFunction(&SomeFunc, tuple_a); // SomeFunc(1, "wee")
|
| // DispatchToFunction(
|
| -// &SomeFunc, MakeTuple(10, "foo")); // SomeFunc(10, "foo")
|
| +// &SomeFunc, std::make_tuple(10, "foo")); // SomeFunc(10, "foo")
|
| //
|
| // struct { void SomeMeth(int a, int b, int c) { } } foo;
|
| -// DispatchToMethod(&foo, &Foo::SomeMeth, MakeTuple(1, 2, 3));
|
| +// DispatchToMethod(&foo, &Foo::SomeMeth, std::make_tuple(1, 2, 3));
|
| // // foo->SomeMeth(1, 2, 3);
|
|
|
| #ifndef BASE_TUPLE_H_
|
| @@ -110,43 +107,6 @@ struct MakeIndexSequenceImpl<N, Ns...>
|
| template <size_t N>
|
| using MakeIndexSequence = typename MakeIndexSequenceImpl<N>::Type;
|
|
|
| -// Tuple -----------------------------------------------------------------------
|
| -//
|
| -// This set of classes is useful for bundling 0 or more heterogeneous data types
|
| -// into a single variable. The advantage of this is that it greatly simplifies
|
| -// function objects that need to take an arbitrary number of parameters; see
|
| -// RunnableMethod and IPC::MessageWithTuple.
|
| -//
|
| -// Tuple<> is supplied to act as a 'void' type. It can be used, for example,
|
| -// when dispatching to a function that accepts no arguments (see the
|
| -// Dispatchers below).
|
| -// Tuple<A> is rarely useful. One such use is when A is non-const ref that you
|
| -// want filled by the dispatchee, and the tuple is merely a container for that
|
| -// output (a "tier"). See MakeRefTuple and its usages.
|
| -
|
| -template <typename... Ts>
|
| -using Tuple = std::tuple<Ts...>;
|
| -
|
| -using std::get;
|
| -
|
| -// Tuple creators -------------------------------------------------------------
|
| -//
|
| -// Helper functions for constructing tuples while inferring the template
|
| -// argument types.
|
| -
|
| -template <typename... Ts>
|
| -inline Tuple<Ts...> MakeTuple(const Ts&... arg) {
|
| - return Tuple<Ts...>(arg...);
|
| -}
|
| -
|
| -// The following set of helpers make what Boost refers to as "Tiers" - a tuple
|
| -// of references.
|
| -
|
| -template <typename... Ts>
|
| -inline Tuple<Ts&...> MakeRefTuple(Ts&... arg) {
|
| - return Tuple<Ts&...>(arg...);
|
| -}
|
| -
|
| // Dispatchers ----------------------------------------------------------------
|
| //
|
| // Helper functions that call the given method on an object, with the unpacked
|
| @@ -161,15 +121,15 @@ inline Tuple<Ts&...> MakeRefTuple(Ts&... arg) {
|
| template <typename ObjT, typename Method, typename... Ts, size_t... Ns>
|
| inline void DispatchToMethodImpl(const ObjT& obj,
|
| Method method,
|
| - const Tuple<Ts...>& arg,
|
| + const std::tuple<Ts...>& arg,
|
| IndexSequence<Ns...>) {
|
| - (obj->*method)(internal::Unwrap(get<Ns>(arg))...);
|
| + (obj->*method)(internal::Unwrap(std::get<Ns>(arg))...);
|
| }
|
|
|
| template <typename ObjT, typename Method, typename... Ts>
|
| inline void DispatchToMethod(const ObjT& obj,
|
| Method method,
|
| - const Tuple<Ts...>& arg) {
|
| + const std::tuple<Ts...>& arg) {
|
| DispatchToMethodImpl(obj, method, arg, MakeIndexSequence<sizeof...(Ts)>());
|
| }
|
|
|
| @@ -177,13 +137,14 @@ inline void DispatchToMethod(const ObjT& obj,
|
|
|
| template <typename Function, typename... Ts, size_t... Ns>
|
| inline void DispatchToFunctionImpl(Function function,
|
| - const Tuple<Ts...>& arg,
|
| + const std::tuple<Ts...>& arg,
|
| IndexSequence<Ns...>) {
|
| - (*function)(internal::Unwrap(get<Ns>(arg))...);
|
| + (*function)(internal::Unwrap(std::get<Ns>(arg))...);
|
| }
|
|
|
| template <typename Function, typename... Ts>
|
| -inline void DispatchToFunction(Function function, const Tuple<Ts...>& arg) {
|
| +inline void DispatchToFunction(Function function,
|
| + const std::tuple<Ts...>& arg) {
|
| DispatchToFunctionImpl(function, arg, MakeIndexSequence<sizeof...(Ts)>());
|
| }
|
|
|
| @@ -197,18 +158,19 @@ template <typename ObjT,
|
| size_t... OutNs>
|
| inline void DispatchToMethodImpl(const ObjT& obj,
|
| Method method,
|
| - const Tuple<InTs...>& in,
|
| - Tuple<OutTs...>* out,
|
| + const std::tuple<InTs...>& in,
|
| + std::tuple<OutTs...>* out,
|
| IndexSequence<InNs...>,
|
| IndexSequence<OutNs...>) {
|
| - (obj->*method)(internal::Unwrap(get<InNs>(in))..., &get<OutNs>(*out)...);
|
| + (obj->*method)(internal::Unwrap(std::get<InNs>(in))...,
|
| + &std::get<OutNs>(*out)...);
|
| }
|
|
|
| template <typename ObjT, typename Method, typename... InTs, typename... OutTs>
|
| inline void DispatchToMethod(const ObjT& obj,
|
| Method method,
|
| - const Tuple<InTs...>& in,
|
| - Tuple<OutTs...>* out) {
|
| + const std::tuple<InTs...>& in,
|
| + std::tuple<OutTs...>* out) {
|
| DispatchToMethodImpl(obj, method, in, out,
|
| MakeIndexSequence<sizeof...(InTs)>(),
|
| MakeIndexSequence<sizeof...(OutTs)>());
|
|
|