From b21162cf8e06f40baa1f58be6a8c17435cebc34d Mon Sep 17 00:00:00 2001 From: weidai Date: Fri, 4 Oct 2002 17:31:41 +0000 Subject: Initial revision git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@2 57ff6487-cd31-0410-9ec3-f628ee90f5f0 --- hrtimer.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 hrtimer.cpp (limited to 'hrtimer.cpp') diff --git a/hrtimer.cpp b/hrtimer.cpp new file mode 100644 index 0000000..2dafbca --- /dev/null +++ b/hrtimer.cpp @@ -0,0 +1,75 @@ +// hrtimer.cpp - written and placed in the public domain by Wei Dai + +#include "pch.h" +#include "hrtimer.h" +#include // for NULL + +#ifdef HIGHRES_TIMER_AVAILABLE + +#if defined(CRYPTOPP_WIN32_AVAILABLE) +#include +#elif defined(__unix__) +#include +#elif defined(macintosh) +#include +#endif + +#include + +NAMESPACE_BEGIN(CryptoPP) + +word64 Timer::GetCurrentTimerValue() +{ +#if defined(CRYPTOPP_WIN32_AVAILABLE) + FILETIME now; + GetSystemTimeAsFileTime(&now); + return now.dwLowDateTime + ((word64)now.dwHighDateTime << 32); +#elif defined(__unix__) + timeval now; + gettimeofday(&now, NULL); + return (word64)now.tv_sec * 1000000 + now.tv_usec; +#elif defined(macintosh) + UnsignedWide now; + Microseconds(&now); + return now.lo + ((word64)now.hi << 32); +#endif +} + +unsigned long Timer::ConvertTo(word64 t, Unit unit) +{ + switch (unit) + { + case SECONDS: + return (unsigned long)(t / (TicksPerMillisecond() * 1000)); + case MILLISECONDS: + return (unsigned long)(t / TicksPerMillisecond()); + case MICROSECONDS: + assert(TicksPerMillisecond() % 1000 == 0); + return (unsigned long)(t / (TicksPerMillisecond() / 1000)); + } + assert(false); + return 0; +} + +void Timer::StartTimer() +{ + m_start = GetCurrentTimerValue(); + m_started = true; +} + +unsigned long Timer::ElapsedTime() +{ + if (m_stuckAtZero) + return 0; + else if (m_started) + return ConvertTo(GetCurrentTimerValue() - m_start, m_timerUnit); + else + { + StartTimer(); + return 0; + } +} + +NAMESPACE_END + +#endif -- cgit v1.2.1