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

pull/709/head
Tatsuhiro Tsujikawa 2016-07-14 00:52:43 +09:00
parent 01f870221b
commit 777b818690
2 changed files with 17 additions and 5 deletions

View File

@ -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);
}

View File

@ -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;