#include // max, min #include // high_resolution_clock seconds, milliseconds, microseconds, nanoseconds #include // uint64_t #include "util/timer.h" namespace Util { Timer::Timer() { m_start = std::chrono::high_resolution_clock::now(); } Timer Timer::operator-(const Timer& timer) { return Timer(TimePoint { m_start - timer.start() }); } template To Timer::to(From from) { return std::chrono::duration_cast(from); } uint64_t Timer::toSeconds() { return to(m_start.time_since_epoch()).count(); } uint64_t Timer::toMilliseconds() { return to(m_start.time_since_epoch()).count(); } uint64_t Timer::toMicroseconds() { return to(m_start.time_since_epoch()).count(); } uint64_t Timer::toNanoseconds() { return to(m_start.time_since_epoch()).count(); } template uint64_t Timer::elapsed() { auto now = std::chrono::high_resolution_clock::now(); return std::chrono::duration_cast(now - m_start).count(); } uint64_t Timer::elapsedSeconds() { return elapsed(); } uint64_t Timer::elapsedMilliseconds() { return elapsed(); } uint64_t Timer::elapsedMicroseconds() { return elapsed(); } uint64_t Timer::elapsedNanoseconds() { return elapsed(); } } // namespace Util