Просмотр исходного кода

Add offset value to Timer::clock::now() to treat 0 as special value

Tatsuhiro Tsujikawa 9 лет назад
Родитель
Сommit
777b818690
2 измененных файлов с 17 добавлено и 5 удалено
  1. 11 3
      src/TimerA2.cc
  2. 6 2
      src/TimerA2.h

+ 11 - 3
src/TimerA2.cc

@@ -37,15 +37,23 @@
 
 namespace aria2 {
 
-Timer::Timer() : tp_(Clock::now()) { reset(); }
+// Add this offset to Timer::Clock::now() so that we can treat 0 value
+// as special case, and normal timeout always applies.
+constexpr auto OFFSET = 24_h;
+
+namespace {
+Timer::Clock::time_point getNow() { return Timer::Clock::now() + OFFSET; }
+} // namespace
+
+Timer::Timer() : tp_(getNow()) { reset(); }
 
 Timer::Timer(const Clock::time_point& tp) : tp_(tp) {}
 
-void Timer::reset() { tp_ = Clock::now(); }
+void Timer::reset() { tp_ = getNow(); }
 
 Timer::Clock::duration Timer::difference() const
 {
-  auto now = Clock::now();
+  auto now = getNow();
   if (now < tp_) {
     return Timer::Clock::duration(0_s);
   }

+ 6 - 2
src/TimerA2.h

@@ -54,9 +54,13 @@ public:
   Timer(const Timer& time) = default;
   Timer(Timer&& time) = default;
 
-  template <typename duration> constexpr Timer(const duration& t) : tp_(t) {}
+  template <typename duration>
+  constexpr explicit Timer(const duration& t)
+      : tp_(t)
+  {
+  }
 
-  Timer(const Clock::time_point& tp);
+  explicit Timer(const Clock::time_point& tp);
 
   Timer& operator=(Timer&& timer) = default;
   Timer& operator=(const Timer& timer) = default;