diff options
author | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-23 21:03:03 +0000 |
---|---|---|
committer | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-23 21:03:03 +0000 |
commit | 74141d650ff040128a5e35ba8f721d96b08843a3 (patch) | |
tree | f7ed5d4de304c8ea938a971b143caf5f99918af0 /base/bind_internal_win.h | |
parent | 888fecc63c1020cbc3564e3b9308bc721d842149 (diff) | |
download | chromium_src-74141d650ff040128a5e35ba8f721d96b08843a3.zip chromium_src-74141d650ff040128a5e35ba8f721d96b08843a3.tar.gz chromium_src-74141d650ff040128a5e35ba8f721d96b08843a3.tar.bz2 |
Increase Bind/Callback Arity from 6 -> 11: These go to eleven.
This is only for a build time stress test only. I will revert back to 6 after getting the data.
11 allows for binding of 11 arguments to a function, and 10 arguments to
a method. 10 seemed like a nice round number to try (MSVC's tr1::bind() only supports 10).
Template Growth rate (n == arity):
bind.h: n
bind_internal.h: (n^2 + 20n)/2
bind_internal_win.h: n
callback.h: n
Template growth equation: (n^2 + 26n) / 2
Template growth: 96 -> 203 types
BUG=98542
TEST=try bots. Then we get to watch the bot cycle times.
Review URL: http://codereview.chromium.org/8682015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111410 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/bind_internal_win.h')
-rw-r--r-- | base/bind_internal_win.h | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/base/bind_internal_win.h b/base/bind_internal_win.h index 17d3aa3..1adcd00 100644 --- a/base/bind_internal_win.h +++ b/base/bind_internal_win.h @@ -312,6 +312,291 @@ class RunnableAdapter<R(__fastcall *)(A1, A2, A3, A4, A5, A6)> { R (__fastcall *function_)(A1, A2, A3, A4, A5, A6); }; +// __stdcall Function: Arity 7. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7> +class RunnableAdapter<R(__stdcall *)(A1, A2, A3, A4, A5, A6, A7)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7); + + explicit RunnableAdapter(R(__stdcall *function)(A1, A2, A3, A4, A5, A6, A7)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7) { + return function_(a1, a2, a3, a4, a5, a6, a7); + } + + private: + R (__stdcall *function_)(A1, A2, A3, A4, A5, A6, A7); +}; + +// __fastcall Function: Arity 7. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7> +class RunnableAdapter<R(__fastcall *)(A1, A2, A3, A4, A5, A6, A7)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7); + + explicit RunnableAdapter(R(__fastcall *function)(A1, A2, A3, A4, A5, A6, A7)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7) { + return function_(a1, a2, a3, a4, a5, a6, a7); + } + + private: + R (__fastcall *function_)(A1, A2, A3, A4, A5, A6, A7); +}; + +// __stdcall Function: Arity 8. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7, typename A8> +class RunnableAdapter<R(__stdcall *)(A1, A2, A3, A4, A5, A6, A7, A8)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8); + + explicit RunnableAdapter(R(__stdcall *function)(A1, A2, A3, A4, A5, A6, A7, + A8)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7, + typename CallbackParamTraits<A8>::ForwardType a8) { + return function_(a1, a2, a3, a4, a5, a6, a7, a8); + } + + private: + R (__stdcall *function_)(A1, A2, A3, A4, A5, A6, A7, A8); +}; + +// __fastcall Function: Arity 8. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7, typename A8> +class RunnableAdapter<R(__fastcall *)(A1, A2, A3, A4, A5, A6, A7, A8)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8); + + explicit RunnableAdapter(R(__fastcall *function)(A1, A2, A3, A4, A5, A6, A7, + A8)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7, + typename CallbackParamTraits<A8>::ForwardType a8) { + return function_(a1, a2, a3, a4, a5, a6, a7, a8); + } + + private: + R (__fastcall *function_)(A1, A2, A3, A4, A5, A6, A7, A8); +}; + +// __stdcall Function: Arity 9. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7, typename A8, typename A9> +class RunnableAdapter<R(__stdcall *)(A1, A2, A3, A4, A5, A6, A7, A8, A9)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9); + + explicit RunnableAdapter(R(__stdcall *function)(A1, A2, A3, A4, A5, A6, A7, + A8, A9)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7, + typename CallbackParamTraits<A8>::ForwardType a8, + typename CallbackParamTraits<A9>::ForwardType a9) { + return function_(a1, a2, a3, a4, a5, a6, a7, a8, a9); + } + + private: + R (__stdcall *function_)(A1, A2, A3, A4, A5, A6, A7, A8, A9); +}; + +// __fastcall Function: Arity 9. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7, typename A8, typename A9> +class RunnableAdapter<R(__fastcall *)(A1, A2, A3, A4, A5, A6, A7, A8, A9)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9); + + explicit RunnableAdapter(R(__fastcall *function)(A1, A2, A3, A4, A5, A6, A7, + A8, A9)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7, + typename CallbackParamTraits<A8>::ForwardType a8, + typename CallbackParamTraits<A9>::ForwardType a9) { + return function_(a1, a2, a3, a4, a5, a6, a7, a8, a9); + } + + private: + R (__fastcall *function_)(A1, A2, A3, A4, A5, A6, A7, A8, A9); +}; + +// __stdcall Function: Arity 10. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7, typename A8, typename A9, + typename A10> +class RunnableAdapter<R(__stdcall *)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); + + explicit RunnableAdapter(R(__stdcall *function)(A1, A2, A3, A4, A5, A6, A7, + A8, A9, A10)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7, + typename CallbackParamTraits<A8>::ForwardType a8, + typename CallbackParamTraits<A9>::ForwardType a9, + typename CallbackParamTraits<A10>::ForwardType a10) { + return function_(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } + + private: + R (__stdcall *function_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); +}; + +// __fastcall Function: Arity 10. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7, typename A8, typename A9, + typename A10> +class RunnableAdapter<R(__fastcall *)(A1, A2, A3, A4, A5, A6, A7, A8, A9, + A10)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); + + explicit RunnableAdapter(R(__fastcall *function)(A1, A2, A3, A4, A5, A6, A7, + A8, A9, A10)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7, + typename CallbackParamTraits<A8>::ForwardType a8, + typename CallbackParamTraits<A9>::ForwardType a9, + typename CallbackParamTraits<A10>::ForwardType a10) { + return function_(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } + + private: + R (__fastcall *function_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); +}; + +// __stdcall Function: Arity 11. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7, typename A8, typename A9, + typename A10, typename A11> +class RunnableAdapter<R(__stdcall *)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, + A11)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11); + + explicit RunnableAdapter(R(__stdcall *function)(A1, A2, A3, A4, A5, A6, A7, + A8, A9, A10, A11)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7, + typename CallbackParamTraits<A8>::ForwardType a8, + typename CallbackParamTraits<A9>::ForwardType a9, + typename CallbackParamTraits<A10>::ForwardType a10, + typename CallbackParamTraits<A11>::ForwardType a11) { + return function_(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } + + private: + R (__stdcall *function_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11); +}; + +// __fastcall Function: Arity 11. +template <typename R, typename A1, typename A2, typename A3, typename A4, + typename A5, typename A6, typename A7, typename A8, typename A9, + typename A10, typename A11> +class RunnableAdapter<R(__fastcall *)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, + A11)> { + public: + typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11); + + explicit RunnableAdapter(R(__fastcall *function)(A1, A2, A3, A4, A5, A6, A7, + A8, A9, A10, A11)) + : function_(function) { + } + + R Run(typename CallbackParamTraits<A1>::ForwardType a1, + typename CallbackParamTraits<A2>::ForwardType a2, + typename CallbackParamTraits<A3>::ForwardType a3, + typename CallbackParamTraits<A4>::ForwardType a4, + typename CallbackParamTraits<A5>::ForwardType a5, + typename CallbackParamTraits<A6>::ForwardType a6, + typename CallbackParamTraits<A7>::ForwardType a7, + typename CallbackParamTraits<A8>::ForwardType a8, + typename CallbackParamTraits<A9>::ForwardType a9, + typename CallbackParamTraits<A10>::ForwardType a10, + typename CallbackParamTraits<A11>::ForwardType a11) { + return function_(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } + + private: + R (__fastcall *function_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11); +}; + } // namespace internal } // namespace base |