diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-19 21:45:15 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-19 21:45:15 +0000 |
commit | 7fde4708eada3a3f1b8f5f0ec77aa5a8d4f054b2 (patch) | |
tree | a931ab06402d4ab322e777fa907526d00a72d3ef /base | |
parent | fc7b441f6e9541d111fadd050d0cbdb6ac761614 (diff) | |
download | chromium_src-7fde4708eada3a3f1b8f5f0ec77aa5a8d4f054b2.zip chromium_src-7fde4708eada3a3f1b8f5f0ec77aa5a8d4f054b2.tar.gz chromium_src-7fde4708eada3a3f1b8f5f0ec77aa5a8d4f054b2.tar.bz2 |
Reverting as an experiment to determine if this caused increased Win build
times.
Revert 105754 - base::Bind: Increase the arity to 7.
This is required by a CL I have in the works.
Stats from builds of Release Chrome target with -j12:
Build time: -0.2%, within the noise.
Size: No change in size of chrome binary.
BUG=98542
TEST=none
R=ajwong@chromium.org,akalin@chromium.org,willchan@chromium.org
Review URL: http://codereview.chromium.org/8306008
TBR=jhawkins@chromium.org
Review URL: http://codereview.chromium.org/8344065
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106386 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r-- | base/bind.h | 20 | ||||
-rw-r--r-- | base/bind.h.pump | 2 | ||||
-rw-r--r-- | base/bind_internal.h | 656 | ||||
-rw-r--r-- | base/bind_internal.h.pump | 16 |
4 files changed, 16 insertions, 678 deletions
diff --git a/base/bind.h b/base/bind.h index 27c6d87..f023308e 100644 --- a/base/bind.h +++ b/base/bind.h @@ -95,17 +95,6 @@ Bind(Sig f, const P1& p1, const P2& p2, const P3& p3, const P4& p4, f, p1, p2, p3, p4, p5, p6)); } -template <typename Sig, typename P1, typename P2, typename P3, typename P4, - typename P5, typename P6, typename P7> -internal::InvokerStorageHolder<internal::InvokerStorage7<Sig,P1, P2, P3, P4, - P5, P6, P7> > -Bind(Sig f, const P1& p1, const P2& p2, const P3& p3, const P4& p4, - const P5& p5, const P6& p6, const P7& p7) { - return internal::MakeInvokerStorageHolder( - new internal::InvokerStorage7<Sig, P1, P2, P3, P4, P5, P6, P7>( - f, p1, p2, p3, p4, p5, p6, p7)); -} - // Specializations to allow binding all the free arguments in a // pre-existing base::Callback<>. This does not give full support for // currying, but is significantly simpler and addresses the use case @@ -151,15 +140,6 @@ base::Closure Bind(const base::Callback<Sig>& callback, const P1& p1, callback, p1, p2, p3, p4, p5, p6); } -template <typename Sig, typename P1, typename P2, typename P3, typename P4, - typename P5, typename P6, typename P7> -base::Closure Bind(const base::Callback<Sig>& callback, const P1& p1, - const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6, - const P7& p7) { - return base::Bind(&internal::BindMoreFunc7<Sig, P1, P2, P3, P4, P5, P6, P7>, - callback, p1, p2, p3, p4, p5, p6, p7); -} - } // namespace base #endif // BASE_BIND_H_ diff --git a/base/bind.h.pump b/base/bind.h.pump index ea94ff0..eca00cd 100644 --- a/base/bind.h.pump +++ b/base/bind.h.pump @@ -5,7 +5,7 @@ $$ $$ http://code.google.com/p/googletest/wiki/PumpManual $$ -$var MAX_ARITY = 7 +$var MAX_ARITY = 6 // Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be diff --git a/base/bind_internal.h b/base/bind_internal.h index 3e0c48b..7beba51 100644 --- a/base/bind_internal.h +++ b/base/bind_internal.h @@ -36,15 +36,15 @@ namespace internal { // The templates below handle the determination of each of these dimensions. // In brief: // -// FunctionTraits<> -- Provides a normalized signature, and other traits. +// FunctionTraits<> -- Provides a normalied signature, and other traits. // InvokerN<> -- Provides a DoInvoke() function that actually executes -// a callback. +// a calback. // InvokerStorageN<> -- Provides storage for the bound parameters, and // typedefs to the above. // IsWeakMethod<> -- Determines if we are binding a method to a WeakPtr<>. // // More details about the design of each class is included in a comment closer -// to their definition. +// to their defition. // IsWeakMethod determines if we are binding a method to a WeakPtr<> for an @@ -61,7 +61,7 @@ struct IsWeakMethod<true, WeakPtr<T> > : public true_type {}; // The FunctionTraits<> template determines the type of function, and also // creates a NormalizedType used to select the InvokerN classes. It turns out // that syntactically, you only really have 2 variations when invoking a -// function pointer: normal, and method. One is invoked func_ptr(arg1). The +// funciton pointer: normal, and method. One is invoked func_ptr(arg1). The // other is invoked (*obj_->method_ptr(arg1)). // // However, in the type system, there are many more distinctions. In standard @@ -71,7 +71,7 @@ struct IsWeakMethod<true, WeakPtr<T> > : public true_type {}; // a normalized signature. // // Having a NormalizedSignature signature, reduces the combinatoric -// complexity of definitions for the InvokerN<> later. Even though there are +// complexity of defintions for the InvokerN<> later. Even though there are // only 2 syntactic variations on invoking a function, without normalizing the // signature, there would need to be one specialization of InvokerN for each // unique (function_type, bound_arg, unbound_args) tuple in order to match all @@ -417,68 +417,6 @@ struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6) const> { }; -// Function: Arity 7. -template <typename R, typename X1, typename X2, typename X3, typename X4, - typename X5, typename X6, typename X7> -struct FunctionTraits<R(*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R (*NormalizedSig)(X1, X2, X3, X4, X5, X6, X7); - typedef false_type IsMethod; - - typedef R Return; - - // Target type for each bound parameter. - typedef X1 B1; - typedef X2 B2; - typedef X3 B3; - typedef X4 B4; - typedef X5 B5; - typedef X6 B6; - typedef X7 B7; - -}; - -// Method: Arity 7. -template <typename R, typename T, typename X1, typename X2, typename X3, - typename X4, typename X5, typename X6, typename X7> -struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6, X7); - typedef true_type IsMethod; - - typedef R Return; - - // Target type for each bound parameter. - typedef T B1; - typedef X1 B2; - typedef X2 B3; - typedef X3 B4; - typedef X4 B5; - typedef X5 B6; - typedef X6 B7; - typedef X7 B8; - -}; - -// Const Method: Arity 7. -template <typename R, typename T, typename X1, typename X2, typename X3, - typename X4, typename X5, typename X6, typename X7> -struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6, X7) const> { - typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6, X7); - typedef true_type IsMethod; - - typedef R Return; - - // Target type for each bound parameter. - typedef T B1; - typedef X1 B2; - typedef X2 B3; - typedef X3 B4; - typedef X4 B5; - typedef X5 B6; - typedef X6 B7; - typedef X7 B8; - -}; - // InvokerN<> // // The InvokerN templates contain a static DoInvoke() function that is the key @@ -486,12 +424,12 @@ struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6, X7) const> { // // DoInvoke() is a static function with a fixed signature that is independent // of StorageType; its first argument is a pointer to the non-templated common -// base class of StorageType. This lets us store pointer to DoInvoke() in a +// baseclass of StorageType. This lets us store pointer to DoInvoke() in a // function pointer that has knowledge of the specific StorageType, and thus // no knowledge of the bound function and bound parameter types. // // As long as we ensure that DoInvoke() is only used with pointers there were -// up-casted from the correct StorageType, we can be sure that execution is +// upcasted from the correct StorageType, we can be sure that execution is // safe. // // The InvokerN templates are the only point that knows the number of bound @@ -632,33 +570,6 @@ struct Invoker0<false, StorageType, R(*)(X1, X2, X3, X4, X5, X6)> { } }; -// Function: Arity 7 -> 7. -template <typename StorageType, typename R,typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6, typename X7> -struct Invoker0<false, StorageType, R(*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X1>::ForwardType, - typename internal::ParamTraits<X2>::ForwardType, - typename internal::ParamTraits<X3>::ForwardType, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType, - typename internal::ParamTraits<X7>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X1>::ForwardType x1, - typename internal::ParamTraits<X2>::ForwardType x2, - typename internal::ParamTraits<X3>::ForwardType x3, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6, - typename internal::ParamTraits<X7>::ForwardType x7) { - StorageType* invoker = static_cast<StorageType*>(base); - return invoker->f_(x1, x2, x3, x4, x5, x6, x7); - } -}; - template <bool IsWeak, typename StorageType, typename NormalizedSig> struct Invoker1; @@ -1003,85 +914,6 @@ struct Invoker1<true, StorageType, void(T::*)(X1, X2, X3, X4, X5)> { } }; -// Function: Arity 7 -> 6. -template <typename StorageType, typename R,typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6, typename X7> -struct Invoker1<false, StorageType, R(*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X2>::ForwardType, - typename internal::ParamTraits<X3>::ForwardType, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType, - typename internal::ParamTraits<X7>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X2>::ForwardType x2, - typename internal::ParamTraits<X3>::ForwardType x3, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6, - typename internal::ParamTraits<X7>::ForwardType x7) { - StorageType* invoker = static_cast<StorageType*>(base); - return invoker->f_(Unwrap(invoker->p1_), x2, x3, x4, x5, x6, x7); - } -}; - -// Method: Arity 6 -> 6. -template <typename StorageType, typename R, typename T, typename X1, - typename X2, typename X3, typename X4, typename X5, typename X6> -struct Invoker1<false, StorageType, R(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X1>::ForwardType, - typename internal::ParamTraits<X2>::ForwardType, - typename internal::ParamTraits<X3>::ForwardType, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X1>::ForwardType x1, - typename internal::ParamTraits<X2>::ForwardType x2, - typename internal::ParamTraits<X3>::ForwardType x3, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - return (Unwrap(invoker->p1_)->*invoker->f_)(x1, x2, x3, x4, x5, x6); - } -}; - -// WeakPtr Method: Arity 6 -> 6. -template <typename StorageType, typename T, typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6> -struct Invoker1<true, StorageType, void(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef void(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X1>::ForwardType, - typename internal::ParamTraits<X2>::ForwardType, - typename internal::ParamTraits<X3>::ForwardType, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static void DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X1>::ForwardType x1, - typename internal::ParamTraits<X2>::ForwardType x2, - typename internal::ParamTraits<X3>::ForwardType x3, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - typename StorageType::P1Traits::StorageType& weak_ptr = invoker->p1_; - if (!weak_ptr.get()) { - return; - } - (weak_ptr->*invoker->f_)(x1, x2, x3, x4, x5, x6); - } -}; - template <bool IsWeak, typename StorageType, typename NormalizedSig> struct Invoker2; @@ -1359,81 +1191,6 @@ struct Invoker2<true, StorageType, void(T::*)(X1, X2, X3, X4, X5)> { } }; -// Function: Arity 7 -> 5. -template <typename StorageType, typename R,typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6, typename X7> -struct Invoker2<false, StorageType, R(*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X3>::ForwardType, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType, - typename internal::ParamTraits<X7>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X3>::ForwardType x3, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6, - typename internal::ParamTraits<X7>::ForwardType x7) { - StorageType* invoker = static_cast<StorageType*>(base); - return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), x3, x4, x5, - x6, x7); - } -}; - -// Method: Arity 6 -> 5. -template <typename StorageType, typename R, typename T, typename X1, - typename X2, typename X3, typename X4, typename X5, typename X6> -struct Invoker2<false, StorageType, R(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X2>::ForwardType, - typename internal::ParamTraits<X3>::ForwardType, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X2>::ForwardType x2, - typename internal::ParamTraits<X3>::ForwardType x3, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), x2, x3, - x4, x5, x6); - } -}; - -// WeakPtr Method: Arity 6 -> 5. -template <typename StorageType, typename T, typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6> -struct Invoker2<true, StorageType, void(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef void(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X2>::ForwardType, - typename internal::ParamTraits<X3>::ForwardType, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static void DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X2>::ForwardType x2, - typename internal::ParamTraits<X3>::ForwardType x3, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - typename StorageType::P1Traits::StorageType& weak_ptr = invoker->p1_; - if (!weak_ptr.get()) { - return; - } - (weak_ptr->*invoker->f_)(Unwrap(invoker->p2_), x2, x3, x4, x5, x6); - } -}; - template <bool IsWeak, typename StorageType, typename NormalizedSig> struct Invoker3; @@ -1654,76 +1411,6 @@ struct Invoker3<true, StorageType, void(T::*)(X1, X2, X3, X4, X5)> { } }; -// Function: Arity 7 -> 4. -template <typename StorageType, typename R,typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6, typename X7> -struct Invoker3<false, StorageType, R(*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType, - typename internal::ParamTraits<X7>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6, - typename internal::ParamTraits<X7>::ForwardType x7) { - StorageType* invoker = static_cast<StorageType*>(base); - return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), - Unwrap(invoker->p3_), x4, x5, x6, x7); - } -}; - -// Method: Arity 6 -> 4. -template <typename StorageType, typename R, typename T, typename X1, - typename X2, typename X3, typename X4, typename X5, typename X6> -struct Invoker3<false, StorageType, R(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X3>::ForwardType, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X3>::ForwardType x3, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), - Unwrap(invoker->p3_), x3, x4, x5, x6); - } -}; - -// WeakPtr Method: Arity 6 -> 4. -template <typename StorageType, typename T, typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6> -struct Invoker3<true, StorageType, void(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef void(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X3>::ForwardType, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static void DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X3>::ForwardType x3, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - typename StorageType::P1Traits::StorageType& weak_ptr = invoker->p1_; - if (!weak_ptr.get()) { - return; - } - (weak_ptr->*invoker->f_)(Unwrap(invoker->p2_), Unwrap(invoker->p3_), x3, - x4, x5, x6); - } -}; - template <bool IsWeak, typename StorageType, typename NormalizedSig> struct Invoker4; @@ -1883,70 +1570,6 @@ struct Invoker4<true, StorageType, void(T::*)(X1, X2, X3, X4, X5)> { } }; -// Function: Arity 7 -> 3. -template <typename StorageType, typename R,typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6, typename X7> -struct Invoker4<false, StorageType, R(*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType, - typename internal::ParamTraits<X7>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6, - typename internal::ParamTraits<X7>::ForwardType x7) { - StorageType* invoker = static_cast<StorageType*>(base); - return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), - Unwrap(invoker->p3_), Unwrap(invoker->p4_), x5, x6, x7); - } -}; - -// Method: Arity 6 -> 3. -template <typename StorageType, typename R, typename T, typename X1, - typename X2, typename X3, typename X4, typename X5, typename X6> -struct Invoker4<false, StorageType, R(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), - Unwrap(invoker->p3_), Unwrap(invoker->p4_), x4, x5, x6); - } -}; - -// WeakPtr Method: Arity 6 -> 3. -template <typename StorageType, typename T, typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6> -struct Invoker4<true, StorageType, void(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef void(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X4>::ForwardType, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static void DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X4>::ForwardType x4, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - typename StorageType::P1Traits::StorageType& weak_ptr = invoker->p1_; - if (!weak_ptr.get()) { - return; - } - (weak_ptr->*invoker->f_)(Unwrap(invoker->p2_), Unwrap(invoker->p3_), - Unwrap(invoker->p4_), x4, x5, x6); - } -}; - template <bool IsWeak, typename StorageType, typename NormalizedSig> struct Invoker5; @@ -2048,66 +1671,6 @@ struct Invoker5<true, StorageType, void(T::*)(X1, X2, X3, X4, X5)> { } }; -// Function: Arity 7 -> 2. -template <typename StorageType, typename R,typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6, typename X7> -struct Invoker5<false, StorageType, R(*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X6>::ForwardType, - typename internal::ParamTraits<X7>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X6>::ForwardType x6, - typename internal::ParamTraits<X7>::ForwardType x7) { - StorageType* invoker = static_cast<StorageType*>(base); - return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), - Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_), x6, - x7); - } -}; - -// Method: Arity 6 -> 2. -template <typename StorageType, typename R, typename T, typename X1, - typename X2, typename X3, typename X4, typename X5, typename X6> -struct Invoker5<false, StorageType, R(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), - Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_), x5, - x6); - } -}; - -// WeakPtr Method: Arity 6 -> 2. -template <typename StorageType, typename T, typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6> -struct Invoker5<true, StorageType, void(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef void(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X5>::ForwardType, - typename internal::ParamTraits<X6>::ForwardType); - - static void DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X5>::ForwardType x5, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - typename StorageType::P1Traits::StorageType& weak_ptr = invoker->p1_; - if (!weak_ptr.get()) { - return; - } - (weak_ptr->*invoker->f_)(Unwrap(invoker->p2_), Unwrap(invoker->p3_), - Unwrap(invoker->p4_), Unwrap(invoker->p5_), x5, x6); - } -}; - template <bool IsWeak, typename StorageType, typename NormalizedSig> struct Invoker6; @@ -2159,112 +1722,6 @@ struct Invoker6<true, StorageType, void(T::*)(X1, X2, X3, X4, X5)> { } }; -// Function: Arity 7 -> 1. -template <typename StorageType, typename R,typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6, typename X7> -struct Invoker6<false, StorageType, R(*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X7>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X7>::ForwardType x7) { - StorageType* invoker = static_cast<StorageType*>(base); - return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), - Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_), - Unwrap(invoker->p6_), x7); - } -}; - -// Method: Arity 6 -> 1. -template <typename StorageType, typename R, typename T, typename X1, - typename X2, typename X3, typename X4, typename X5, typename X6> -struct Invoker6<false, StorageType, R(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X6>::ForwardType); - - static R DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), - Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_), - Unwrap(invoker->p6_), x6); - } -}; - -// WeakPtr Method: Arity 6 -> 1. -template <typename StorageType, typename T, typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6> -struct Invoker6<true, StorageType, void(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef void(*DoInvokeType)( - internal::InvokerStorageBase*, - typename internal::ParamTraits<X6>::ForwardType); - - static void DoInvoke(InvokerStorageBase* base, - typename internal::ParamTraits<X6>::ForwardType x6) { - StorageType* invoker = static_cast<StorageType*>(base); - typename StorageType::P1Traits::StorageType& weak_ptr = invoker->p1_; - if (!weak_ptr.get()) { - return; - } - (weak_ptr->*invoker->f_)(Unwrap(invoker->p2_), Unwrap(invoker->p3_), - Unwrap(invoker->p4_), Unwrap(invoker->p5_), Unwrap(invoker->p6_), x6); - } -}; - -template <bool IsWeak, typename StorageType, typename NormalizedSig> -struct Invoker7; - -// Function: Arity 7 -> 0. -template <typename StorageType, typename R,typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6, typename X7> -struct Invoker7<false, StorageType, R(*)(X1, X2, X3, X4, X5, X6, X7)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*); - - static R DoInvoke(InvokerStorageBase* base) { - StorageType* invoker = static_cast<StorageType*>(base); - return invoker->f_(Unwrap(invoker->p1_), Unwrap(invoker->p2_), - Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_), - Unwrap(invoker->p6_), Unwrap(invoker->p7_)); - } -}; - -// Method: Arity 6 -> 0. -template <typename StorageType, typename R, typename T, typename X1, - typename X2, typename X3, typename X4, typename X5, typename X6> -struct Invoker7<false, StorageType, R(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef R(*DoInvokeType)( - internal::InvokerStorageBase*); - - static R DoInvoke(InvokerStorageBase* base) { - StorageType* invoker = static_cast<StorageType*>(base); - return (Unwrap(invoker->p1_)->*invoker->f_)(Unwrap(invoker->p2_), - Unwrap(invoker->p3_), Unwrap(invoker->p4_), Unwrap(invoker->p5_), - Unwrap(invoker->p6_), Unwrap(invoker->p7_)); - } -}; - -// WeakPtr Method: Arity 6 -> 0. -template <typename StorageType, typename T, typename X1, typename X2, - typename X3, typename X4, typename X5, typename X6> -struct Invoker7<true, StorageType, void(T::*)(X1, X2, X3, X4, X5, X6)> { - typedef void(*DoInvokeType)( - internal::InvokerStorageBase*); - - static void DoInvoke(InvokerStorageBase* base) { - StorageType* invoker = static_cast<StorageType*>(base); - typename StorageType::P1Traits::StorageType& weak_ptr = invoker->p1_; - if (!weak_ptr.get()) { - return; - } - (weak_ptr->*invoker->f_)(Unwrap(invoker->p2_), Unwrap(invoker->p3_), - Unwrap(invoker->p4_), Unwrap(invoker->p5_), Unwrap(invoker->p6_), - Unwrap(invoker->p7_)); - } -}; - // BindMoreFuncN<> // // This set of functions help in fully binding the free parameters in a @@ -2306,14 +1763,6 @@ void BindMoreFunc6(const base::Callback<Sig>& callback, const P1& p1, callback.Run(p1, p2, p3, p4, p5, p6); } -template <typename Sig, typename P1, typename P2, typename P3, typename P4, - typename P5, typename P6, typename P7> -void BindMoreFunc7(const base::Callback<Sig>& callback, const P1& p1, - const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6, - const P7& p7) { - callback.Run(p1, p2, p3, p4, p5, p6, p7); -} - // InvokerStorageN<> // // These are the actual storage classes for the Invokers. @@ -2740,97 +2189,6 @@ class InvokerStorage6 : public InvokerStorageBase { typename ParamTraits<P6>::StorageType p6_; }; -template <typename Sig, typename P1, typename P2, typename P3, typename P4, - typename P5, typename P6, typename P7> -class InvokerStorage7 : public InvokerStorageBase { - public: - typedef InvokerStorage7 StorageType; - typedef FunctionTraits<Sig> TargetTraits; - typedef typename TargetTraits::IsMethod IsMethod; - typedef Sig Signature; - typedef ParamTraits<P1> P1Traits; - typedef ParamTraits<P2> P2Traits; - typedef ParamTraits<P3> P3Traits; - typedef ParamTraits<P4> P4Traits; - typedef ParamTraits<P5> P5Traits; - typedef ParamTraits<P6> P6Traits; - typedef ParamTraits<P7> P7Traits; - typedef Invoker7<IsWeakMethod<IsMethod::value, P1>::value, StorageType, - typename TargetTraits::NormalizedSig> Invoker; - COMPILE_ASSERT(!(IsWeakMethod<IsMethod::value, P1>::value) || - is_void<typename TargetTraits::Return>::value, - weak_ptrs_can_only_bind_to_methods_without_return_values); - - // For methods, we need to be careful for parameter 1. We skip the - // scoped_refptr check because the binder itself takes care of this. We also - // disallow binding of an array as the method's target object. - COMPILE_ASSERT(IsMethod::value || - internal::NeedsScopedRefptrButGetsRawPtr< - typename ParamTraits<P1>::StorageType>::value == 0, - p1_is_refcounted_type_and_needs_scoped_refptr); - COMPILE_ASSERT(!IsMethod::value || !is_array<P1>::value, - first_bound_argument_to_method_cannot_be_array); - COMPILE_ASSERT(internal::NeedsScopedRefptrButGetsRawPtr< - typename ParamTraits<P2>::StorageType>::value == 0, - p2_is_refcounted_type_and_needs_scoped_refptr); - COMPILE_ASSERT(internal::NeedsScopedRefptrButGetsRawPtr< - typename ParamTraits<P3>::StorageType>::value == 0, - p3_is_refcounted_type_and_needs_scoped_refptr); - COMPILE_ASSERT(internal::NeedsScopedRefptrButGetsRawPtr< - typename ParamTraits<P4>::StorageType>::value == 0, - p4_is_refcounted_type_and_needs_scoped_refptr); - COMPILE_ASSERT(internal::NeedsScopedRefptrButGetsRawPtr< - typename ParamTraits<P5>::StorageType>::value == 0, - p5_is_refcounted_type_and_needs_scoped_refptr); - COMPILE_ASSERT(internal::NeedsScopedRefptrButGetsRawPtr< - typename ParamTraits<P6>::StorageType>::value == 0, - p6_is_refcounted_type_and_needs_scoped_refptr); - COMPILE_ASSERT(internal::NeedsScopedRefptrButGetsRawPtr< - typename ParamTraits<P7>::StorageType>::value == 0, - p7_is_refcounted_type_and_needs_scoped_refptr); - - // Do not allow binding a non-const reference parameter. Non-const reference - // parameters are disallowed by the Google style guide. Also, binding a - // non-const reference parameter can make for subtle bugs because the - // invoked function will receive a reference to the stored copy of the - // argument and not the original. - COMPILE_ASSERT( - !( is_non_const_reference<typename TargetTraits::B1>::value || - is_non_const_reference<typename TargetTraits::B2>::value || - is_non_const_reference<typename TargetTraits::B3>::value || - is_non_const_reference<typename TargetTraits::B4>::value || - is_non_const_reference<typename TargetTraits::B5>::value || - is_non_const_reference<typename TargetTraits::B6>::value || - is_non_const_reference<typename TargetTraits::B7>::value ), - do_not_bind_functions_with_nonconst_ref); - - - InvokerStorage7(Sig f, const P1& p1, const P2& p2, const P3& p3, - const P4& p4, const P5& p5, const P6& p6, const P7& p7) - : f_(f), p1_(static_cast<typename ParamTraits<P1>::StorageType>(p1)), - p2_(static_cast<typename ParamTraits<P2>::StorageType>(p2)), - p3_(static_cast<typename ParamTraits<P3>::StorageType>(p3)), - p4_(static_cast<typename ParamTraits<P4>::StorageType>(p4)), - p5_(static_cast<typename ParamTraits<P5>::StorageType>(p5)), - p6_(static_cast<typename ParamTraits<P6>::StorageType>(p6)), - p7_(static_cast<typename ParamTraits<P7>::StorageType>(p7)) { - MaybeRefcount<IsMethod, P1>::AddRef(p1_); - } - - virtual ~InvokerStorage7() { - MaybeRefcount<IsMethod, P1>::Release(p1_); - } - - Sig f_; - typename ParamTraits<P1>::StorageType p1_; - typename ParamTraits<P2>::StorageType p2_; - typename ParamTraits<P3>::StorageType p3_; - typename ParamTraits<P4>::StorageType p4_; - typename ParamTraits<P5>::StorageType p5_; - typename ParamTraits<P6>::StorageType p6_; - typename ParamTraits<P7>::StorageType p7_; -}; - } // namespace internal } // namespace base diff --git a/base/bind_internal.h.pump b/base/bind_internal.h.pump index d72b2be..429e13f 100644 --- a/base/bind_internal.h.pump +++ b/base/bind_internal.h.pump @@ -5,7 +5,7 @@ $$ $$ http://code.google.com/p/googletest/wiki/PumpManual $$ -$var MAX_ARITY = 7 +$var MAX_ARITY = 6 // Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be @@ -39,15 +39,15 @@ namespace internal { // The templates below handle the determination of each of these dimensions. // In brief: // -// FunctionTraits<> -- Provides a normalized signature, and other traits. +// FunctionTraits<> -- Provides a normalied signature, and other traits. // InvokerN<> -- Provides a DoInvoke() function that actually executes -// a callback. +// a calback. // InvokerStorageN<> -- Provides storage for the bound parameters, and // typedefs to the above. // IsWeakMethod<> -- Determines if we are binding a method to a WeakPtr<>. // // More details about the design of each class is included in a comment closer -// to their definition. +// to their defition. // IsWeakMethod determines if we are binding a method to a WeakPtr<> for an @@ -64,7 +64,7 @@ struct IsWeakMethod<true, WeakPtr<T> > : public true_type {}; // The FunctionTraits<> template determines the type of function, and also // creates a NormalizedType used to select the InvokerN classes. It turns out // that syntactically, you only really have 2 variations when invoking a -// function pointer: normal, and method. One is invoked func_ptr(arg1). The +// funciton pointer: normal, and method. One is invoked func_ptr(arg1). The // other is invoked (*obj_->method_ptr(arg1)). // // However, in the type system, there are many more distinctions. In standard @@ -74,7 +74,7 @@ struct IsWeakMethod<true, WeakPtr<T> > : public true_type {}; // a normalized signature. // // Having a NormalizedSignature signature, reduces the combinatoric -// complexity of definitions for the InvokerN<> later. Even though there are +// complexity of defintions for the InvokerN<> later. Even though there are // only 2 syntactic variations on invoking a function, without normalizing the // signature, there would need to be one specialization of InvokerN for each // unique (function_type, bound_arg, unbound_args) tuple in order to match all @@ -157,12 +157,12 @@ $for ARG [[ // // DoInvoke() is a static function with a fixed signature that is independent // of StorageType; its first argument is a pointer to the non-templated common -// base class of StorageType. This lets us store pointer to DoInvoke() in a +// baseclass of StorageType. This lets us store pointer to DoInvoke() in a // function pointer that has knowledge of the specific StorageType, and thus // no knowledge of the bound function and bound parameter types. // // As long as we ensure that DoInvoke() is only used with pointers there were -// up-casted from the correct StorageType, we can be sure that execution is +// upcasted from the correct StorageType, we can be sure that execution is // safe. // // The InvokerN templates are the only point that knows the number of bound |