]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - radiant/timer.h
...
[xonotic/netradiant.git] / radiant / timer.h
1 /*
2 Copyright (C) 2001-2006, William Joseph.
3 All Rights Reserved.
4
5 This file is part of GtkRadiant.
6
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 */
21
22 #if !defined (INCLUDED_TIMER_H)
23 #define INCLUDED_TIMER_H
24
25 #if 1
26
27 const int msec_per_sec = 1000;
28
29 class MillisecondTime
30 {
31   unsigned int m_milliseconds;
32 public:
33   MillisecondTime(unsigned int milliseconds)
34     : m_milliseconds(milliseconds)
35   {
36   }
37   MillisecondTime()
38   {
39   }
40   static MillisecondTime current();
41
42   unsigned int milliseconds_since(const MillisecondTime& other) const
43   {
44     return m_milliseconds - other.m_milliseconds;
45   }
46 };
47
48 template<typename tick_type>
49 inline MillisecondTime time_from_ticks(tick_type tick_count, tick_type ticks_per_sec)
50 {
51   return MillisecondTime(static_cast<unsigned int>(tick_count / static_cast<double>(ticks_per_sec / msec_per_sec)));
52 }
53
54 #else
55
56 const unsigned int usec_per_sec = 1000000;
57
58 class MillisecondTime
59 {
60   unsigned int m_sec;
61   unsigned int m_usec;
62 public:
63   MillisecondTime(unsigned int sec, unsigned int usec)
64     : m_sec(sec), m_usec(usec)
65   {
66   }
67   MillisecondTime()
68   {
69   }
70   staticMillisecondTime current();
71
72   unsigned int milliseconds_since(const MillisecondTime& other) const
73   {
74     return static_cast<unsigned int>((m_sec * static_cast<double>(usec_per_sec) + m_usec)
75       - (other.m_sec * static_cast<double>(usec_per_sec) + other.m_usec)) / 1000;
76   }
77 };
78
79 template<typename tick_type>
80 inline MillisecondTime time_from_ticks(tick_type tick_count, tick_type ticks_per_sec)
81 {
82   return MillisecondTime(static_cast<unsigned int>(tick_count / ticks_per_sec),
83     static_cast<unsigned int>((tick_count % ticks_per_sec) * (usec_per_sec / static_cast<double>(ticks_per_sec))));
84 }
85
86 #endif
87
88 class Timer
89 {
90   MillisecondTime m_start;
91
92 public:
93   void start()
94   {
95     m_start = MillisecondTime::current();
96   }
97   unsigned int elapsed_msec()
98   {
99     return MillisecondTime::current().milliseconds_since(m_start);
100   }
101 };
102
103 #endif