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

Side by Side Diff: base/task.h

Issue 8960011: base::Bind: Remove NewRunnableFunction. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Win build fix. Created 8 years, 12 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // ============================================================================ 5 // ============================================================================
6 // **************************************************************************** 6 // ****************************************************************************
7 // * THIS HEADER IS DEPRECATED, SEE base/callback.h FOR NEW IMPLEMENTATION * 7 // * THIS HEADER IS DEPRECATED, SEE base/callback.h FOR NEW IMPLEMENTATION *
8 // **************************************************************************** 8 // ****************************************************************************
9 // ============================================================================ 9 // ============================================================================
10 // ============================================================================ 10 // ============================================================================
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 // 320 //
321 // This is different from DISALLOW_COPY_AND_ASSIGN which is declared inside the 321 // This is different from DISALLOW_COPY_AND_ASSIGN which is declared inside the
322 // class. 322 // class.
323 #define DISABLE_RUNNABLE_METHOD_REFCOUNT(TypeName) \ 323 #define DISABLE_RUNNABLE_METHOD_REFCOUNT(TypeName) \
324 template <> \ 324 template <> \
325 struct RunnableMethodTraits<TypeName> { \ 325 struct RunnableMethodTraits<TypeName> { \
326 void RetainCallee(TypeName* manager) {} \ 326 void RetainCallee(TypeName* manager) {} \
327 void ReleaseCallee(TypeName* manager) {} \ 327 void ReleaseCallee(TypeName* manager) {} \
328 } 328 }
329 329
330 // RunnableMethod and RunnableFunction ----------------------------------------- 330 // RunnableMethod --------------------------------------------------------------
331 // 331 //
332 // Runnable methods are a type of task that call a function on an object when 332 // Runnable methods are a type of task that call a function on an object when
333 // they are run. We implement both an object and a set of NewRunnableMethod and 333 // they are run. We implement both an object and a set of NewRunnableMethod
334 // NewRunnableFunction functions for convenience. These functions are 334 // functions for convenience. These functions are overloaded and will infer the
335 // overloaded and will infer the template types, simplifying calling code. 335 // template types, simplifying calling code.
336 // 336 //
337 // The template definitions all use the following names: 337 // The template definitions all use the following names:
338 // T - the class type of the object you're supplying 338 // T - the class type of the object you're supplying
339 // this is not needed for the Static version of the call 339 // this is not needed for the Static version of the call
340 // Method/Function - the signature of a pointer to the method or function you 340 // Method/Function - the signature of a pointer to the method or function you
341 // want to call 341 // want to call
342 // Param - the parameter(s) to the method, possibly packed as a Tuple 342 // Param - the parameter(s) to the method, possibly packed as a Tuple
343 // A - the first parameter (if any) to the method 343 // A - the first parameter (if any) to the method
344 // B - the second parameter (if any) to the method 344 // B - the second parameter (if any) to the method
345 // 345 //
346 // Put these all together and you get an object that can call a method whose 346 // Put these all together and you get an object that can call a method whose
347 // signature is: 347 // signature is:
348 // R T::MyFunction([A[, B]]) 348 // R T::MyFunction([A[, B]])
349 // 349 //
350 // Usage: 350 // Usage:
351 // PostTask(FROM_HERE, NewRunnableMethod(object, &Object::method[, a[, b]]) 351 // PostTask(FROM_HERE, NewRunnableMethod(object, &Object::method[, a[, b]])
352 // PostTask(FROM_HERE, NewRunnableFunction(&function[, a[, b]])
353 352
354 // RunnableMethod and NewRunnableMethod implementation ------------------------- 353 // RunnableMethod and NewRunnableMethod implementation -------------------------
355 354
356 template <class T, class Method, class Params> 355 template <class T, class Method, class Params>
357 class RunnableMethod : public CancelableTask { 356 class RunnableMethod : public CancelableTask {
358 public: 357 public:
359 RunnableMethod(T* obj, Method meth, const Params& params) 358 RunnableMethod(T* obj, Method meth, const Params& params)
360 : obj_(obj), meth_(meth), params_(params) { 359 : obj_(obj), meth_(meth), params_(params) {
361 traits_.RetainCallee(obj_); 360 traits_.RetainCallee(obj_);
362 COMPILE_ASSERT( 361 COMPILE_ASSERT(
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 const F& f, const G& g, const H& h) { 473 const F& f, const G& g, const H& h) {
475 return new RunnableMethod<T, 474 return new RunnableMethod<T,
476 Method, 475 Method,
477 Tuple8<A, B, C, D, E, F, G, H> >(object, 476 Tuple8<A, B, C, D, E, F, G, H> >(object,
478 method, 477 method,
479 MakeTuple(a, b, c, 478 MakeTuple(a, b, c,
480 d, e, f, 479 d, e, f,
481 g, h)); 480 g, h));
482 } 481 }
483 482
484 // RunnableFunction and NewRunnableFunction implementation ---------------------
485
486 template <class Function, class Params>
487 class RunnableFunction : public Task {
488 public:
489 RunnableFunction(Function function, const Params& params)
490 : function_(function), params_(params) {
491 COMPILE_ASSERT(
492 (base::internal::ParamsUseScopedRefptrCorrectly<Params>::value),
493 badrunnablefunctionparams);
494 }
495
496 ~RunnableFunction() {
497 function_ = reinterpret_cast<Function>(base::kDeadTask);
498 }
499
500 virtual void Run() {
501 if (function_)
502 DispatchToFunction(function_, params_);
503 }
504
505 private:
506 Function function_;
507 Params params_;
508 };
509
510 template <class Function>
511 inline Task* NewRunnableFunction(Function function) {
512 return new RunnableFunction<Function, Tuple0>(function, MakeTuple());
513 }
514
515 template <class Function, class A>
516 inline Task* NewRunnableFunction(Function function, const A& a) {
517 return new RunnableFunction<Function, Tuple1<A> >(function, MakeTuple(a));
518 }
519
520 template <class Function, class A, class B>
521 inline Task* NewRunnableFunction(Function function, const A& a, const B& b) {
522 return new RunnableFunction<Function, Tuple2<A, B> >(function,
523 MakeTuple(a, b));
524 }
525
526 template <class Function, class A, class B, class C>
527 inline Task* NewRunnableFunction(Function function, const A& a, const B& b,
528 const C& c) {
529 return new RunnableFunction<Function, Tuple3<A, B, C> >(function,
530 MakeTuple(a, b, c));
531 }
532
533 template <class Function, class A, class B, class C, class D>
534 inline Task* NewRunnableFunction(Function function, const A& a, const B& b,
535 const C& c, const D& d) {
536 return new RunnableFunction<Function, Tuple4<A, B, C, D> >(function,
537 MakeTuple(a, b,
538 c, d));
539 }
540
541 template <class Function, class A, class B, class C, class D, class E>
542 inline Task* NewRunnableFunction(Function function, const A& a, const B& b,
543 const C& c, const D& d, const E& e) {
544 return new RunnableFunction<Function, Tuple5<A, B, C, D, E> >(function,
545 MakeTuple(a, b,
546 c, d,
547 e));
548 }
549
550 template <class Function, class A, class B, class C, class D, class E,
551 class F>
552 inline Task* NewRunnableFunction(Function function, const A& a, const B& b,
553 const C& c, const D& d, const E& e,
554 const F& f) {
555 return new RunnableFunction<Function, Tuple6<A, B, C, D, E, F> >(function,
556 MakeTuple(a, b, c, d, e, f));
557 }
558
559 template <class Function, class A, class B, class C, class D, class E,
560 class F, class G>
561 inline Task* NewRunnableFunction(Function function, const A& a, const B& b,
562 const C& c, const D& d, const E& e, const F& f,
563 const G& g) {
564 return new RunnableFunction<Function, Tuple7<A, B, C, D, E, F, G> >(function,
565 MakeTuple(a, b, c, d, e, f, g));
566 }
567
568 template <class Function, class A, class B, class C, class D, class E,
569 class F, class G, class H>
570 inline Task* NewRunnableFunction(Function function, const A& a, const B& b,
571 const C& c, const D& d, const E& e, const F& f,
572 const G& g, const H& h) {
573 return new RunnableFunction<Function, Tuple8<A, B, C, D, E, F, G, H> >(
574 function, MakeTuple(a, b, c, d, e, f, g, h));
575 }
576
577 namespace base { 483 namespace base {
578 484
579 // ScopedTaskRunner is akin to scoped_ptr for Tasks. It ensures that the Task 485 // ScopedTaskRunner is akin to scoped_ptr for Tasks. It ensures that the Task
580 // is executed and deleted no matter how the current scope exits. 486 // is executed and deleted no matter how the current scope exits.
581 class BASE_EXPORT ScopedTaskRunner { 487 class BASE_EXPORT ScopedTaskRunner {
582 public: 488 public:
583 // Takes ownership of the task. 489 // Takes ownership of the task.
584 explicit ScopedTaskRunner(Task* task); 490 explicit ScopedTaskRunner(Task* task);
585 ~ScopedTaskRunner(); 491 ~ScopedTaskRunner();
586 492
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 Task* task_; 545 Task* task_;
640 bool* should_leak_task_; 546 bool* should_leak_task_;
641 static bool kTaskLeakingDefault; 547 static bool kTaskLeakingDefault;
642 }; 548 };
643 549
644 } // namespace subtle 550 } // namespace subtle
645 551
646 } // namespace base 552 } // namespace base
647 553
648 #endif // BASE_TASK_H_ 554 #endif // BASE_TASK_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698