summaryrefslogtreecommitdiffstats
path: root/base/bind_internal.h.pump
diff options
context:
space:
mode:
authortzik <tzik@chromium.org>2014-11-20 02:09:45 -0800
committerCommit bot <commit-bot@chromium.org>2014-11-20 10:10:02 +0000
commitc821499285f70fac3090ff79850a0f2fdacec870 (patch)
tree8a9a2f5d7cf854539395c4e1e258936116e90f5b /base/bind_internal.h.pump
parent11bdcd08b9aa8413b2096f542cf81d4251114832 (diff)
downloadchromium_src-c821499285f70fac3090ff79850a0f2fdacec870.zip
chromium_src-c821499285f70fac3090ff79850a0f2fdacec870.tar.gz
chromium_src-c821499285f70fac3090ff79850a0f2fdacec870.tar.bz2
[Base] Use variadic template for helpers in bind_internal.h
This CL removes generated code for * RunnableAdapter * ForceVoidReturn * FunctorTraits * InvokeHelper from base/bind_internal.h. BUG=433164 Review URL: https://codereview.chromium.org/621773002 Cr-Commit-Position: refs/heads/master@{#304997}
Diffstat (limited to 'base/bind_internal.h.pump')
-rw-r--r--base/bind_internal.h.pump123
1 files changed, 41 insertions, 82 deletions
diff --git a/base/bind_internal.h.pump b/base/bind_internal.h.pump
index f632b99..9ddca47 100644
--- a/base/bind_internal.h.pump
+++ b/base/bind_internal.h.pump
@@ -57,18 +57,15 @@ namespace internal {
// Types:
// RunnableAdapter<> -- Wraps the various "function" pointer types into an
// object that adheres to the Runnable interface.
-// There are |3*ARITY| RunnableAdapter types.
// FunctionTraits<> -- Type traits that unwrap a function signature into a
// a set of easier to use typedefs. Used mainly for
// compile time asserts.
// There are |ARITY| FunctionTraits types.
// ForceVoidReturn<> -- Helper class for translating function signatures to
// equivalent forms with a "void" return type.
-// There are |ARITY| ForceVoidReturn types.
// FunctorTraits<> -- Type traits used determine the correct RunType and
// RunnableType for a Functor. This is where function
// signature adapters are applied.
-// There are |ARITY| ForceVoidReturn types.
// MakeRunnable<> -- Takes a Functor and returns an object in the Runnable
// type class that represents the underlying Functor.
// There are |O(1)| MakeRunnable types.
@@ -77,7 +74,6 @@ namespace internal {
// and for ignoring return values. This is separate from
// Invoker to avoid creating multiple version of Invoker<>
// which grows at O(n^2) with the arity.
-// There are |k*ARITY| InvokeHelper types.
// Invoker<> -- Unwraps the curried parameters and executes the Runnable.
// There are |(ARITY^2 + ARITY)/2| Invoketypes.
// BindState<> -- Stores the curried parameters, and is the main entry point
@@ -107,75 +103,64 @@ namespace internal {
template <typename Functor>
class RunnableAdapter;
-$for ARITY [[
-$range ARG 1..ARITY
-
-// Function: Arity $(ARITY).
-template <typename R[[]]
-$if ARITY > 0[[, ]] $for ARG , [[typename A$(ARG)]]>
-class RunnableAdapter<R(*)($for ARG , [[A$(ARG)]])> {
+// Function.
+template <typename R, typename... Args>
+class RunnableAdapter<R(*)(Args...)> {
public:
- typedef R (RunType)($for ARG , [[A$(ARG)]]);
+ typedef R (RunType)(Args...);
- explicit RunnableAdapter(R(*function)($for ARG , [[A$(ARG)]]))
+ explicit RunnableAdapter(R(*function)(Args...))
: function_(function) {
}
- R Run($for ARG , [[typename CallbackParamTraits<A$(ARG)>::ForwardType a$(ARG)]]) {
- return function_($for ARG , [[CallbackForward(a$(ARG))]]);
+ R Run(typename CallbackParamTraits<Args>::ForwardType... args) {
+ return function_(CallbackForward(args)...);
}
private:
- R (*function_)($for ARG , [[A$(ARG)]]);
+ R (*function_)(Args...);
};
-// Method: Arity $(ARITY).
-template <typename R, typename T[[]]
-$if ARITY > 0[[, ]] $for ARG , [[typename A$(ARG)]]>
-class RunnableAdapter<R(T::*)($for ARG , [[A$(ARG)]])> {
+// Method.
+template <typename R, typename T, typename... Args>
+class RunnableAdapter<R(T::*)(Args...)> {
public:
- typedef R (RunType)(T*[[]]
-$if ARITY > 0[[, ]] $for ARG , [[A$(ARG)]]);
+ typedef R (RunType)(T*, Args...);
typedef true_type IsMethod;
- explicit RunnableAdapter(R(T::*method)($for ARG , [[A$(ARG)]]))
+ explicit RunnableAdapter(R(T::*method)(Args...))
: method_(method) {
}
- R Run(T* object[[]]
-$if ARITY > 0[[, ]] $for ARG, [[typename CallbackParamTraits<A$(ARG)>::ForwardType a$(ARG)]]) {
- return (object->*method_)($for ARG , [[CallbackForward(a$(ARG))]]);
+ R Run(T* object, typename CallbackParamTraits<Args>::ForwardType... args) {
+ return (object->*method_)(CallbackForward(args)...);
}
private:
- R (T::*method_)($for ARG , [[A$(ARG)]]);
+ R (T::*method_)(Args...);
};
-// Const Method: Arity $(ARITY).
-template <typename R, typename T[[]]
-$if ARITY > 0[[, ]] $for ARG , [[typename A$(ARG)]]>
-class RunnableAdapter<R(T::*)($for ARG , [[A$(ARG)]]) const> {
+// Const Method.
+template <typename R, typename T, typename... Args>
+class RunnableAdapter<R(T::*)(Args...) const> {
public:
- typedef R (RunType)(const T*[[]]
-$if ARITY > 0[[, ]] $for ARG , [[A$(ARG)]]);
+ typedef R (RunType)(const T*, Args...);
typedef true_type IsMethod;
- explicit RunnableAdapter(R(T::*method)($for ARG , [[A$(ARG)]]) const)
+ explicit RunnableAdapter(R(T::*method)(Args...) const)
: method_(method) {
}
- R Run(const T* object[[]]
-$if ARITY > 0[[, ]] $for ARG, [[typename CallbackParamTraits<A$(ARG)>::ForwardType a$(ARG)]]) {
- return (object->*method_)($for ARG , [[CallbackForward(a$(ARG))]]);
+ R Run(const T* object,
+ typename CallbackParamTraits<Args>::ForwardType... args) {
+ return (object->*method_)(CallbackForward(args)...);
}
private:
- R (T::*method_)($for ARG , [[A$(ARG)]]) const;
+ R (T::*method_)(Args...) const;
};
-]] $$ for ARITY
-
-
+// TODO(tzik): Remove FunctionTraits after we finish removing bind.pump.
// FunctionTraits<>
//
// Breaks a function signature apart into typedefs for easier introspection.
@@ -205,17 +190,11 @@ $for ARG [[
template <typename Sig>
struct ForceVoidReturn;
-$for ARITY [[
-$range ARG 1..ARITY
-
-template <typename R[[]]
-$if ARITY > 0[[, ]] $for ARG , [[typename A$(ARG)]]>
-struct ForceVoidReturn<R($for ARG , [[A$(ARG)]])> {
- typedef void(RunType)($for ARG , [[A$(ARG)]]);
+template <typename R, typename... Args>
+struct ForceVoidReturn<R(Args...)> {
+ typedef void(RunType)(Args...);
};
-]] $$ for ARITY
-
// FunctorTraits<>
//
@@ -284,51 +263,31 @@ template <bool IsWeakCall, typename ReturnType, typename Runnable,
typename ArgsType>
struct InvokeHelper;
-$for ARITY [[
-$range ARG 1..ARITY
-$range WEAKCALL_ARG 2..ARITY
-
-template <typename ReturnType, typename Runnable[[]]
-$if ARITY > 0 [[,]] $for ARG , [[typename A$(ARG)]]>
+template <typename ReturnType, typename Runnable, typename... Args>
struct InvokeHelper<false, ReturnType, Runnable,
- void($for ARG , [[A$(ARG)]])> {
- static ReturnType MakeItSo(Runnable runnable[[]]
-$if ARITY > 0[[, ]] $for ARG , [[A$(ARG) a$(ARG)]]) {
- return runnable.Run($for ARG , [[CallbackForward(a$(ARG))]]);
+ void(Args...)> {
+ static ReturnType MakeItSo(Runnable runnable, Args... args) {
+ return runnable.Run(CallbackForward(args)...);
}
};
-template <typename Runnable[[]]
-$if ARITY > 0 [[,]] $for ARG , [[typename A$(ARG)]]>
-struct InvokeHelper<false, void, Runnable,
- void($for ARG , [[A$(ARG)]])> {
- static void MakeItSo(Runnable runnable[[]]
-$if ARITY > 0[[, ]] $for ARG , [[A$(ARG) a$(ARG)]]) {
- runnable.Run($for ARG , [[CallbackForward(a$(ARG))]]);
+template <typename Runnable, typename... Args>
+struct InvokeHelper<false, void, Runnable, void(Args...)> {
+ static void MakeItSo(Runnable runnable, Args... args) {
+ runnable.Run(CallbackForward(args)...);
}
};
-$if ARITY > 0 [[
-
-template <typename Runnable[[]], typename BoundWeakPtr
-$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[typename A$(WEAKCALL_ARG)]]>
-struct InvokeHelper<true, void, Runnable,
- void(BoundWeakPtr
-$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[A$(WEAKCALL_ARG)]])> {
- static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr
-$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[A$(WEAKCALL_ARG) a$(WEAKCALL_ARG)]]) {
+template <typename Runnable, typename BoundWeakPtr, typename... Args>
+struct InvokeHelper<true, void, Runnable, void(BoundWeakPtr, Args...)> {
+ static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr, Args... args) {
if (!weak_ptr.get()) {
return;
}
- runnable.Run(weak_ptr.get()
-$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[CallbackForward(a$(WEAKCALL_ARG))]]);
+ runnable.Run(weak_ptr.get(), CallbackForward(args)...);
}
};
-]]
-
-]] $$ for ARITY
-
#if !defined(_MSC_VER)
template <typename ReturnType, typename Runnable, typename ArgsType>