00001
#ifndef CRYPTOPP_HRTIMER_H
00002
#define CRYPTOPP_HRTIMER_H
00003
00004
#include "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