/* */ #include "TimeA2.h" #include "Util.h" namespace aria2 { Time::Time() { reset(); } Time::Time(const Time& time) { tv = time.tv; } Time::Time(time_t sec) { setTimeInSec(sec); } Time::~Time() {} Time& Time::operator=(const Time& time) { if(this != &time) { tv = time.tv; } return *this; } void Time::reset() { gettimeofday(&tv, 0); } struct timeval Time::getCurrentTime() const { struct timeval now; gettimeofday(&now, 0); return now; } bool Time::elapsed(time_t sec) const { // Because of gettimeofday called from getCurrentTime() is slow, and most of // the time this function is called before specified time passes, we first do // simple test using time. // Then only when the further test is required, call gettimeofday. time_t now = time(0); if(tv.tv_sec+sec < now) { return true; } else if(tv.tv_sec+sec == now) { return Util::difftvsec(getCurrentTime(), tv) >= sec; } else { return false; } } bool Time::elapsedInMillis(int64_t millis) const { return Util::difftv(getCurrentTime(), tv)/1000 >= millis; } bool Time::isNewer(const Time& time) const { return Util::difftv(this->tv, time.tv) > 0; } time_t Time::difference() const { return Util::difftvsec(getCurrentTime(), tv); } time_t Time::difference(const struct timeval& now) const { return Util::difftvsec(now, tv); } int64_t Time::differenceInMillis() const { return Util::difftv(getCurrentTime(), tv)/1000; } int64_t Time::differenceInMillis(const struct timeval& now) const { return Util::difftv(now, tv)/1000; } bool Time::isZero() const { return tv.tv_sec == 0 && tv.tv_usec == 0; } int64_t Time::getTimeInMicros() const { return (int64_t)tv.tv_sec*1000*1000+tv.tv_usec; } int64_t Time::getTimeInMillis() const { return (int64_t)tv.tv_sec*1000+tv.tv_usec/1000; } time_t Time::getTime() const { return tv.tv_sec; } void Time::setTimeInSec(time_t sec) { tv.tv_sec = sec; tv.tv_usec = 0; } } // namespace aria2