| OLD | NEW |
| 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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 // and for ignoring return values. This is separate from | 69 // and for ignoring return values. This is separate from |
| 70 // Invoker to avoid creating multiple version of Invoker<> | 70 // Invoker to avoid creating multiple version of Invoker<> |
| 71 // which grows at O(n^2) with the arity. | 71 // which grows at O(n^2) with the arity. |
| 72 // There are |k*ARITY| InvokeHelper types. | 72 // There are |k*ARITY| InvokeHelper types. |
| 73 // Invoker<> -- Unwraps the curried parameters and executes the Runnable. | 73 // Invoker<> -- Unwraps the curried parameters and executes the Runnable. |
| 74 // There are |(ARITY^2 + ARITY)/2| Invoketypes. | 74 // There are |(ARITY^2 + ARITY)/2| Invoketypes. |
| 75 // BindState<> -- Stores the curried parameters, and is the main entry point | 75 // BindState<> -- Stores the curried parameters, and is the main entry point |
| 76 // into the Bind() system, doing most of the type resolution. | 76 // into the Bind() system, doing most of the type resolution. |
| 77 // There are ARITY BindState types. | 77 // There are ARITY BindState types. |
| 78 | 78 |
| 79 | |
| 80 // RunnableAdapter<> | 79 // RunnableAdapter<> |
| 81 // | 80 // |
| 82 // The RunnableAdapter<> templates provide a uniform interface for invoking | 81 // The RunnableAdapter<> templates provide a uniform interface for invoking |
| 83 // a function pointer, method pointer, or const method pointer. The adapter | 82 // a function pointer, method pointer, or const method pointer. The adapter |
| 84 // exposes a Run() method with an appropriate signature. Using this wrapper | 83 // exposes a Run() method with an appropriate signature. Using this wrapper |
| 85 // allows for writing code that supports all three pointer types without | 84 // allows for writing code that supports all three pointer types without |
| 86 // undue repetition. Without it, a lot of code would need to be repeated 3 | 85 // undue repetition. Without it, a lot of code would need to be repeated 3 |
| 87 // times. | 86 // times. |
| 88 // | 87 // |
| 89 // For method pointers and const method pointers the first argument to Run() | 88 // For method pointers and const method pointers the first argument to Run() |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 template <typename R, typename A1> | 159 template <typename R, typename A1> |
| 161 class RunnableAdapter<R(*)(A1)> { | 160 class RunnableAdapter<R(*)(A1)> { |
| 162 public: | 161 public: |
| 163 typedef R (RunType)(A1); | 162 typedef R (RunType)(A1); |
| 164 | 163 |
| 165 explicit RunnableAdapter(R(*function)(A1)) | 164 explicit RunnableAdapter(R(*function)(A1)) |
| 166 : function_(function) { | 165 : function_(function) { |
| 167 } | 166 } |
| 168 | 167 |
| 169 R Run(typename CallbackParamTraits<A1>::ForwardType a1) { | 168 R Run(typename CallbackParamTraits<A1>::ForwardType a1) { |
| 170 return function_(a1); | 169 return function_(BindMoveSupport(a1)); |
| 171 } | 170 } |
| 172 | 171 |
| 173 private: | 172 private: |
| 174 R (*function_)(A1); | 173 R (*function_)(A1); |
| 175 }; | 174 }; |
| 176 | 175 |
| 177 // Method: Arity 1. | 176 // Method: Arity 1. |
| 178 template <typename R, typename T, typename A1> | 177 template <typename R, typename T, typename A1> |
| 179 class RunnableAdapter<R(T::*)(A1)> { | 178 class RunnableAdapter<R(T::*)(A1)> { |
| 180 public: | 179 public: |
| 181 typedef R (RunType)(T*, A1); | 180 typedef R (RunType)(T*, A1); |
| 182 typedef true_type IsMethod; | 181 typedef true_type IsMethod; |
| 183 | 182 |
| 184 explicit RunnableAdapter(R(T::*method)(A1)) | 183 explicit RunnableAdapter(R(T::*method)(A1)) |
| 185 : method_(method) { | 184 : method_(method) { |
| 186 } | 185 } |
| 187 | 186 |
| 188 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1) { | 187 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1) { |
| 189 return (object->*method_)(a1); | 188 return (object->*method_)(BindMoveSupport(a1)); |
| 190 } | 189 } |
| 191 | 190 |
| 192 private: | 191 private: |
| 193 R (T::*method_)(A1); | 192 R (T::*method_)(A1); |
| 194 }; | 193 }; |
| 195 | 194 |
| 196 // Const Method: Arity 1. | 195 // Const Method: Arity 1. |
| 197 template <typename R, typename T, typename A1> | 196 template <typename R, typename T, typename A1> |
| 198 class RunnableAdapter<R(T::*)(A1) const> { | 197 class RunnableAdapter<R(T::*)(A1) const> { |
| 199 public: | 198 public: |
| 200 typedef R (RunType)(const T*, A1); | 199 typedef R (RunType)(const T*, A1); |
| 201 typedef true_type IsMethod; | 200 typedef true_type IsMethod; |
| 202 | 201 |
| 203 explicit RunnableAdapter(R(T::*method)(A1) const) | 202 explicit RunnableAdapter(R(T::*method)(A1) const) |
| 204 : method_(method) { | 203 : method_(method) { |
| 205 } | 204 } |
| 206 | 205 |
| 207 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1) { | 206 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1) { |
| 208 return (object->*method_)(a1); | 207 return (object->*method_)(BindMoveSupport(a1)); |
| 209 } | 208 } |
| 210 | 209 |
| 211 private: | 210 private: |
| 212 R (T::*method_)(A1) const; | 211 R (T::*method_)(A1) const; |
| 213 }; | 212 }; |
| 214 | 213 |
| 215 // Function: Arity 2. | 214 // Function: Arity 2. |
| 216 template <typename R, typename A1, typename A2> | 215 template <typename R, typename A1, typename A2> |
| 217 class RunnableAdapter<R(*)(A1, A2)> { | 216 class RunnableAdapter<R(*)(A1, A2)> { |
| 218 public: | 217 public: |
| 219 typedef R (RunType)(A1, A2); | 218 typedef R (RunType)(A1, A2); |
| 220 | 219 |
| 221 explicit RunnableAdapter(R(*function)(A1, A2)) | 220 explicit RunnableAdapter(R(*function)(A1, A2)) |
| 222 : function_(function) { | 221 : function_(function) { |
| 223 } | 222 } |
| 224 | 223 |
| 225 R Run(typename CallbackParamTraits<A1>::ForwardType a1, | 224 R Run(typename CallbackParamTraits<A1>::ForwardType a1, |
| 226 typename CallbackParamTraits<A2>::ForwardType a2) { | 225 typename CallbackParamTraits<A2>::ForwardType a2) { |
| 227 return function_(a1, a2); | 226 return function_(BindMoveSupport(a1), BindMoveSupport(a2)); |
| 228 } | 227 } |
| 229 | 228 |
| 230 private: | 229 private: |
| 231 R (*function_)(A1, A2); | 230 R (*function_)(A1, A2); |
| 232 }; | 231 }; |
| 233 | 232 |
| 234 // Method: Arity 2. | 233 // Method: Arity 2. |
| 235 template <typename R, typename T, typename A1, typename A2> | 234 template <typename R, typename T, typename A1, typename A2> |
| 236 class RunnableAdapter<R(T::*)(A1, A2)> { | 235 class RunnableAdapter<R(T::*)(A1, A2)> { |
| 237 public: | 236 public: |
| 238 typedef R (RunType)(T*, A1, A2); | 237 typedef R (RunType)(T*, A1, A2); |
| 239 typedef true_type IsMethod; | 238 typedef true_type IsMethod; |
| 240 | 239 |
| 241 explicit RunnableAdapter(R(T::*method)(A1, A2)) | 240 explicit RunnableAdapter(R(T::*method)(A1, A2)) |
| 242 : method_(method) { | 241 : method_(method) { |
| 243 } | 242 } |
| 244 | 243 |
| 245 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 244 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 246 typename CallbackParamTraits<A2>::ForwardType a2) { | 245 typename CallbackParamTraits<A2>::ForwardType a2) { |
| 247 return (object->*method_)(a1, a2); | 246 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2)); |
| 248 } | 247 } |
| 249 | 248 |
| 250 private: | 249 private: |
| 251 R (T::*method_)(A1, A2); | 250 R (T::*method_)(A1, A2); |
| 252 }; | 251 }; |
| 253 | 252 |
| 254 // Const Method: Arity 2. | 253 // Const Method: Arity 2. |
| 255 template <typename R, typename T, typename A1, typename A2> | 254 template <typename R, typename T, typename A1, typename A2> |
| 256 class RunnableAdapter<R(T::*)(A1, A2) const> { | 255 class RunnableAdapter<R(T::*)(A1, A2) const> { |
| 257 public: | 256 public: |
| 258 typedef R (RunType)(const T*, A1, A2); | 257 typedef R (RunType)(const T*, A1, A2); |
| 259 typedef true_type IsMethod; | 258 typedef true_type IsMethod; |
| 260 | 259 |
| 261 explicit RunnableAdapter(R(T::*method)(A1, A2) const) | 260 explicit RunnableAdapter(R(T::*method)(A1, A2) const) |
| 262 : method_(method) { | 261 : method_(method) { |
| 263 } | 262 } |
| 264 | 263 |
| 265 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 264 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 266 typename CallbackParamTraits<A2>::ForwardType a2) { | 265 typename CallbackParamTraits<A2>::ForwardType a2) { |
| 267 return (object->*method_)(a1, a2); | 266 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2)); |
| 268 } | 267 } |
| 269 | 268 |
| 270 private: | 269 private: |
| 271 R (T::*method_)(A1, A2) const; | 270 R (T::*method_)(A1, A2) const; |
| 272 }; | 271 }; |
| 273 | 272 |
| 274 // Function: Arity 3. | 273 // Function: Arity 3. |
| 275 template <typename R, typename A1, typename A2, typename A3> | 274 template <typename R, typename A1, typename A2, typename A3> |
| 276 class RunnableAdapter<R(*)(A1, A2, A3)> { | 275 class RunnableAdapter<R(*)(A1, A2, A3)> { |
| 277 public: | 276 public: |
| 278 typedef R (RunType)(A1, A2, A3); | 277 typedef R (RunType)(A1, A2, A3); |
| 279 | 278 |
| 280 explicit RunnableAdapter(R(*function)(A1, A2, A3)) | 279 explicit RunnableAdapter(R(*function)(A1, A2, A3)) |
| 281 : function_(function) { | 280 : function_(function) { |
| 282 } | 281 } |
| 283 | 282 |
| 284 R Run(typename CallbackParamTraits<A1>::ForwardType a1, | 283 R Run(typename CallbackParamTraits<A1>::ForwardType a1, |
| 285 typename CallbackParamTraits<A2>::ForwardType a2, | 284 typename CallbackParamTraits<A2>::ForwardType a2, |
| 286 typename CallbackParamTraits<A3>::ForwardType a3) { | 285 typename CallbackParamTraits<A3>::ForwardType a3) { |
| 287 return function_(a1, a2, a3); | 286 return function_(BindMoveSupport(a1), BindMoveSupport(a2), |
| 287 BindMoveSupport(a3)); |
| 288 } | 288 } |
| 289 | 289 |
| 290 private: | 290 private: |
| 291 R (*function_)(A1, A2, A3); | 291 R (*function_)(A1, A2, A3); |
| 292 }; | 292 }; |
| 293 | 293 |
| 294 // Method: Arity 3. | 294 // Method: Arity 3. |
| 295 template <typename R, typename T, typename A1, typename A2, typename A3> | 295 template <typename R, typename T, typename A1, typename A2, typename A3> |
| 296 class RunnableAdapter<R(T::*)(A1, A2, A3)> { | 296 class RunnableAdapter<R(T::*)(A1, A2, A3)> { |
| 297 public: | 297 public: |
| 298 typedef R (RunType)(T*, A1, A2, A3); | 298 typedef R (RunType)(T*, A1, A2, A3); |
| 299 typedef true_type IsMethod; | 299 typedef true_type IsMethod; |
| 300 | 300 |
| 301 explicit RunnableAdapter(R(T::*method)(A1, A2, A3)) | 301 explicit RunnableAdapter(R(T::*method)(A1, A2, A3)) |
| 302 : method_(method) { | 302 : method_(method) { |
| 303 } | 303 } |
| 304 | 304 |
| 305 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 305 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 306 typename CallbackParamTraits<A2>::ForwardType a2, | 306 typename CallbackParamTraits<A2>::ForwardType a2, |
| 307 typename CallbackParamTraits<A3>::ForwardType a3) { | 307 typename CallbackParamTraits<A3>::ForwardType a3) { |
| 308 return (object->*method_)(a1, a2, a3); | 308 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 309 BindMoveSupport(a3)); |
| 309 } | 310 } |
| 310 | 311 |
| 311 private: | 312 private: |
| 312 R (T::*method_)(A1, A2, A3); | 313 R (T::*method_)(A1, A2, A3); |
| 313 }; | 314 }; |
| 314 | 315 |
| 315 // Const Method: Arity 3. | 316 // Const Method: Arity 3. |
| 316 template <typename R, typename T, typename A1, typename A2, typename A3> | 317 template <typename R, typename T, typename A1, typename A2, typename A3> |
| 317 class RunnableAdapter<R(T::*)(A1, A2, A3) const> { | 318 class RunnableAdapter<R(T::*)(A1, A2, A3) const> { |
| 318 public: | 319 public: |
| 319 typedef R (RunType)(const T*, A1, A2, A3); | 320 typedef R (RunType)(const T*, A1, A2, A3); |
| 320 typedef true_type IsMethod; | 321 typedef true_type IsMethod; |
| 321 | 322 |
| 322 explicit RunnableAdapter(R(T::*method)(A1, A2, A3) const) | 323 explicit RunnableAdapter(R(T::*method)(A1, A2, A3) const) |
| 323 : method_(method) { | 324 : method_(method) { |
| 324 } | 325 } |
| 325 | 326 |
| 326 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 327 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 327 typename CallbackParamTraits<A2>::ForwardType a2, | 328 typename CallbackParamTraits<A2>::ForwardType a2, |
| 328 typename CallbackParamTraits<A3>::ForwardType a3) { | 329 typename CallbackParamTraits<A3>::ForwardType a3) { |
| 329 return (object->*method_)(a1, a2, a3); | 330 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 331 BindMoveSupport(a3)); |
| 330 } | 332 } |
| 331 | 333 |
| 332 private: | 334 private: |
| 333 R (T::*method_)(A1, A2, A3) const; | 335 R (T::*method_)(A1, A2, A3) const; |
| 334 }; | 336 }; |
| 335 | 337 |
| 336 // Function: Arity 4. | 338 // Function: Arity 4. |
| 337 template <typename R, typename A1, typename A2, typename A3, typename A4> | 339 template <typename R, typename A1, typename A2, typename A3, typename A4> |
| 338 class RunnableAdapter<R(*)(A1, A2, A3, A4)> { | 340 class RunnableAdapter<R(*)(A1, A2, A3, A4)> { |
| 339 public: | 341 public: |
| 340 typedef R (RunType)(A1, A2, A3, A4); | 342 typedef R (RunType)(A1, A2, A3, A4); |
| 341 | 343 |
| 342 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4)) | 344 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4)) |
| 343 : function_(function) { | 345 : function_(function) { |
| 344 } | 346 } |
| 345 | 347 |
| 346 R Run(typename CallbackParamTraits<A1>::ForwardType a1, | 348 R Run(typename CallbackParamTraits<A1>::ForwardType a1, |
| 347 typename CallbackParamTraits<A2>::ForwardType a2, | 349 typename CallbackParamTraits<A2>::ForwardType a2, |
| 348 typename CallbackParamTraits<A3>::ForwardType a3, | 350 typename CallbackParamTraits<A3>::ForwardType a3, |
| 349 typename CallbackParamTraits<A4>::ForwardType a4) { | 351 typename CallbackParamTraits<A4>::ForwardType a4) { |
| 350 return function_(a1, a2, a3, a4); | 352 return function_(BindMoveSupport(a1), BindMoveSupport(a2), |
| 353 BindMoveSupport(a3), BindMoveSupport(a4)); |
| 351 } | 354 } |
| 352 | 355 |
| 353 private: | 356 private: |
| 354 R (*function_)(A1, A2, A3, A4); | 357 R (*function_)(A1, A2, A3, A4); |
| 355 }; | 358 }; |
| 356 | 359 |
| 357 // Method: Arity 4. | 360 // Method: Arity 4. |
| 358 template <typename R, typename T, typename A1, typename A2, typename A3, | 361 template <typename R, typename T, typename A1, typename A2, typename A3, |
| 359 typename A4> | 362 typename A4> |
| 360 class RunnableAdapter<R(T::*)(A1, A2, A3, A4)> { | 363 class RunnableAdapter<R(T::*)(A1, A2, A3, A4)> { |
| 361 public: | 364 public: |
| 362 typedef R (RunType)(T*, A1, A2, A3, A4); | 365 typedef R (RunType)(T*, A1, A2, A3, A4); |
| 363 typedef true_type IsMethod; | 366 typedef true_type IsMethod; |
| 364 | 367 |
| 365 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4)) | 368 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4)) |
| 366 : method_(method) { | 369 : method_(method) { |
| 367 } | 370 } |
| 368 | 371 |
| 369 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 372 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 370 typename CallbackParamTraits<A2>::ForwardType a2, | 373 typename CallbackParamTraits<A2>::ForwardType a2, |
| 371 typename CallbackParamTraits<A3>::ForwardType a3, | 374 typename CallbackParamTraits<A3>::ForwardType a3, |
| 372 typename CallbackParamTraits<A4>::ForwardType a4) { | 375 typename CallbackParamTraits<A4>::ForwardType a4) { |
| 373 return (object->*method_)(a1, a2, a3, a4); | 376 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 377 BindMoveSupport(a3), BindMoveSupport(a4)); |
| 374 } | 378 } |
| 375 | 379 |
| 376 private: | 380 private: |
| 377 R (T::*method_)(A1, A2, A3, A4); | 381 R (T::*method_)(A1, A2, A3, A4); |
| 378 }; | 382 }; |
| 379 | 383 |
| 380 // Const Method: Arity 4. | 384 // Const Method: Arity 4. |
| 381 template <typename R, typename T, typename A1, typename A2, typename A3, | 385 template <typename R, typename T, typename A1, typename A2, typename A3, |
| 382 typename A4> | 386 typename A4> |
| 383 class RunnableAdapter<R(T::*)(A1, A2, A3, A4) const> { | 387 class RunnableAdapter<R(T::*)(A1, A2, A3, A4) const> { |
| 384 public: | 388 public: |
| 385 typedef R (RunType)(const T*, A1, A2, A3, A4); | 389 typedef R (RunType)(const T*, A1, A2, A3, A4); |
| 386 typedef true_type IsMethod; | 390 typedef true_type IsMethod; |
| 387 | 391 |
| 388 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4) const) | 392 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4) const) |
| 389 : method_(method) { | 393 : method_(method) { |
| 390 } | 394 } |
| 391 | 395 |
| 392 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 396 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 393 typename CallbackParamTraits<A2>::ForwardType a2, | 397 typename CallbackParamTraits<A2>::ForwardType a2, |
| 394 typename CallbackParamTraits<A3>::ForwardType a3, | 398 typename CallbackParamTraits<A3>::ForwardType a3, |
| 395 typename CallbackParamTraits<A4>::ForwardType a4) { | 399 typename CallbackParamTraits<A4>::ForwardType a4) { |
| 396 return (object->*method_)(a1, a2, a3, a4); | 400 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 401 BindMoveSupport(a3), BindMoveSupport(a4)); |
| 397 } | 402 } |
| 398 | 403 |
| 399 private: | 404 private: |
| 400 R (T::*method_)(A1, A2, A3, A4) const; | 405 R (T::*method_)(A1, A2, A3, A4) const; |
| 401 }; | 406 }; |
| 402 | 407 |
| 403 // Function: Arity 5. | 408 // Function: Arity 5. |
| 404 template <typename R, typename A1, typename A2, typename A3, typename A4, | 409 template <typename R, typename A1, typename A2, typename A3, typename A4, |
| 405 typename A5> | 410 typename A5> |
| 406 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5)> { | 411 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5)> { |
| 407 public: | 412 public: |
| 408 typedef R (RunType)(A1, A2, A3, A4, A5); | 413 typedef R (RunType)(A1, A2, A3, A4, A5); |
| 409 | 414 |
| 410 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5)) | 415 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5)) |
| 411 : function_(function) { | 416 : function_(function) { |
| 412 } | 417 } |
| 413 | 418 |
| 414 R Run(typename CallbackParamTraits<A1>::ForwardType a1, | 419 R Run(typename CallbackParamTraits<A1>::ForwardType a1, |
| 415 typename CallbackParamTraits<A2>::ForwardType a2, | 420 typename CallbackParamTraits<A2>::ForwardType a2, |
| 416 typename CallbackParamTraits<A3>::ForwardType a3, | 421 typename CallbackParamTraits<A3>::ForwardType a3, |
| 417 typename CallbackParamTraits<A4>::ForwardType a4, | 422 typename CallbackParamTraits<A4>::ForwardType a4, |
| 418 typename CallbackParamTraits<A5>::ForwardType a5) { | 423 typename CallbackParamTraits<A5>::ForwardType a5) { |
| 419 return function_(a1, a2, a3, a4, a5); | 424 return function_(BindMoveSupport(a1), BindMoveSupport(a2), |
| 425 BindMoveSupport(a3), BindMoveSupport(a4), BindMoveSupport(a5)); |
| 420 } | 426 } |
| 421 | 427 |
| 422 private: | 428 private: |
| 423 R (*function_)(A1, A2, A3, A4, A5); | 429 R (*function_)(A1, A2, A3, A4, A5); |
| 424 }; | 430 }; |
| 425 | 431 |
| 426 // Method: Arity 5. | 432 // Method: Arity 5. |
| 427 template <typename R, typename T, typename A1, typename A2, typename A3, | 433 template <typename R, typename T, typename A1, typename A2, typename A3, |
| 428 typename A4, typename A5> | 434 typename A4, typename A5> |
| 429 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5)> { | 435 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5)> { |
| 430 public: | 436 public: |
| 431 typedef R (RunType)(T*, A1, A2, A3, A4, A5); | 437 typedef R (RunType)(T*, A1, A2, A3, A4, A5); |
| 432 typedef true_type IsMethod; | 438 typedef true_type IsMethod; |
| 433 | 439 |
| 434 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5)) | 440 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5)) |
| 435 : method_(method) { | 441 : method_(method) { |
| 436 } | 442 } |
| 437 | 443 |
| 438 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 444 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 439 typename CallbackParamTraits<A2>::ForwardType a2, | 445 typename CallbackParamTraits<A2>::ForwardType a2, |
| 440 typename CallbackParamTraits<A3>::ForwardType a3, | 446 typename CallbackParamTraits<A3>::ForwardType a3, |
| 441 typename CallbackParamTraits<A4>::ForwardType a4, | 447 typename CallbackParamTraits<A4>::ForwardType a4, |
| 442 typename CallbackParamTraits<A5>::ForwardType a5) { | 448 typename CallbackParamTraits<A5>::ForwardType a5) { |
| 443 return (object->*method_)(a1, a2, a3, a4, a5); | 449 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 450 BindMoveSupport(a3), BindMoveSupport(a4), BindMoveSupport(a5)); |
| 444 } | 451 } |
| 445 | 452 |
| 446 private: | 453 private: |
| 447 R (T::*method_)(A1, A2, A3, A4, A5); | 454 R (T::*method_)(A1, A2, A3, A4, A5); |
| 448 }; | 455 }; |
| 449 | 456 |
| 450 // Const Method: Arity 5. | 457 // Const Method: Arity 5. |
| 451 template <typename R, typename T, typename A1, typename A2, typename A3, | 458 template <typename R, typename T, typename A1, typename A2, typename A3, |
| 452 typename A4, typename A5> | 459 typename A4, typename A5> |
| 453 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5) const> { | 460 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5) const> { |
| 454 public: | 461 public: |
| 455 typedef R (RunType)(const T*, A1, A2, A3, A4, A5); | 462 typedef R (RunType)(const T*, A1, A2, A3, A4, A5); |
| 456 typedef true_type IsMethod; | 463 typedef true_type IsMethod; |
| 457 | 464 |
| 458 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5) const) | 465 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5) const) |
| 459 : method_(method) { | 466 : method_(method) { |
| 460 } | 467 } |
| 461 | 468 |
| 462 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 469 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 463 typename CallbackParamTraits<A2>::ForwardType a2, | 470 typename CallbackParamTraits<A2>::ForwardType a2, |
| 464 typename CallbackParamTraits<A3>::ForwardType a3, | 471 typename CallbackParamTraits<A3>::ForwardType a3, |
| 465 typename CallbackParamTraits<A4>::ForwardType a4, | 472 typename CallbackParamTraits<A4>::ForwardType a4, |
| 466 typename CallbackParamTraits<A5>::ForwardType a5) { | 473 typename CallbackParamTraits<A5>::ForwardType a5) { |
| 467 return (object->*method_)(a1, a2, a3, a4, a5); | 474 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 475 BindMoveSupport(a3), BindMoveSupport(a4), BindMoveSupport(a5)); |
| 468 } | 476 } |
| 469 | 477 |
| 470 private: | 478 private: |
| 471 R (T::*method_)(A1, A2, A3, A4, A5) const; | 479 R (T::*method_)(A1, A2, A3, A4, A5) const; |
| 472 }; | 480 }; |
| 473 | 481 |
| 474 // Function: Arity 6. | 482 // Function: Arity 6. |
| 475 template <typename R, typename A1, typename A2, typename A3, typename A4, | 483 template <typename R, typename A1, typename A2, typename A3, typename A4, |
| 476 typename A5, typename A6> | 484 typename A5, typename A6> |
| 477 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5, A6)> { | 485 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5, A6)> { |
| 478 public: | 486 public: |
| 479 typedef R (RunType)(A1, A2, A3, A4, A5, A6); | 487 typedef R (RunType)(A1, A2, A3, A4, A5, A6); |
| 480 | 488 |
| 481 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5, A6)) | 489 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5, A6)) |
| 482 : function_(function) { | 490 : function_(function) { |
| 483 } | 491 } |
| 484 | 492 |
| 485 R Run(typename CallbackParamTraits<A1>::ForwardType a1, | 493 R Run(typename CallbackParamTraits<A1>::ForwardType a1, |
| 486 typename CallbackParamTraits<A2>::ForwardType a2, | 494 typename CallbackParamTraits<A2>::ForwardType a2, |
| 487 typename CallbackParamTraits<A3>::ForwardType a3, | 495 typename CallbackParamTraits<A3>::ForwardType a3, |
| 488 typename CallbackParamTraits<A4>::ForwardType a4, | 496 typename CallbackParamTraits<A4>::ForwardType a4, |
| 489 typename CallbackParamTraits<A5>::ForwardType a5, | 497 typename CallbackParamTraits<A5>::ForwardType a5, |
| 490 typename CallbackParamTraits<A6>::ForwardType a6) { | 498 typename CallbackParamTraits<A6>::ForwardType a6) { |
| 491 return function_(a1, a2, a3, a4, a5, a6); | 499 return function_(BindMoveSupport(a1), BindMoveSupport(a2), |
| 500 BindMoveSupport(a3), BindMoveSupport(a4), BindMoveSupport(a5), |
| 501 BindMoveSupport(a6)); |
| 492 } | 502 } |
| 493 | 503 |
| 494 private: | 504 private: |
| 495 R (*function_)(A1, A2, A3, A4, A5, A6); | 505 R (*function_)(A1, A2, A3, A4, A5, A6); |
| 496 }; | 506 }; |
| 497 | 507 |
| 498 // Method: Arity 6. | 508 // Method: Arity 6. |
| 499 template <typename R, typename T, typename A1, typename A2, typename A3, | 509 template <typename R, typename T, typename A1, typename A2, typename A3, |
| 500 typename A4, typename A5, typename A6> | 510 typename A4, typename A5, typename A6> |
| 501 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6)> { | 511 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6)> { |
| 502 public: | 512 public: |
| 503 typedef R (RunType)(T*, A1, A2, A3, A4, A5, A6); | 513 typedef R (RunType)(T*, A1, A2, A3, A4, A5, A6); |
| 504 typedef true_type IsMethod; | 514 typedef true_type IsMethod; |
| 505 | 515 |
| 506 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6)) | 516 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6)) |
| 507 : method_(method) { | 517 : method_(method) { |
| 508 } | 518 } |
| 509 | 519 |
| 510 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 520 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 511 typename CallbackParamTraits<A2>::ForwardType a2, | 521 typename CallbackParamTraits<A2>::ForwardType a2, |
| 512 typename CallbackParamTraits<A3>::ForwardType a3, | 522 typename CallbackParamTraits<A3>::ForwardType a3, |
| 513 typename CallbackParamTraits<A4>::ForwardType a4, | 523 typename CallbackParamTraits<A4>::ForwardType a4, |
| 514 typename CallbackParamTraits<A5>::ForwardType a5, | 524 typename CallbackParamTraits<A5>::ForwardType a5, |
| 515 typename CallbackParamTraits<A6>::ForwardType a6) { | 525 typename CallbackParamTraits<A6>::ForwardType a6) { |
| 516 return (object->*method_)(a1, a2, a3, a4, a5, a6); | 526 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 527 BindMoveSupport(a3), BindMoveSupport(a4), BindMoveSupport(a5), |
| 528 BindMoveSupport(a6)); |
| 517 } | 529 } |
| 518 | 530 |
| 519 private: | 531 private: |
| 520 R (T::*method_)(A1, A2, A3, A4, A5, A6); | 532 R (T::*method_)(A1, A2, A3, A4, A5, A6); |
| 521 }; | 533 }; |
| 522 | 534 |
| 523 // Const Method: Arity 6. | 535 // Const Method: Arity 6. |
| 524 template <typename R, typename T, typename A1, typename A2, typename A3, | 536 template <typename R, typename T, typename A1, typename A2, typename A3, |
| 525 typename A4, typename A5, typename A6> | 537 typename A4, typename A5, typename A6> |
| 526 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6) const> { | 538 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6) const> { |
| 527 public: | 539 public: |
| 528 typedef R (RunType)(const T*, A1, A2, A3, A4, A5, A6); | 540 typedef R (RunType)(const T*, A1, A2, A3, A4, A5, A6); |
| 529 typedef true_type IsMethod; | 541 typedef true_type IsMethod; |
| 530 | 542 |
| 531 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6) const) | 543 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6) const) |
| 532 : method_(method) { | 544 : method_(method) { |
| 533 } | 545 } |
| 534 | 546 |
| 535 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 547 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 536 typename CallbackParamTraits<A2>::ForwardType a2, | 548 typename CallbackParamTraits<A2>::ForwardType a2, |
| 537 typename CallbackParamTraits<A3>::ForwardType a3, | 549 typename CallbackParamTraits<A3>::ForwardType a3, |
| 538 typename CallbackParamTraits<A4>::ForwardType a4, | 550 typename CallbackParamTraits<A4>::ForwardType a4, |
| 539 typename CallbackParamTraits<A5>::ForwardType a5, | 551 typename CallbackParamTraits<A5>::ForwardType a5, |
| 540 typename CallbackParamTraits<A6>::ForwardType a6) { | 552 typename CallbackParamTraits<A6>::ForwardType a6) { |
| 541 return (object->*method_)(a1, a2, a3, a4, a5, a6); | 553 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 554 BindMoveSupport(a3), BindMoveSupport(a4), BindMoveSupport(a5), |
| 555 BindMoveSupport(a6)); |
| 542 } | 556 } |
| 543 | 557 |
| 544 private: | 558 private: |
| 545 R (T::*method_)(A1, A2, A3, A4, A5, A6) const; | 559 R (T::*method_)(A1, A2, A3, A4, A5, A6) const; |
| 546 }; | 560 }; |
| 547 | 561 |
| 548 // Function: Arity 7. | 562 // Function: Arity 7. |
| 549 template <typename R, typename A1, typename A2, typename A3, typename A4, | 563 template <typename R, typename A1, typename A2, typename A3, typename A4, |
| 550 typename A5, typename A6, typename A7> | 564 typename A5, typename A6, typename A7> |
| 551 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5, A6, A7)> { | 565 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5, A6, A7)> { |
| 552 public: | 566 public: |
| 553 typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7); | 567 typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7); |
| 554 | 568 |
| 555 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5, A6, A7)) | 569 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5, A6, A7)) |
| 556 : function_(function) { | 570 : function_(function) { |
| 557 } | 571 } |
| 558 | 572 |
| 559 R Run(typename CallbackParamTraits<A1>::ForwardType a1, | 573 R Run(typename CallbackParamTraits<A1>::ForwardType a1, |
| 560 typename CallbackParamTraits<A2>::ForwardType a2, | 574 typename CallbackParamTraits<A2>::ForwardType a2, |
| 561 typename CallbackParamTraits<A3>::ForwardType a3, | 575 typename CallbackParamTraits<A3>::ForwardType a3, |
| 562 typename CallbackParamTraits<A4>::ForwardType a4, | 576 typename CallbackParamTraits<A4>::ForwardType a4, |
| 563 typename CallbackParamTraits<A5>::ForwardType a5, | 577 typename CallbackParamTraits<A5>::ForwardType a5, |
| 564 typename CallbackParamTraits<A6>::ForwardType a6, | 578 typename CallbackParamTraits<A6>::ForwardType a6, |
| 565 typename CallbackParamTraits<A7>::ForwardType a7) { | 579 typename CallbackParamTraits<A7>::ForwardType a7) { |
| 566 return function_(a1, a2, a3, a4, a5, a6, a7); | 580 return function_(BindMoveSupport(a1), BindMoveSupport(a2), |
| 581 BindMoveSupport(a3), BindMoveSupport(a4), BindMoveSupport(a5), |
| 582 BindMoveSupport(a6), BindMoveSupport(a7)); |
| 567 } | 583 } |
| 568 | 584 |
| 569 private: | 585 private: |
| 570 R (*function_)(A1, A2, A3, A4, A5, A6, A7); | 586 R (*function_)(A1, A2, A3, A4, A5, A6, A7); |
| 571 }; | 587 }; |
| 572 | 588 |
| 573 // Method: Arity 7. | 589 // Method: Arity 7. |
| 574 template <typename R, typename T, typename A1, typename A2, typename A3, | 590 template <typename R, typename T, typename A1, typename A2, typename A3, |
| 575 typename A4, typename A5, typename A6, typename A7> | 591 typename A4, typename A5, typename A6, typename A7> |
| 576 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7)> { | 592 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7)> { |
| 577 public: | 593 public: |
| 578 typedef R (RunType)(T*, A1, A2, A3, A4, A5, A6, A7); | 594 typedef R (RunType)(T*, A1, A2, A3, A4, A5, A6, A7); |
| 579 typedef true_type IsMethod; | 595 typedef true_type IsMethod; |
| 580 | 596 |
| 581 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7)) | 597 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7)) |
| 582 : method_(method) { | 598 : method_(method) { |
| 583 } | 599 } |
| 584 | 600 |
| 585 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 601 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 586 typename CallbackParamTraits<A2>::ForwardType a2, | 602 typename CallbackParamTraits<A2>::ForwardType a2, |
| 587 typename CallbackParamTraits<A3>::ForwardType a3, | 603 typename CallbackParamTraits<A3>::ForwardType a3, |
| 588 typename CallbackParamTraits<A4>::ForwardType a4, | 604 typename CallbackParamTraits<A4>::ForwardType a4, |
| 589 typename CallbackParamTraits<A5>::ForwardType a5, | 605 typename CallbackParamTraits<A5>::ForwardType a5, |
| 590 typename CallbackParamTraits<A6>::ForwardType a6, | 606 typename CallbackParamTraits<A6>::ForwardType a6, |
| 591 typename CallbackParamTraits<A7>::ForwardType a7) { | 607 typename CallbackParamTraits<A7>::ForwardType a7) { |
| 592 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7); | 608 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 609 BindMoveSupport(a3), BindMoveSupport(a4), BindMoveSupport(a5), |
| 610 BindMoveSupport(a6), BindMoveSupport(a7)); |
| 593 } | 611 } |
| 594 | 612 |
| 595 private: | 613 private: |
| 596 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7); | 614 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7); |
| 597 }; | 615 }; |
| 598 | 616 |
| 599 // Const Method: Arity 7. | 617 // Const Method: Arity 7. |
| 600 template <typename R, typename T, typename A1, typename A2, typename A3, | 618 template <typename R, typename T, typename A1, typename A2, typename A3, |
| 601 typename A4, typename A5, typename A6, typename A7> | 619 typename A4, typename A5, typename A6, typename A7> |
| 602 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7) const> { | 620 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7) const> { |
| 603 public: | 621 public: |
| 604 typedef R (RunType)(const T*, A1, A2, A3, A4, A5, A6, A7); | 622 typedef R (RunType)(const T*, A1, A2, A3, A4, A5, A6, A7); |
| 605 typedef true_type IsMethod; | 623 typedef true_type IsMethod; |
| 606 | 624 |
| 607 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7) const) | 625 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7) const) |
| 608 : method_(method) { | 626 : method_(method) { |
| 609 } | 627 } |
| 610 | 628 |
| 611 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, | 629 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1, |
| 612 typename CallbackParamTraits<A2>::ForwardType a2, | 630 typename CallbackParamTraits<A2>::ForwardType a2, |
| 613 typename CallbackParamTraits<A3>::ForwardType a3, | 631 typename CallbackParamTraits<A3>::ForwardType a3, |
| 614 typename CallbackParamTraits<A4>::ForwardType a4, | 632 typename CallbackParamTraits<A4>::ForwardType a4, |
| 615 typename CallbackParamTraits<A5>::ForwardType a5, | 633 typename CallbackParamTraits<A5>::ForwardType a5, |
| 616 typename CallbackParamTraits<A6>::ForwardType a6, | 634 typename CallbackParamTraits<A6>::ForwardType a6, |
| 617 typename CallbackParamTraits<A7>::ForwardType a7) { | 635 typename CallbackParamTraits<A7>::ForwardType a7) { |
| 618 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7); | 636 return (object->*method_)(BindMoveSupport(a1), BindMoveSupport(a2), |
| 637 BindMoveSupport(a3), BindMoveSupport(a4), BindMoveSupport(a5), |
| 638 BindMoveSupport(a6), BindMoveSupport(a7)); |
| 619 } | 639 } |
| 620 | 640 |
| 621 private: | 641 private: |
| 622 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7) const; | 642 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7) const; |
| 623 }; | 643 }; |
| 624 | 644 |
| 625 | 645 |
| 626 // FunctionTraits<> | 646 // FunctionTraits<> |
| 627 // | 647 // |
| 628 // Breaks a function signature apart into typedefs for easier introspection. | 648 // Breaks a function signature apart into typedefs for easier introspection. |
| (...skipping 2041 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2670 P4 p4_; | 2690 P4 p4_; |
| 2671 P5 p5_; | 2691 P5 p5_; |
| 2672 P6 p6_; | 2692 P6 p6_; |
| 2673 P7 p7_; | 2693 P7 p7_; |
| 2674 }; | 2694 }; |
| 2675 | 2695 |
| 2676 } // namespace internal | 2696 } // namespace internal |
| 2677 } // namespace base | 2697 } // namespace base |
| 2678 | 2698 |
| 2679 #endif // BASE_BIND_INTERNAL_H_ | 2699 #endif // BASE_BIND_INTERNAL_H_ |
| OLD | NEW |