]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - radiant/timer.cpp
Remove -Wno-reorder
[xonotic/netradiant.git] / radiant / timer.cpp
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 #include "timer.h"
23
24
25 #if defined( WIN32 )
26
27 #include <windows.h>
28
29 MillisecondTime MillisecondTime::current(){
30         static class Cached
31         {
32         LONGLONG m_frequency;
33         LONGLONG m_base;
34 public:
35         Cached(){
36                 QueryPerformanceFrequency( (LARGE_INTEGER *) &m_frequency );
37                 QueryPerformanceCounter( (LARGE_INTEGER *) &m_base );
38         }
39         LONGLONG frequency(){
40                 return m_frequency;
41         }
42         LONGLONG base(){
43                 return m_base;
44         }
45         } cached;
46
47         if ( cached.frequency() > 0 ) {
48                 LONGLONG count;
49                 QueryPerformanceCounter( (LARGE_INTEGER *) &count );
50                 return time_from_ticks( count - cached.base(), cached.frequency() );
51         }
52         else
53         {
54 #if 1
55                 return MillisecondTime();
56 #else
57                 return time_from_ticks( timeGetTime(), 1000 );
58 #endif
59         }
60 }
61
62
63
64
65 #elif defined( POSIX )
66
67 #include <time.h>
68 #include "sys/time.h"
69
70 MillisecondTime MillisecondTime::current(){
71         static class Cached
72         {
73         time_t m_base;
74 public:
75         Cached(){
76                 time( &m_base );
77         }
78         time_t base(){
79                 return m_base;
80         }
81         } cached;
82
83         timeval time;
84         gettimeofday( &time, 0 );
85         return MillisecondTime( ( time.tv_sec - cached.base() ) * 1000 + time.tv_usec / 1000 );
86 }
87
88
89
90 #else
91
92 #include <ctime>
93
94 MillisecondTime MillisecondTime::current(){
95         return time_from_ticks<std::clock_t>( std::clock(), CLOCKS_PER_SEC );
96 }
97
98
99
100 #endif