Crypto++

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

hrtimer.h

    00001 #ifndef CRYPTOPP_HRTIMER_H
    00002 #define CRYPTOPP_HRTIMER_H
    00003
    00004 #include "config.h"
    00005 #ifndef HIGHRES_TIMER_AVAILABLE
    00006 #include <time.h>
    00007 #endif
    00008
    00009 NAMESPACE_BEGIN(CryptoPP)
    00010
    00011 #ifdef HIGHRES_TIMER_AVAILABLE
    00012     typedef word64 TimerWord;
    00013 #else
    00014     typedef clock_t TimerWord;
    00015 #endif
    00016
    00017 //! _
    00018 class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TimerBase
    00019 {
    00020 public:
    00021     enum Unit {SECONDS = 0, MILLISECONDS, MICROSECONDS, NANOSECONDS};
    00022     TimerBase(Unit unit, bool stuckAtZero)  : m_timerUnit(unit), m_stuckAtZero(stuckAtZero), m_started(false) {}
    00023
    00024     virtual TimerWord GetCurrentTimerValue() =0;    // GetCurrentTime is a macro in MSVC 6.0
    00025     virtual TimerWord TicksPerSecond() =0;  // this is not the resolution, just a conversion factor into seconds
    00026
    00027     void StartTimer();
    00028     double ElapsedTimeAsDouble();
    00029     unsigned long ElapsedTime();
    00030
    00031 private:
    00032     double ConvertTo(TimerWord t, Unit unit);
    00033
    00034     Unit m_timerUnit;   // HPUX workaround: m_unit is a system macro on HPUX
    00035     bool m_stuckAtZero, m_started;
    00036     TimerWord m_start, m_last;
    00037 };
    00038
    00039 //! measure CPU time spent executing instructions of this thread (if supported by OS)
    00040 /*! /note This only works correctly on Windows NT or later. On Unix it reports process time, and others wall clock time.
    00041 */
    00042 class ThreadUserTimer : public TimerBase
    00043 {
    00044 public:
    00045     ThreadUserTimer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false)   : TimerBase(unit, stuckAtZero) {}
    00046     TimerWord GetCurrentTimerValue();
    00047     TimerWord TicksPerSecond();
    00048 };
    00049
    00050 //! high resolution timer
    00051 class CRYPTOPP_DLL Timer : public TimerBase
    00052 {
    00053 public:
    00054     Timer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false) : TimerBase(unit, stuckAtZero) {}
    00055     TimerWord GetCurrentTimerValue();
    00056     TimerWord TicksPerSecond();
    00057 };
    00058
    00059 NAMESPACE_END
    00060
    00061 #endif