summaryrefslogtreecommitdiff
path: root/plugins/CryptoPP/crypto/hrtimer.h
diff options
context:
space:
mode:
authorVadim Dashevskiy <watcherhd@gmail.com>2012-05-15 10:38:20 +0000
committerVadim Dashevskiy <watcherhd@gmail.com>2012-05-15 10:38:20 +0000
commit48540940b6c28bb4378abfeb500ec45a625b37b6 (patch)
tree2ef294c0763e802f91d868bdef4229b6868527de /plugins/CryptoPP/crypto/hrtimer.h
parent5c350913f011e119127baeb32a6aedeb4f0d33bc (diff)
initial commit
git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/CryptoPP/crypto/hrtimer.h')
-rw-r--r--plugins/CryptoPP/crypto/hrtimer.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/plugins/CryptoPP/crypto/hrtimer.h b/plugins/CryptoPP/crypto/hrtimer.h
new file mode 100644
index 0000000000..de8835fef7
--- /dev/null
+++ b/plugins/CryptoPP/crypto/hrtimer.h
@@ -0,0 +1,65 @@
+#ifndef CRYPTOPP_HRTIMER_H
+#define CRYPTOPP_HRTIMER_H
+
+#include "config.h"
+#ifndef HIGHRES_TIMER_AVAILABLE
+#include <time.h>
+#endif
+
+NAMESPACE_BEGIN(CryptoPP)
+
+#ifdef HIGHRES_TIMER_AVAILABLE
+ #ifdef WORD64_AVAILABLE
+ typedef word64 TimerWord;
+ #else
+ typedef word32 TimerWord;
+ #endif
+#else
+ typedef clock_t TimerWord;
+#endif
+
+//! _
+class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TimerBase
+{
+public:
+ enum Unit {SECONDS = 0, MILLISECONDS, MICROSECONDS, NANOSECONDS};
+ TimerBase(Unit unit, bool stuckAtZero) : m_timerUnit(unit), m_stuckAtZero(stuckAtZero), m_started(false) {}
+
+ virtual TimerWord GetCurrentTimerValue() =0; // GetCurrentTime is a macro in MSVC 6.0
+ virtual TimerWord TicksPerSecond() =0; // this is not the resolution, just a conversion factor into seconds
+
+ void StartTimer();
+ double ElapsedTimeAsDouble();
+ unsigned long ElapsedTime();
+
+private:
+ double ConvertTo(TimerWord t, Unit unit);
+
+ Unit m_timerUnit; // HPUX workaround: m_unit is a system macro on HPUX
+ bool m_stuckAtZero, m_started;
+ TimerWord m_start, m_last;
+};
+
+//! measure CPU time spent executing instructions of this thread (if supported by OS)
+/*! /note This only works correctly on Windows NT or later. On Unix it reports process time, and others wall clock time.
+*/
+class ThreadUserTimer : public TimerBase
+{
+public:
+ ThreadUserTimer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false) : TimerBase(unit, stuckAtZero) {}
+ TimerWord GetCurrentTimerValue();
+ TimerWord TicksPerSecond();
+};
+
+//! high resolution timer
+class CRYPTOPP_DLL Timer : public TimerBase
+{
+public:
+ Timer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false) : TimerBase(unit, stuckAtZero) {}
+ TimerWord GetCurrentTimerValue();
+ TimerWord TicksPerSecond();
+};
+
+NAMESPACE_END
+
+#endif