Chromium Code Reviews| Index: base/callback.h |
| diff --git a/base/callback.h b/base/callback.h |
| index 364f506139f66652aff19669e02d281e6d8bc9fb..00669dd83d1c2dbb518134f0243fd5dbec104133 100644 |
| --- a/base/callback.h |
| +++ b/base/callback.h |
| @@ -1,8 +1,3 @@ |
| -// This file was GENERATED by command: |
| -// pump.py callback.h.pump |
| -// DO NOT EDIT BY HAND!!! |
| - |
| - |
| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| @@ -367,10 +362,10 @@ template <typename Runnable, typename RunType, typename BoundArgsType> |
| struct BindState; |
| } // namespace internal |
| -template <typename R> |
| -class Callback<R(void)> : public internal::CallbackBase { |
| +template <typename R, typename... Args> |
| +class Callback<R(Args...)> : public internal::CallbackBase { |
| public: |
| - typedef R(RunType)(); |
| + typedef R(RunType)(Args...); |
| Callback() : CallbackBase(NULL) { } |
| @@ -380,7 +375,6 @@ class Callback<R(void)> : public internal::CallbackBase { |
| Callback(internal::BindState<Runnable, BindRunType, |
| BoundArgsType>* bind_state) |
| : CallbackBase(bind_state) { |
| - |
| // Force the assignment to a local variable of PolymorphicInvoke |
| // so the compiler will typecheck that the passed in Run() method has |
| // the correct type. |
| @@ -394,377 +388,24 @@ class Callback<R(void)> : public internal::CallbackBase { |
| return CallbackBase::Equals(other); |
| } |
| - R Run() const { |
| + R Run(typename internal::CallbackParamTraits<Args>::ForwardType... args) |
| + const { |
| PolymorphicInvoke f = |
| reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_); |
| - return f(bind_state_.get()); |
| - } |
| - |
| - private: |
| - typedef R(*PolymorphicInvoke)( |
| - internal::BindStateBase*); |
| - |
| -}; |
| - |
| -template <typename R, typename A1> |
| -class Callback<R(A1)> : public internal::CallbackBase { |
| - public: |
| - typedef R(RunType)(A1); |
| - |
| - Callback() : CallbackBase(NULL) { } |
| - |
| - // Note that this constructor CANNOT be explicit, and that Bind() CANNOT |
| - // return the exact Callback<> type. See base/bind.h for details. |
| - template <typename Runnable, typename BindRunType, typename BoundArgsType> |
| - Callback(internal::BindState<Runnable, BindRunType, |
| - BoundArgsType>* bind_state) |
| - : CallbackBase(bind_state) { |
| - |
| - // Force the assignment to a local variable of PolymorphicInvoke |
| - // so the compiler will typecheck that the passed in Run() method has |
| - // the correct type. |
| - PolymorphicInvoke invoke_func = |
| - &internal::BindState<Runnable, BindRunType, BoundArgsType> |
| - ::InvokerType::Run; |
| - polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func); |
| - } |
| - |
| - bool Equals(const Callback& other) const { |
| - return CallbackBase::Equals(other); |
| - } |
| - |
| - R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1) const { |
| - PolymorphicInvoke f = |
| - reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_); |
| - |
| - return f(bind_state_.get(), internal::CallbackForward(a1)); |
| + return f(bind_state_.get(), internal::CallbackForward(args)...); |
| } |
| private: |
| typedef R(*PolymorphicInvoke)( |
| internal::BindStateBase*, |
| - typename internal::CallbackParamTraits<A1>::ForwardType); |
| - |
| + typename internal::CallbackParamTraits<Args>::ForwardType...); |
| }; |
| -template <typename R, typename A1, typename A2> |
| -class Callback<R(A1, A2)> : public internal::CallbackBase { |
| - public: |
| - typedef R(RunType)(A1, A2); |
| - |
| - Callback() : CallbackBase(NULL) { } |
| - |
| - // Note that this constructor CANNOT be explicit, and that Bind() CANNOT |
| - // return the exact Callback<> type. See base/bind.h for details. |
| - template <typename Runnable, typename BindRunType, typename BoundArgsType> |
| - Callback(internal::BindState<Runnable, BindRunType, |
| - BoundArgsType>* bind_state) |
| - : CallbackBase(bind_state) { |
| - |
| - // Force the assignment to a local variable of PolymorphicInvoke |
| - // so the compiler will typecheck that the passed in Run() method has |
| - // the correct type. |
| - PolymorphicInvoke invoke_func = |
| - &internal::BindState<Runnable, BindRunType, BoundArgsType> |
| - ::InvokerType::Run; |
| - polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func); |
| - } |
| - |
| - bool Equals(const Callback& other) const { |
| - return CallbackBase::Equals(other); |
| - } |
| - |
| - R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1, |
| - typename internal::CallbackParamTraits<A2>::ForwardType a2) const { |
| - PolymorphicInvoke f = |
| - reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_); |
| - |
| - return f(bind_state_.get(), internal::CallbackForward(a1), |
| - internal::CallbackForward(a2)); |
| - } |
| - |
| - private: |
| - typedef R(*PolymorphicInvoke)( |
| - internal::BindStateBase*, |
| - typename internal::CallbackParamTraits<A1>::ForwardType, |
| - typename internal::CallbackParamTraits<A2>::ForwardType); |
| - |
| -}; |
| - |
| -template <typename R, typename A1, typename A2, typename A3> |
| -class Callback<R(A1, A2, A3)> : public internal::CallbackBase { |
| - public: |
| - typedef R(RunType)(A1, A2, A3); |
| - |
| - Callback() : CallbackBase(NULL) { } |
| - |
| - // Note that this constructor CANNOT be explicit, and that Bind() CANNOT |
| - // return the exact Callback<> type. See base/bind.h for details. |
| - template <typename Runnable, typename BindRunType, typename BoundArgsType> |
| - Callback(internal::BindState<Runnable, BindRunType, |
| - BoundArgsType>* bind_state) |
| - : CallbackBase(bind_state) { |
| - |
| - // Force the assignment to a local variable of PolymorphicInvoke |
| - // so the compiler will typecheck that the passed in Run() method has |
| - // the correct type. |
| - PolymorphicInvoke invoke_func = |
| - &internal::BindState<Runnable, BindRunType, BoundArgsType> |
| - ::InvokerType::Run; |
| - polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func); |
| - } |
| - |
| - bool Equals(const Callback& other) const { |
| - return CallbackBase::Equals(other); |
| - } |
| - |
| - R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1, |
| - typename internal::CallbackParamTraits<A2>::ForwardType a2, |
| - typename internal::CallbackParamTraits<A3>::ForwardType a3) const { |
| - PolymorphicInvoke f = |
| - reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_); |
| - |
| - return f(bind_state_.get(), internal::CallbackForward(a1), |
| - internal::CallbackForward(a2), |
| - internal::CallbackForward(a3)); |
| - } |
| - |
| - private: |
| - typedef R(*PolymorphicInvoke)( |
| - internal::BindStateBase*, |
| - typename internal::CallbackParamTraits<A1>::ForwardType, |
| - typename internal::CallbackParamTraits<A2>::ForwardType, |
| - typename internal::CallbackParamTraits<A3>::ForwardType); |
| - |
| -}; |
| - |
| -template <typename R, typename A1, typename A2, typename A3, typename A4> |
| -class Callback<R(A1, A2, A3, A4)> : public internal::CallbackBase { |
| - public: |
| - typedef R(RunType)(A1, A2, A3, A4); |
| - |
| - Callback() : CallbackBase(NULL) { } |
| - |
| - // Note that this constructor CANNOT be explicit, and that Bind() CANNOT |
| - // return the exact Callback<> type. See base/bind.h for details. |
| - template <typename Runnable, typename BindRunType, typename BoundArgsType> |
| - Callback(internal::BindState<Runnable, BindRunType, |
| - BoundArgsType>* bind_state) |
| - : CallbackBase(bind_state) { |
| - |
| - // Force the assignment to a local variable of PolymorphicInvoke |
| - // so the compiler will typecheck that the passed in Run() method has |
| - // the correct type. |
| - PolymorphicInvoke invoke_func = |
| - &internal::BindState<Runnable, BindRunType, BoundArgsType> |
| - ::InvokerType::Run; |
| - polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func); |
| - } |
| - |
| - bool Equals(const Callback& other) const { |
| - return CallbackBase::Equals(other); |
| - } |
| - |
| - R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1, |
| - typename internal::CallbackParamTraits<A2>::ForwardType a2, |
| - typename internal::CallbackParamTraits<A3>::ForwardType a3, |
| - typename internal::CallbackParamTraits<A4>::ForwardType a4) const { |
| - PolymorphicInvoke f = |
| - reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_); |
| - |
| - return f(bind_state_.get(), internal::CallbackForward(a1), |
| - internal::CallbackForward(a2), |
| - internal::CallbackForward(a3), |
| - internal::CallbackForward(a4)); |
| - } |
| - |
| - private: |
| - typedef R(*PolymorphicInvoke)( |
| - internal::BindStateBase*, |
| - typename internal::CallbackParamTraits<A1>::ForwardType, |
| - typename internal::CallbackParamTraits<A2>::ForwardType, |
| - typename internal::CallbackParamTraits<A3>::ForwardType, |
| - typename internal::CallbackParamTraits<A4>::ForwardType); |
| - |
| -}; |
| - |
| -template <typename R, typename A1, typename A2, typename A3, typename A4, |
| - typename A5> |
| -class Callback<R(A1, A2, A3, A4, A5)> : public internal::CallbackBase { |
| - public: |
| - typedef R(RunType)(A1, A2, A3, A4, A5); |
| - |
| - Callback() : CallbackBase(NULL) { } |
| - |
| - // Note that this constructor CANNOT be explicit, and that Bind() CANNOT |
| - // return the exact Callback<> type. See base/bind.h for details. |
| - template <typename Runnable, typename BindRunType, typename BoundArgsType> |
| - Callback(internal::BindState<Runnable, BindRunType, |
| - BoundArgsType>* bind_state) |
| - : CallbackBase(bind_state) { |
| - |
| - // Force the assignment to a local variable of PolymorphicInvoke |
| - // so the compiler will typecheck that the passed in Run() method has |
| - // the correct type. |
| - PolymorphicInvoke invoke_func = |
| - &internal::BindState<Runnable, BindRunType, BoundArgsType> |
| - ::InvokerType::Run; |
| - polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func); |
| - } |
| - |
| - bool Equals(const Callback& other) const { |
| - return CallbackBase::Equals(other); |
| - } |
| - |
| - R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1, |
| - typename internal::CallbackParamTraits<A2>::ForwardType a2, |
| - typename internal::CallbackParamTraits<A3>::ForwardType a3, |
| - typename internal::CallbackParamTraits<A4>::ForwardType a4, |
| - typename internal::CallbackParamTraits<A5>::ForwardType a5) const { |
| - PolymorphicInvoke f = |
| - reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_); |
| - |
| - return f(bind_state_.get(), internal::CallbackForward(a1), |
| - internal::CallbackForward(a2), |
| - internal::CallbackForward(a3), |
| - internal::CallbackForward(a4), |
| - internal::CallbackForward(a5)); |
| - } |
| - |
| - private: |
| - typedef R(*PolymorphicInvoke)( |
| - internal::BindStateBase*, |
| - typename internal::CallbackParamTraits<A1>::ForwardType, |
| - typename internal::CallbackParamTraits<A2>::ForwardType, |
| - typename internal::CallbackParamTraits<A3>::ForwardType, |
| - typename internal::CallbackParamTraits<A4>::ForwardType, |
| - typename internal::CallbackParamTraits<A5>::ForwardType); |
| - |
| -}; |
| - |
| -template <typename R, typename A1, typename A2, typename A3, typename A4, |
| - typename A5, typename A6> |
| -class Callback<R(A1, A2, A3, A4, A5, A6)> : public internal::CallbackBase { |
| - public: |
| - typedef R(RunType)(A1, A2, A3, A4, A5, A6); |
| - |
| - Callback() : CallbackBase(NULL) { } |
| - |
| - // Note that this constructor CANNOT be explicit, and that Bind() CANNOT |
| - // return the exact Callback<> type. See base/bind.h for details. |
| - template <typename Runnable, typename BindRunType, typename BoundArgsType> |
| - Callback(internal::BindState<Runnable, BindRunType, |
| - BoundArgsType>* bind_state) |
| - : CallbackBase(bind_state) { |
| - |
| - // Force the assignment to a local variable of PolymorphicInvoke |
| - // so the compiler will typecheck that the passed in Run() method has |
| - // the correct type. |
| - PolymorphicInvoke invoke_func = |
| - &internal::BindState<Runnable, BindRunType, BoundArgsType> |
| - ::InvokerType::Run; |
| - polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func); |
| - } |
| - |
| - bool Equals(const Callback& other) const { |
| - return CallbackBase::Equals(other); |
| - } |
| - |
| - R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1, |
| - typename internal::CallbackParamTraits<A2>::ForwardType a2, |
| - typename internal::CallbackParamTraits<A3>::ForwardType a3, |
| - typename internal::CallbackParamTraits<A4>::ForwardType a4, |
| - typename internal::CallbackParamTraits<A5>::ForwardType a5, |
| - typename internal::CallbackParamTraits<A6>::ForwardType a6) const { |
| - PolymorphicInvoke f = |
| - reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_); |
| - |
| - return f(bind_state_.get(), internal::CallbackForward(a1), |
| - internal::CallbackForward(a2), |
| - internal::CallbackForward(a3), |
| - internal::CallbackForward(a4), |
| - internal::CallbackForward(a5), |
| - internal::CallbackForward(a6)); |
| - } |
| - |
| - private: |
| - typedef R(*PolymorphicInvoke)( |
| - internal::BindStateBase*, |
| - typename internal::CallbackParamTraits<A1>::ForwardType, |
| - typename internal::CallbackParamTraits<A2>::ForwardType, |
| - typename internal::CallbackParamTraits<A3>::ForwardType, |
| - typename internal::CallbackParamTraits<A4>::ForwardType, |
| - typename internal::CallbackParamTraits<A5>::ForwardType, |
| - typename internal::CallbackParamTraits<A6>::ForwardType); |
| - |
| -}; |
| - |
| -template <typename R, typename A1, typename A2, typename A3, typename A4, |
| - typename A5, typename A6, typename A7> |
| -class Callback<R(A1, A2, A3, A4, A5, A6, A7)> : public internal::CallbackBase { |
| - public: |
| - typedef R(RunType)(A1, A2, A3, A4, A5, A6, A7); |
| - |
| - Callback() : CallbackBase(NULL) { } |
| - |
| - // Note that this constructor CANNOT be explicit, and that Bind() CANNOT |
| - // return the exact Callback<> type. See base/bind.h for details. |
| - template <typename Runnable, typename BindRunType, typename BoundArgsType> |
| - Callback(internal::BindState<Runnable, BindRunType, |
| - BoundArgsType>* bind_state) |
| - : CallbackBase(bind_state) { |
| - |
| - // Force the assignment to a local variable of PolymorphicInvoke |
| - // so the compiler will typecheck that the passed in Run() method has |
| - // the correct type. |
| - PolymorphicInvoke invoke_func = |
| - &internal::BindState<Runnable, BindRunType, BoundArgsType> |
| - ::InvokerType::Run; |
| - polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func); |
| - } |
| - |
| - bool Equals(const Callback& other) const { |
| - return CallbackBase::Equals(other); |
| - } |
| - |
| - R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1, |
| - typename internal::CallbackParamTraits<A2>::ForwardType a2, |
| - typename internal::CallbackParamTraits<A3>::ForwardType a3, |
| - typename internal::CallbackParamTraits<A4>::ForwardType a4, |
| - typename internal::CallbackParamTraits<A5>::ForwardType a5, |
| - typename internal::CallbackParamTraits<A6>::ForwardType a6, |
| - typename internal::CallbackParamTraits<A7>::ForwardType a7) const { |
| - PolymorphicInvoke f = |
| - reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_); |
| - |
| - return f(bind_state_.get(), internal::CallbackForward(a1), |
| - internal::CallbackForward(a2), |
| - internal::CallbackForward(a3), |
| - internal::CallbackForward(a4), |
| - internal::CallbackForward(a5), |
| - internal::CallbackForward(a6), |
| - internal::CallbackForward(a7)); |
| - } |
| - |
| - private: |
| - typedef R(*PolymorphicInvoke)( |
| - internal::BindStateBase*, |
| - typename internal::CallbackParamTraits<A1>::ForwardType, |
| - typename internal::CallbackParamTraits<A2>::ForwardType, |
| - typename internal::CallbackParamTraits<A3>::ForwardType, |
| - typename internal::CallbackParamTraits<A4>::ForwardType, |
| - typename internal::CallbackParamTraits<A5>::ForwardType, |
| - typename internal::CallbackParamTraits<A6>::ForwardType, |
| - typename internal::CallbackParamTraits<A7>::ForwardType); |
| - |
| -}; |
| - |
| - |
| // Syntactic sugar to make Callback<void(void)> easier to declare since it |
| // will be used in a lot of APIs with delayed execution. |
| typedef Callback<void(void)> Closure; |
| } // namespace base |
| -#endif // BASE_CALLBACK_H |
| +#endif // BASE_CALLBACK_H_ |
|
awong
2014/10/07 18:45:39
Oooh...nice catch.
|