~zooko/cryptopp/trunk

« back to all changes in this revision

Viewing changes to hrtimer.h

  • Committer: weidai
  • Date: 2011-01-07 01:30:24 UTC
  • Revision ID: svn-v4:57ff6487-cd31-0410-9ec3-f628ee90f5f0:trunk/c5:522
fix for compiling with Clang from Marshall Clow

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
#define CRYPTOPP_HRTIMER_H
3
3
 
4
4
#include "config.h"
 
5
#ifndef HIGHRES_TIMER_AVAILABLE
 
6
#include <time.h>
 
7
#endif
5
8
 
6
9
NAMESPACE_BEGIN(CryptoPP)
7
10
 
 
11
#ifdef HIGHRES_TIMER_AVAILABLE
 
12
        typedef word64 TimerWord;
 
13
#else
 
14
        typedef clock_t TimerWord;
 
15
#endif
 
16
 
8
17
//! _
9
 
class TimerBase
 
18
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TimerBase
10
19
{
11
20
public:
12
21
        enum Unit {SECONDS = 0, MILLISECONDS, MICROSECONDS, NANOSECONDS};
13
22
        TimerBase(Unit unit, bool stuckAtZero)  : m_timerUnit(unit), m_stuckAtZero(stuckAtZero), m_started(false) {}
14
23
 
15
 
        virtual word64 GetCurrentTimerValue() =0;       // GetCurrentTime is a macro in MSVC 6.0
16
 
        virtual word64 TicksPerSecond() =0;     // this is not the resolution, just a conversion factor into seconds
 
24
        virtual TimerWord GetCurrentTimerValue() =0;    // GetCurrentTime is a macro in MSVC 6.0
 
25
        virtual TimerWord TicksPerSecond() =0;  // this is not the resolution, just a conversion factor into seconds
17
26
 
18
27
        void StartTimer();
19
28
        double ElapsedTimeAsDouble();
20
29
        unsigned long ElapsedTime();
21
30
 
22
31
private:
23
 
        double ConvertTo(word64 t, Unit unit);
 
32
        double ConvertTo(TimerWord t, Unit unit);
24
33
 
25
34
        Unit m_timerUnit;       // HPUX workaround: m_unit is a system macro on HPUX
26
35
        bool m_stuckAtZero, m_started;
27
 
        word64 m_start, m_last;
 
36
        TimerWord m_start, m_last;
28
37
};
29
38
 
30
39
//! measure CPU time spent executing instructions of this thread (if supported by OS)
34
43
{
35
44
public:
36
45
        ThreadUserTimer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false)       : TimerBase(unit, stuckAtZero) {}
37
 
        word64 GetCurrentTimerValue();
38
 
        word64 TicksPerSecond();
 
46
        TimerWord GetCurrentTimerValue();
 
47
        TimerWord TicksPerSecond();
39
48
};
40
49
 
41
 
#ifdef HIGHRES_TIMER_AVAILABLE
42
 
 
43
50
//! high resolution timer
44
 
class Timer : public TimerBase
 
51
class CRYPTOPP_DLL Timer : public TimerBase
45
52
{
46
53
public:
47
54
        Timer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false) : TimerBase(unit, stuckAtZero) {}
48
 
        word64 GetCurrentTimerValue();
49
 
        word64 TicksPerSecond();
 
55
        TimerWord GetCurrentTimerValue();
 
56
        TimerWord TicksPerSecond();
50
57
};
51
58
 
52
 
#endif
53
 
 
54
59
NAMESPACE_END
55
60
 
56
61
#endif