Chromium Code Reviews| Index: base/timer/timer.h |
| diff --git a/base/timer/timer.h b/base/timer/timer.h |
| index 1ef58a3ea0b30a23dcd3fdc90a03675abea2fabf..cfdda67f519cb5a5a827d90721c5538c4b5ef9ac 100644 |
| --- a/base/timer/timer.h |
| +++ b/base/timer/timer.h |
| @@ -29,7 +29,7 @@ |
| // // This method is called every second to do stuff. |
| // ... |
| // } |
| -// base::RepeatingTimer<MyClass> timer_; |
| +// base::RepeatingTimer timer_; |
| // }; |
| // |
| // Both OneShotTimer and RepeatingTimer also support a Reset method, which |
| @@ -200,11 +200,8 @@ class BASE_EXPORT Timer { |
| //----------------------------------------------------------------------------- |
| // This class is an implementation detail of OneShotTimer and RepeatingTimer. |
| // Please do not use this class directly. |
| -template <class Receiver, bool kIsRepeating> |
| class BaseTimerMethodPointer : public Timer { |
| public: |
| - typedef void (Receiver::*ReceiverMethod)(); |
| - |
| // This is here to work around the fact that Timer::Start is "hidden" by the |
| // Start definition below, rather than being overloaded. |
| // TODO(tim): We should remove uses of BaseTimerMethodPointer::Start below |
| @@ -212,15 +209,16 @@ class BaseTimerMethodPointer : public Timer { |
| // see bug 148832. |
| using Timer::Start; |
| - BaseTimerMethodPointer() : Timer(kIsRepeating, kIsRepeating) {} |
| + BaseTimerMethodPointer(bool repeats) : Timer(repeats, repeats) {} |
|
Nico
2015/09/22 01:16:22
nit:
enum RepeatMode { kOneShot, kRepeating };
danakj
2015/09/22 18:31:14
Done.
|
| // Start the timer to run at the given |delay| from now. If the timer is |
| // already running, it will be replaced to call a task formed from |
| // |reviewer->*method|. |
| - virtual void Start(const tracked_objects::Location& posted_from, |
| - TimeDelta delay, |
| - Receiver* receiver, |
| - ReceiverMethod method) { |
| + template <class Receiver> |
| + void Start(const tracked_objects::Location& posted_from, |
| + TimeDelta delay, |
| + Receiver* receiver, |
| + void (Receiver::*method)()) { |
| Timer::Start(posted_from, delay, |
| base::Bind(method, base::Unretained(receiver))); |
| } |
| @@ -228,13 +226,17 @@ class BaseTimerMethodPointer : public Timer { |
| //----------------------------------------------------------------------------- |
| // A simple, one-shot timer. See usage notes at the top of the file. |
| -template <class Receiver> |
| -class OneShotTimer : public BaseTimerMethodPointer<Receiver, false> {}; |
| +class OneShotTimer : public BaseTimerMethodPointer { |
| + public: |
| + OneShotTimer() : BaseTimerMethodPointer(false) {} |
| +}; |
| //----------------------------------------------------------------------------- |
| // A simple, repeating timer. See usage notes at the top of the file. |
| -template <class Receiver> |
| -class RepeatingTimer : public BaseTimerMethodPointer<Receiver, true> {}; |
| +class RepeatingTimer : public BaseTimerMethodPointer { |
| + public: |
| + RepeatingTimer() : BaseTimerMethodPointer(true) {} |
| +}; |
| //----------------------------------------------------------------------------- |
| // A Delay timer is like The Button from Lost. Once started, you have to keep |
| @@ -247,20 +249,19 @@ class RepeatingTimer : public BaseTimerMethodPointer<Receiver, true> {}; |
| // |
| // If destroyed, the timeout is canceled and will not occur even if already |
| // inflight. |
| -template <class Receiver> |
| class DelayTimer : protected Timer { |
| public: |
| - typedef void (Receiver::*ReceiverMethod)(); |
| - |
| + template <class Receiver> |
| DelayTimer(const tracked_objects::Location& posted_from, |
| TimeDelta delay, |
| Receiver* receiver, |
| - ReceiverMethod method) |
| - : Timer(posted_from, delay, |
| + void (Receiver::*method)()) |
| + : Timer(posted_from, |
| + delay, |
| base::Bind(method, base::Unretained(receiver)), |
| false) {} |
| - void Reset() override { Timer::Reset(); } |
| + void Reset() override; |
| }; |
| } // namespace base |