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

Side by Side Diff: base/bind_internal.h

Issue 6561004: Callback support for __fastcall and __stdcall functions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/base
Patch Set: endif Created 9 years, 10 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/base.gypi ('k') | base/bind_internal.h.pump » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // This file was GENERATED by command: 1 // This file was GENERATED by command:
2 // pump.py bind_internal.h.pump 2 // pump.py bind_internal.h.pump
3 // DO NOT EDIT BY HAND!!! 3 // DO NOT EDIT BY HAND!!!
4 4
5 5
6 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 6 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
7 // Use of this source code is governed by a BSD-style license that can be 7 // Use of this source code is governed by a BSD-style license that can be
8 // found in the LICENSE file. 8 // found in the LICENSE file.
9 9
10 #ifndef BASE_BIND_INTERNAL_H_ 10 #ifndef BASE_BIND_INTERNAL_H_
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 // 60 //
61 // By normalizing the function signature, we reduce function_type to exactly 2. 61 // By normalizing the function signature, we reduce function_type to exactly 2.
62 62
63 template <typename Sig> 63 template <typename Sig>
64 struct FunctionTraits; 64 struct FunctionTraits;
65 65
66 // Function: Arity 0. 66 // Function: Arity 0.
67 template <typename R> 67 template <typename R>
68 struct FunctionTraits<R(*)()> { 68 struct FunctionTraits<R(*)()> {
69 typedef R (*NormalizedSig)(); 69 typedef R (*NormalizedSig)();
70 typedef base::false_type IsMethod; 70 typedef false_type IsMethod;
71 }; 71 };
72 72
73 // Method: Arity 0. 73 // Method: Arity 0.
74 template <typename R, typename T> 74 template <typename R, typename T>
75 struct FunctionTraits<R(T::*)()> { 75 struct FunctionTraits<R(T::*)()> {
76 typedef R (T::*NormalizedSig)(); 76 typedef R (T::*NormalizedSig)();
77 typedef base::true_type IsMethod; 77 typedef true_type IsMethod;
78 }; 78 };
79 79
80 // Const Method: Arity 0. 80 // Const Method: Arity 0.
81 template <typename R, typename T> 81 template <typename R, typename T>
82 struct FunctionTraits<R(T::*)() const> { 82 struct FunctionTraits<R(T::*)() const> {
83 typedef R (T::*NormalizedSig)(); 83 typedef R (T::*NormalizedSig)();
84 typedef base::true_type IsMethod; 84 typedef true_type IsMethod;
85 }; 85 };
86 86
87 // Function: Arity 1. 87 // Function: Arity 1.
88 template <typename R, typename X1> 88 template <typename R, typename X1>
89 struct FunctionTraits<R(*)(X1)> { 89 struct FunctionTraits<R(*)(X1)> {
90 typedef R (*NormalizedSig)(X1); 90 typedef R (*NormalizedSig)(X1);
91 typedef base::false_type IsMethod; 91 typedef false_type IsMethod;
92 }; 92 };
93 93
94 // Method: Arity 1. 94 // Method: Arity 1.
95 template <typename R, typename T, typename X1> 95 template <typename R, typename T, typename X1>
96 struct FunctionTraits<R(T::*)(X1)> { 96 struct FunctionTraits<R(T::*)(X1)> {
97 typedef R (T::*NormalizedSig)(X1); 97 typedef R (T::*NormalizedSig)(X1);
98 typedef base::true_type IsMethod; 98 typedef true_type IsMethod;
99 }; 99 };
100 100
101 // Const Method: Arity 1. 101 // Const Method: Arity 1.
102 template <typename R, typename T, typename X1> 102 template <typename R, typename T, typename X1>
103 struct FunctionTraits<R(T::*)(X1) const> { 103 struct FunctionTraits<R(T::*)(X1) const> {
104 typedef R (T::*NormalizedSig)(X1); 104 typedef R (T::*NormalizedSig)(X1);
105 typedef base::true_type IsMethod; 105 typedef true_type IsMethod;
106 }; 106 };
107 107
108 // Function: Arity 2. 108 // Function: Arity 2.
109 template <typename R, typename X1, typename X2> 109 template <typename R, typename X1, typename X2>
110 struct FunctionTraits<R(*)(X1, X2)> { 110 struct FunctionTraits<R(*)(X1, X2)> {
111 typedef R (*NormalizedSig)(X1, X2); 111 typedef R (*NormalizedSig)(X1, X2);
112 typedef base::false_type IsMethod; 112 typedef false_type IsMethod;
113 }; 113 };
114 114
115 // Method: Arity 2. 115 // Method: Arity 2.
116 template <typename R, typename T, typename X1, typename X2> 116 template <typename R, typename T, typename X1, typename X2>
117 struct FunctionTraits<R(T::*)(X1, X2)> { 117 struct FunctionTraits<R(T::*)(X1, X2)> {
118 typedef R (T::*NormalizedSig)(X1, X2); 118 typedef R (T::*NormalizedSig)(X1, X2);
119 typedef base::true_type IsMethod; 119 typedef true_type IsMethod;
120 }; 120 };
121 121
122 // Const Method: Arity 2. 122 // Const Method: Arity 2.
123 template <typename R, typename T, typename X1, typename X2> 123 template <typename R, typename T, typename X1, typename X2>
124 struct FunctionTraits<R(T::*)(X1, X2) const> { 124 struct FunctionTraits<R(T::*)(X1, X2) const> {
125 typedef R (T::*NormalizedSig)(X1, X2); 125 typedef R (T::*NormalizedSig)(X1, X2);
126 typedef base::true_type IsMethod; 126 typedef true_type IsMethod;
127 }; 127 };
128 128
129 // Function: Arity 3. 129 // Function: Arity 3.
130 template <typename R, typename X1, typename X2, typename X3> 130 template <typename R, typename X1, typename X2, typename X3>
131 struct FunctionTraits<R(*)(X1, X2, X3)> { 131 struct FunctionTraits<R(*)(X1, X2, X3)> {
132 typedef R (*NormalizedSig)(X1, X2, X3); 132 typedef R (*NormalizedSig)(X1, X2, X3);
133 typedef base::false_type IsMethod; 133 typedef false_type IsMethod;
134 }; 134 };
135 135
136 // Method: Arity 3. 136 // Method: Arity 3.
137 template <typename R, typename T, typename X1, typename X2, typename X3> 137 template <typename R, typename T, typename X1, typename X2, typename X3>
138 struct FunctionTraits<R(T::*)(X1, X2, X3)> { 138 struct FunctionTraits<R(T::*)(X1, X2, X3)> {
139 typedef R (T::*NormalizedSig)(X1, X2, X3); 139 typedef R (T::*NormalizedSig)(X1, X2, X3);
140 typedef base::true_type IsMethod; 140 typedef true_type IsMethod;
141 }; 141 };
142 142
143 // Const Method: Arity 3. 143 // Const Method: Arity 3.
144 template <typename R, typename T, typename X1, typename X2, typename X3> 144 template <typename R, typename T, typename X1, typename X2, typename X3>
145 struct FunctionTraits<R(T::*)(X1, X2, X3) const> { 145 struct FunctionTraits<R(T::*)(X1, X2, X3) const> {
146 typedef R (T::*NormalizedSig)(X1, X2, X3); 146 typedef R (T::*NormalizedSig)(X1, X2, X3);
147 typedef base::true_type IsMethod; 147 typedef true_type IsMethod;
148 }; 148 };
149 149
150 // Function: Arity 4. 150 // Function: Arity 4.
151 template <typename R, typename X1, typename X2, typename X3, typename X4> 151 template <typename R, typename X1, typename X2, typename X3, typename X4>
152 struct FunctionTraits<R(*)(X1, X2, X3, X4)> { 152 struct FunctionTraits<R(*)(X1, X2, X3, X4)> {
153 typedef R (*NormalizedSig)(X1, X2, X3, X4); 153 typedef R (*NormalizedSig)(X1, X2, X3, X4);
154 typedef base::false_type IsMethod; 154 typedef false_type IsMethod;
155 }; 155 };
156 156
157 // Method: Arity 4. 157 // Method: Arity 4.
158 template <typename R, typename T, typename X1, typename X2, typename X3, 158 template <typename R, typename T, typename X1, typename X2, typename X3,
159 typename X4> 159 typename X4>
160 struct FunctionTraits<R(T::*)(X1, X2, X3, X4)> { 160 struct FunctionTraits<R(T::*)(X1, X2, X3, X4)> {
161 typedef R (T::*NormalizedSig)(X1, X2, X3, X4); 161 typedef R (T::*NormalizedSig)(X1, X2, X3, X4);
162 typedef base::true_type IsMethod; 162 typedef true_type IsMethod;
163 }; 163 };
164 164
165 // Const Method: Arity 4. 165 // Const Method: Arity 4.
166 template <typename R, typename T, typename X1, typename X2, typename X3, 166 template <typename R, typename T, typename X1, typename X2, typename X3,
167 typename X4> 167 typename X4>
168 struct FunctionTraits<R(T::*)(X1, X2, X3, X4) const> { 168 struct FunctionTraits<R(T::*)(X1, X2, X3, X4) const> {
169 typedef R (T::*NormalizedSig)(X1, X2, X3, X4); 169 typedef R (T::*NormalizedSig)(X1, X2, X3, X4);
170 typedef base::true_type IsMethod; 170 typedef true_type IsMethod;
171 }; 171 };
172 172
173 // Function: Arity 5. 173 // Function: Arity 5.
174 template <typename R, typename X1, typename X2, typename X3, typename X4, 174 template <typename R, typename X1, typename X2, typename X3, typename X4,
175 typename X5> 175 typename X5>
176 struct FunctionTraits<R(*)(X1, X2, X3, X4, X5)> { 176 struct FunctionTraits<R(*)(X1, X2, X3, X4, X5)> {
177 typedef R (*NormalizedSig)(X1, X2, X3, X4, X5); 177 typedef R (*NormalizedSig)(X1, X2, X3, X4, X5);
178 typedef base::false_type IsMethod; 178 typedef false_type IsMethod;
179 }; 179 };
180 180
181 // Method: Arity 5. 181 // Method: Arity 5.
182 template <typename R, typename T, typename X1, typename X2, typename X3, 182 template <typename R, typename T, typename X1, typename X2, typename X3,
183 typename X4, typename X5> 183 typename X4, typename X5>
184 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5)> { 184 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5)> {
185 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5); 185 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5);
186 typedef base::true_type IsMethod; 186 typedef true_type IsMethod;
187 }; 187 };
188 188
189 // Const Method: Arity 5. 189 // Const Method: Arity 5.
190 template <typename R, typename T, typename X1, typename X2, typename X3, 190 template <typename R, typename T, typename X1, typename X2, typename X3,
191 typename X4, typename X5> 191 typename X4, typename X5>
192 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5) const> { 192 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5) const> {
193 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5); 193 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5);
194 typedef base::true_type IsMethod; 194 typedef true_type IsMethod;
195 }; 195 };
196 196
197 // Function: Arity 6. 197 // Function: Arity 6.
198 template <typename R, typename X1, typename X2, typename X3, typename X4, 198 template <typename R, typename X1, typename X2, typename X3, typename X4,
199 typename X5, typename X6> 199 typename X5, typename X6>
200 struct FunctionTraits<R(*)(X1, X2, X3, X4, X5, X6)> { 200 struct FunctionTraits<R(*)(X1, X2, X3, X4, X5, X6)> {
201 typedef R (*NormalizedSig)(X1, X2, X3, X4, X5, X6); 201 typedef R (*NormalizedSig)(X1, X2, X3, X4, X5, X6);
202 typedef base::false_type IsMethod; 202 typedef false_type IsMethod;
203 }; 203 };
204 204
205 // Method: Arity 6. 205 // Method: Arity 6.
206 template <typename R, typename T, typename X1, typename X2, typename X3, 206 template <typename R, typename T, typename X1, typename X2, typename X3,
207 typename X4, typename X5, typename X6> 207 typename X4, typename X5, typename X6>
208 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6)> { 208 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6)> {
209 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6); 209 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6);
210 typedef base::true_type IsMethod; 210 typedef true_type IsMethod;
211 }; 211 };
212 212
213 // Const Method: Arity 6. 213 // Const Method: Arity 6.
214 template <typename R, typename T, typename X1, typename X2, typename X3, 214 template <typename R, typename T, typename X1, typename X2, typename X3,
215 typename X4, typename X5, typename X6> 215 typename X4, typename X5, typename X6>
216 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6) const> { 216 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6) const> {
217 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6); 217 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6);
218 typedef base::true_type IsMethod; 218 typedef true_type IsMethod;
219 }; 219 };
220 220
221 #if defined(OS_WIN)
willchan no longer on Chromium 2011/02/24 08:00:30 Won't this include it within the base::internal na
awong 2011/02/25 02:07:52 Whoa...crap...yes it does. I have no clue how thi
222 #include "base/bind_internal_win.h"
223 #endif
224
221 // InvokerN<> 225 // InvokerN<>
222 // 226 //
223 // The InvokerN templates contain a static DoInvoke() function that is the key 227 // The InvokerN templates contain a static DoInvoke() function that is the key
224 // to implementing type erasure in the Callback() classes. 228 // to implementing type erasure in the Callback() classes.
225 // 229 //
226 // DoInvoke() is a static function with a fixed signature that is independent 230 // DoInvoke() is a static function with a fixed signature that is independent
227 // of StorageType; its first argument is a pointer to the non-templated common 231 // of StorageType; its first argument is a pointer to the non-templated common
228 // baseclass of StorageType. This lets us store pointer to DoInvoke() in a 232 // baseclass of StorageType. This lets us store pointer to DoInvoke() in a
229 // function pointer that has knowledge of the specific StorageType, and thus 233 // function pointer that has knowledge of the specific StorageType, and thus
230 // no knowledge of the bound function and bound parameter types. 234 // no knowledge of the bound function and bound parameter types.
(...skipping 1147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 typename BindType<P3>::StorageType p3_; 1382 typename BindType<P3>::StorageType p3_;
1379 typename BindType<P4>::StorageType p4_; 1383 typename BindType<P4>::StorageType p4_;
1380 typename BindType<P5>::StorageType p5_; 1384 typename BindType<P5>::StorageType p5_;
1381 typename BindType<P6>::StorageType p6_; 1385 typename BindType<P6>::StorageType p6_;
1382 }; 1386 };
1383 1387
1384 } // namespace internal 1388 } // namespace internal
1385 } // namespace base 1389 } // namespace base
1386 1390
1387 #endif // BASE_BIND_INTERNAL_H_ 1391 #endif // BASE_BIND_INTERNAL_H_
OLDNEW
« no previous file with comments | « base/base.gypi ('k') | base/bind_internal.h.pump » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698