summaryrefslogtreecommitdiffstats
path: root/base/bind_internal.h
diff options
context:
space:
mode:
authortzik <tzik@chromium.org>2016-02-15 12:51:34 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-15 20:53:12 +0000
commit6ba91a9df7cb8e3fee614639c1ecb5af3f68f807 (patch)
tree8ff453d34e1f0b80ce561a57ed35836b4e9fa57b /base/bind_internal.h
parent0d2610f23f93aefa30d585d6c26688be110a8034 (diff)
downloadchromium_src-6ba91a9df7cb8e3fee614639c1ecb5af3f68f807.zip
chromium_src-6ba91a9df7cb8e3fee614639c1ecb5af3f68f807.tar.gz
chromium_src-6ba91a9df7cb8e3fee614639c1ecb5af3f68f807.tar.bz2
Use Perfect Forwarding where possible in bind_internals.h
Most of CallbackForward and CallbackParamTraits in bind_internals.h can be replaced with Universal References and Perfect Forwarding. This CL applies the replacement as possible as there's no runtime cost. BUG=554299 Review URL: https://codereview.chromium.org/1701633002 Cr-Commit-Position: refs/heads/master@{#375488}
Diffstat (limited to 'base/bind_internal.h')
-rw-r--r--base/bind_internal.h59
1 files changed, 30 insertions, 29 deletions
diff --git a/base/bind_internal.h b/base/bind_internal.h
index ce6b5d6..90889d5 100644
--- a/base/bind_internal.h
+++ b/base/bind_internal.h
@@ -154,8 +154,9 @@ class RunnableAdapter<R(*)(Args...)> {
: function_(function) {
}
- R Run(typename CallbackParamTraits<Args>::ForwardType... args) {
- return function_(CallbackForward(args)...);
+ template <typename... RunArgs>
+ R Run(RunArgs&&... args) {
+ return function_(std::forward<RunArgs>(args)...);
}
private:
@@ -175,8 +176,9 @@ class RunnableAdapter<R(T::*)(Args...)> {
: method_(method) {
}
- R Run(T* object, typename CallbackParamTraits<Args>::ForwardType... args) {
- return (object->*method_)(CallbackForward(args)...);
+ template <typename... RunArgs>
+ R Run(T* object, RunArgs&&... args) {
+ return (object->*method_)(std::forward<RunArgs>(args)...);
}
private:
@@ -194,9 +196,9 @@ class RunnableAdapter<R(T::*)(Args...) const> {
: method_(method) {
}
- R Run(const T* object,
- typename CallbackParamTraits<Args>::ForwardType... args) {
- return (object->*method_)(CallbackForward(args)...);
+ template <typename... RunArgs>
+ R Run(const T* object, RunArgs&&... args) {
+ return (object->*method_)(std::forward<RunArgs>(args)...);
}
private:
@@ -281,38 +283,42 @@ MakeRunnable(const Callback<T>& t) {
//
// WeakCalls similarly need special syntax that is applied to the first
// argument to check if they should no-op themselves.
-template <bool IsWeakCall, typename ReturnType, typename Runnable,
- typename ArgsType>
+template <bool IsWeakCall, typename ReturnType, typename Runnable>
struct InvokeHelper;
-template <typename ReturnType, typename Runnable, typename... Args>
-struct InvokeHelper<false, ReturnType, Runnable, TypeList<Args...>> {
- static ReturnType MakeItSo(Runnable runnable, Args... args) {
- return runnable.Run(CallbackForward(args)...);
+template <typename ReturnType, typename Runnable>
+struct InvokeHelper<false, ReturnType, Runnable> {
+ template <typename... RunArgs>
+ static ReturnType MakeItSo(Runnable runnable, RunArgs&&... args) {
+ return runnable.Run(std::forward<RunArgs>(args)...);
}
};
-template <typename Runnable, typename... Args>
-struct InvokeHelper<false, void, Runnable, TypeList<Args...>> {
- static void MakeItSo(Runnable runnable, Args... args) {
- runnable.Run(CallbackForward(args)...);
+template <typename Runnable>
+struct InvokeHelper<false, void, Runnable> {
+ template <typename... RunArgs>
+ static void MakeItSo(Runnable runnable, RunArgs&&... args) {
+ runnable.Run(std::forward<RunArgs>(args)...);
}
};
-template <typename Runnable, typename BoundWeakPtr, typename... Args>
-struct InvokeHelper<true, void, Runnable, TypeList<BoundWeakPtr, Args...>> {
- static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr, Args... args) {
+template <typename Runnable>
+struct InvokeHelper<true, void, Runnable> {
+ template <typename BoundWeakPtr, typename... RunArgs>
+ static void MakeItSo(Runnable runnable,
+ BoundWeakPtr weak_ptr,
+ RunArgs&&... args) {
if (!weak_ptr.get()) {
return;
}
- runnable.Run(weak_ptr.get(), CallbackForward(args)...);
+ runnable.Run(weak_ptr.get(), std::forward<RunArgs>(args)...);
}
};
#if !defined(_MSC_VER)
-template <typename ReturnType, typename Runnable, typename ArgsType>
-struct InvokeHelper<true, ReturnType, Runnable, ArgsType> {
+template <typename ReturnType, typename Runnable>
+struct InvokeHelper<true, ReturnType, Runnable> {
// WeakCalls are only supported for functions with a void return type.
// Otherwise, the function result would be undefined if the the WeakPtr<>
// is invalidated.
@@ -388,12 +394,7 @@ struct BindState<Runnable, R(Args...), BoundArgs...> final
sizeof...(BoundArgs),
TypeList<typename CallbackParamTraits<Args>::ForwardType...>>;
using UnboundForwardRunType = MakeFunctionType<R, UnboundForwardArgs>;
-
- using InvokeHelperArgs = ConcatTypeLists<
- TypeList<typename UnwrapTraits<BoundArgs>::ForwardType...>,
- UnboundForwardArgs>;
- using InvokeHelperType =
- InvokeHelper<IsWeakCall::value, R, Runnable, InvokeHelperArgs>;
+ using InvokeHelperType = InvokeHelper<IsWeakCall::value, R, Runnable>;
using UnboundArgs = DropTypeListItem<sizeof...(BoundArgs), TypeList<Args...>>;