2 Copyright (C) 2001-2006, William Joseph.
5 This file is part of GtkRadiant.
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.
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.
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
22 #if !defined ( INCLUDED_TIMER_H )
23 #define INCLUDED_TIMER_H
27 const int msec_per_sec = 1000;
29 class MillisecondTime {
30 unsigned int m_milliseconds;
32 MillisecondTime(unsigned int milliseconds)
33 : m_milliseconds(milliseconds)
41 static MillisecondTime current();
43 unsigned int milliseconds_since(const MillisecondTime &other) const
45 return m_milliseconds - other.m_milliseconds;
49 template<typename tick_type>
50 inline MillisecondTime time_from_ticks(tick_type tick_count, tick_type ticks_per_sec)
52 return MillisecondTime(
53 static_cast<unsigned int>( tick_count / static_cast<double>( ticks_per_sec / msec_per_sec )));
58 const unsigned int usec_per_sec = 1000000;
65 MillisecondTime( unsigned int sec, unsigned int usec )
66 : m_sec( sec ), m_usec( usec ){
70 staticMillisecondTime current();
72 unsigned int milliseconds_since( const MillisecondTime& other ) const {
73 return static_cast<unsigned int>( ( m_sec * static_cast<double>( usec_per_sec ) + m_usec )
74 - ( other.m_sec * static_cast<double>( usec_per_sec ) + other.m_usec ) ) / 1000;
78 template<typename tick_type>
79 inline MillisecondTime time_from_ticks( tick_type tick_count, tick_type ticks_per_sec ){
80 return MillisecondTime( static_cast<unsigned int>( tick_count / ticks_per_sec ),
81 static_cast<unsigned int>( ( tick_count % ticks_per_sec ) * ( usec_per_sec / static_cast<double>( ticks_per_sec ) ) ) );
87 MillisecondTime m_start;
92 m_start = MillisecondTime::current();
95 unsigned int elapsed_msec()
97 return MillisecondTime::current().milliseconds_since(m_start);