00001 #ifndef CRYPTOPP_HRTIMER_H
00002 #define CRYPTOPP_HRTIMER_H
00003
00004 #include "cryptopp_config.h"
00005
00006 NAMESPACE_BEGIN(CryptoPP)
00007
00008
00009 class TimerBase
00010 {
00011 public:
00012 enum Unit {SECONDS = 0, MILLISECONDS, MICROSECONDS, NANOSECONDS};
00013 TimerBase(Unit unit, bool stuckAtZero) : m_timerUnit(unit), m_stuckAtZero(stuckAtZero), m_started(false) {}
00014
00015 virtual word64 GetCurrentTimerValue() =0;
00016 virtual word64 TicksPerSecond() =0;
00017
00018 void StartTimer();
00019 double ElapsedTimeAsDouble();
00020 unsigned long ElapsedTime();
00021
00022 private:
00023 double ConvertTo(word64 t, Unit unit);
00024
00025 Unit m_timerUnit;
00026 bool m_stuckAtZero, m_started;
00027 word64 m_start;
00028 };
00029
00030
00031
00032
00033 class ThreadUserTimer : public TimerBase
00034 {
00035 public:
00036 ThreadUserTimer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false) : TimerBase(unit, stuckAtZero) {}
00037 word64 GetCurrentTimerValue();
00038 word64 TicksPerSecond();
00039 };
00040
00041 #ifdef HIGHRES_TIMER_AVAILABLE
00042
00043
00044 class Timer : public TimerBase
00045 {
00046 public:
00047 Timer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false) : TimerBase(unit, stuckAtZero) {}
00048 word64 GetCurrentTimerValue();
00049 word64 TicksPerSecond();
00050 };
00051
00052 #endif
00053
00054 NAMESPACE_END
00055
00056 #endif