Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Unified Diff: base/bind_internal_win.h

Issue 8483003: Callback API Change: Reimplement Bind(); support IgnoreResult, full currying, and use less types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/bind_internal.h.pump ('k') | base/bind_internal_win.h.pump » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/bind_internal_win.h
diff --git a/base/bind_internal_win.h b/base/bind_internal_win.h
index 250f472ca817c7b32560c28efa0dfe5dd723bf03..17d3aa3f625c367cedd1b8c1b39a174a76843e09 100644
--- a/base/bind_internal_win.h
+++ b/base/bind_internal_win.h
@@ -8,7 +8,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Specializations of FunctionTraits<> for Windows specific calling
+// Specializations of RunnableAdapter<> for Windows specific calling
// conventions. Please see base/bind_internal.h for more info.
#ifndef BASE_BIND_INTERNAL_WIN_H_
@@ -23,203 +23,293 @@
namespace base {
namespace internal {
-template <typename Sig>
-struct FunctionTraits;
+template <typename Functor>
+class RunnableAdapter;
// __stdcall Function: Arity 0.
template <typename R>
-struct FunctionTraits<R(__stdcall *)()> {
- typedef R (*NormalizedSig)();
- typedef false_type IsMethod;
+class RunnableAdapter<R(__stdcall *)()> {
+ public:
+ typedef R (RunType)();
- typedef R Return;
+ explicit RunnableAdapter(R(__stdcall *function)())
+ : function_(function) {
+ }
+
+ R Run() {
+ return function_();
+ }
+
+ private:
+ R (__stdcall *function_)();
};
// __fastcall Function: Arity 0.
template <typename R>
-struct FunctionTraits<R(__fastcall *)()> {
- typedef R (*NormalizedSig)();
- typedef false_type IsMethod;
+class RunnableAdapter<R(__fastcall *)()> {
+ public:
+ typedef R (RunType)();
+
+ explicit RunnableAdapter(R(__fastcall *function)())
+ : function_(function) {
+ }
+
+ R Run() {
+ return function_();
+ }
- typedef R Return;
+ private:
+ R (__fastcall *function_)();
};
// __stdcall Function: Arity 1.
-template <typename R, typename X1>
-struct FunctionTraits<R(__stdcall *)(X1)> {
- typedef R (*NormalizedSig)(X1);
- typedef false_type IsMethod;
+template <typename R, typename A1>
+class RunnableAdapter<R(__stdcall *)(A1)> {
+ public:
+ typedef R (RunType)(A1);
- typedef R Return;
+ explicit RunnableAdapter(R(__stdcall *function)(A1))
+ : function_(function) {
+ }
- // Target type for each bound parameter.
- typedef X1 B1;
+ R Run(typename CallbackParamTraits<A1>::ForwardType a1) {
+ return function_(a1);
+ }
+
+ private:
+ R (__stdcall *function_)(A1);
};
// __fastcall Function: Arity 1.
-template <typename R, typename X1>
-struct FunctionTraits<R(__fastcall *)(X1)> {
- typedef R (*NormalizedSig)(X1);
- typedef false_type IsMethod;
+template <typename R, typename A1>
+class RunnableAdapter<R(__fastcall *)(A1)> {
+ public:
+ typedef R (RunType)(A1);
+
+ explicit RunnableAdapter(R(__fastcall *function)(A1))
+ : function_(function) {
+ }
- typedef R Return;
+ R Run(typename CallbackParamTraits<A1>::ForwardType a1) {
+ return function_(a1);
+ }
- // Target type for each bound parameter.
- typedef X1 B1;
+ private:
+ R (__fastcall *function_)(A1);
};
// __stdcall Function: Arity 2.
-template <typename R, typename X1, typename X2>
-struct FunctionTraits<R(__stdcall *)(X1, X2)> {
- typedef R (*NormalizedSig)(X1, X2);
- typedef false_type IsMethod;
-
- typedef R Return;
-
- // Target type for each bound parameter.
- typedef X1 B1;
- typedef X2 B2;
+template <typename R, typename A1, typename A2>
+class RunnableAdapter<R(__stdcall *)(A1, A2)> {
+ public:
+ typedef R (RunType)(A1, A2);
+
+ explicit RunnableAdapter(R(__stdcall *function)(A1, A2))
+ : function_(function) {
+ }
+
+ R Run(typename CallbackParamTraits<A1>::ForwardType a1,
+ typename CallbackParamTraits<A2>::ForwardType a2) {
+ return function_(a1, a2);
+ }
+
+ private:
+ R (__stdcall *function_)(A1, A2);
};
// __fastcall Function: Arity 2.
-template <typename R, typename X1, typename X2>
-struct FunctionTraits<R(__fastcall *)(X1, X2)> {
- typedef R (*NormalizedSig)(X1, X2);
- typedef false_type IsMethod;
-
- typedef R Return;
-
- // Target type for each bound parameter.
- typedef X1 B1;
- typedef X2 B2;
+template <typename R, typename A1, typename A2>
+class RunnableAdapter<R(__fastcall *)(A1, A2)> {
+ public:
+ typedef R (RunType)(A1, A2);
+
+ explicit RunnableAdapter(R(__fastcall *function)(A1, A2))
+ : function_(function) {
+ }
+
+ R Run(typename CallbackParamTraits<A1>::ForwardType a1,
+ typename CallbackParamTraits<A2>::ForwardType a2) {
+ return function_(a1, a2);
+ }
+
+ private:
+ R (__fastcall *function_)(A1, A2);
};
// __stdcall Function: Arity 3.
-template <typename R, typename X1, typename X2, typename X3>
-struct FunctionTraits<R(__stdcall *)(X1, X2, X3)> {
- typedef R (*NormalizedSig)(X1, X2, X3);
- typedef false_type IsMethod;
-
- typedef R Return;
-
- // Target type for each bound parameter.
- typedef X1 B1;
- typedef X2 B2;
- typedef X3 B3;
+template <typename R, typename A1, typename A2, typename A3>
+class RunnableAdapter<R(__stdcall *)(A1, A2, A3)> {
+ public:
+ typedef R (RunType)(A1, A2, A3);
+
+ explicit RunnableAdapter(R(__stdcall *function)(A1, A2, A3))
+ : function_(function) {
+ }
+
+ R Run(typename CallbackParamTraits<A1>::ForwardType a1,
+ typename CallbackParamTraits<A2>::ForwardType a2,
+ typename CallbackParamTraits<A3>::ForwardType a3) {
+ return function_(a1, a2, a3);
+ }
+
+ private:
+ R (__stdcall *function_)(A1, A2, A3);
};
// __fastcall Function: Arity 3.
-template <typename R, typename X1, typename X2, typename X3>
-struct FunctionTraits<R(__fastcall *)(X1, X2, X3)> {
- typedef R (*NormalizedSig)(X1, X2, X3);
- typedef false_type IsMethod;
-
- typedef R Return;
-
- // Target type for each bound parameter.
- typedef X1 B1;
- typedef X2 B2;
- typedef X3 B3;
+template <typename R, typename A1, typename A2, typename A3>
+class RunnableAdapter<R(__fastcall *)(A1, A2, A3)> {
+ public:
+ typedef R (RunType)(A1, A2, A3);
+
+ explicit RunnableAdapter(R(__fastcall *function)(A1, A2, A3))
+ : function_(function) {
+ }
+
+ R Run(typename CallbackParamTraits<A1>::ForwardType a1,
+ typename CallbackParamTraits<A2>::ForwardType a2,
+ typename CallbackParamTraits<A3>::ForwardType a3) {
+ return function_(a1, a2, a3);
+ }
+
+ private:
+ R (__fastcall *function_)(A1, A2, A3);
};
// __stdcall Function: Arity 4.
-template <typename R, typename X1, typename X2, typename X3, typename X4>
-struct FunctionTraits<R(__stdcall *)(X1, X2, X3, X4)> {
- typedef R (*NormalizedSig)(X1, X2, X3, X4);
- 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;
+template <typename R, typename A1, typename A2, typename A3, typename A4>
+class RunnableAdapter<R(__stdcall *)(A1, A2, A3, A4)> {
+ public:
+ typedef R (RunType)(A1, A2, A3, A4);
+
+ explicit RunnableAdapter(R(__stdcall *function)(A1, A2, A3, A4))
+ : function_(function) {
+ }
+
+ R Run(typename CallbackParamTraits<A1>::ForwardType a1,
+ typename CallbackParamTraits<A2>::ForwardType a2,
+ typename CallbackParamTraits<A3>::ForwardType a3,
+ typename CallbackParamTraits<A4>::ForwardType a4) {
+ return function_(a1, a2, a3, a4);
+ }
+
+ private:
+ R (__stdcall *function_)(A1, A2, A3, A4);
};
// __fastcall Function: Arity 4.
-template <typename R, typename X1, typename X2, typename X3, typename X4>
-struct FunctionTraits<R(__fastcall *)(X1, X2, X3, X4)> {
- typedef R (*NormalizedSig)(X1, X2, X3, X4);
- 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;
+template <typename R, typename A1, typename A2, typename A3, typename A4>
+class RunnableAdapter<R(__fastcall *)(A1, A2, A3, A4)> {
+ public:
+ typedef R (RunType)(A1, A2, A3, A4);
+
+ explicit RunnableAdapter(R(__fastcall *function)(A1, A2, A3, A4))
+ : function_(function) {
+ }
+
+ R Run(typename CallbackParamTraits<A1>::ForwardType a1,
+ typename CallbackParamTraits<A2>::ForwardType a2,
+ typename CallbackParamTraits<A3>::ForwardType a3,
+ typename CallbackParamTraits<A4>::ForwardType a4) {
+ return function_(a1, a2, a3, a4);
+ }
+
+ private:
+ R (__fastcall *function_)(A1, A2, A3, A4);
};
// __stdcall Function: Arity 5.
-template <typename R, typename X1, typename X2, typename X3, typename X4,
- typename X5>
-struct FunctionTraits<R(__stdcall *)(X1, X2, X3, X4, X5)> {
- typedef R (*NormalizedSig)(X1, X2, X3, X4, X5);
- 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;
+template <typename R, typename A1, typename A2, typename A3, typename A4,
+ typename A5>
+class RunnableAdapter<R(__stdcall *)(A1, A2, A3, A4, A5)> {
+ public:
+ typedef R (RunType)(A1, A2, A3, A4, A5);
+
+ explicit RunnableAdapter(R(__stdcall *function)(A1, A2, A3, A4, A5))
+ : 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) {
+ return function_(a1, a2, a3, a4, a5);
+ }
+
+ private:
+ R (__stdcall *function_)(A1, A2, A3, A4, A5);
};
// __fastcall Function: Arity 5.
-template <typename R, typename X1, typename X2, typename X3, typename X4,
- typename X5>
-struct FunctionTraits<R(__fastcall *)(X1, X2, X3, X4, X5)> {
- typedef R (*NormalizedSig)(X1, X2, X3, X4, X5);
- 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;
+template <typename R, typename A1, typename A2, typename A3, typename A4,
+ typename A5>
+class RunnableAdapter<R(__fastcall *)(A1, A2, A3, A4, A5)> {
+ public:
+ typedef R (RunType)(A1, A2, A3, A4, A5);
+
+ explicit RunnableAdapter(R(__fastcall *function)(A1, A2, A3, A4, A5))
+ : 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) {
+ return function_(a1, a2, a3, a4, a5);
+ }
+
+ private:
+ R (__fastcall *function_)(A1, A2, A3, A4, A5);
};
// __stdcall Function: Arity 6.
-template <typename R, typename X1, typename X2, typename X3, typename X4,
- typename X5, typename X6>
-struct FunctionTraits<R(__stdcall *)(X1, X2, X3, X4, X5, X6)> {
- typedef R (*NormalizedSig)(X1, X2, X3, X4, X5, X6);
- 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;
+template <typename R, typename A1, typename A2, typename A3, typename A4,
+ typename A5, typename A6>
+class RunnableAdapter<R(__stdcall *)(A1, A2, A3, A4, A5, A6)> {
+ public:
+ typedef R (RunType)(A1, A2, A3, A4, A5, A6);
+
+ explicit RunnableAdapter(R(__stdcall *function)(A1, A2, A3, A4, A5, A6))
+ : 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) {
+ return function_(a1, a2, a3, a4, a5, a6);
+ }
+
+ private:
+ R (__stdcall *function_)(A1, A2, A3, A4, A5, A6);
};
// __fastcall Function: Arity 6.
-template <typename R, typename X1, typename X2, typename X3, typename X4,
- typename X5, typename X6>
-struct FunctionTraits<R(__fastcall *)(X1, X2, X3, X4, X5, X6)> {
- typedef R (*NormalizedSig)(X1, X2, X3, X4, X5, X6);
- 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;
+template <typename R, typename A1, typename A2, typename A3, typename A4,
+ typename A5, typename A6>
+class RunnableAdapter<R(__fastcall *)(A1, A2, A3, A4, A5, A6)> {
+ public:
+ typedef R (RunType)(A1, A2, A3, A4, A5, A6);
+
+ explicit RunnableAdapter(R(__fastcall *function)(A1, A2, A3, A4, A5, A6))
+ : 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) {
+ return function_(a1, a2, a3, a4, a5, a6);
+ }
+
+ private:
+ R (__fastcall *function_)(A1, A2, A3, A4, A5, A6);
};
} // namespace internal
« no previous file with comments | « base/bind_internal.h.pump ('k') | base/bind_internal_win.h.pump » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698