2 // timestamp.hxx -- class for managing a timestamp (seconds & milliseconds.)
4 // Written by Curtis Olson, started December 1998.
6 // Copyright (C) 1998 Curtis L. Olson - curt@flightgear.org
8 // This program is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU General Public License as
10 // published by the Free Software Foundation; either version 2 of the
11 // License, or (at your option) any later version.
13 // This program is distributed in the hope that it will be useful, but
14 // WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 // (Log is kept at end of this file)
26 #ifndef _TIMESTAMP_HXX
27 #define _TIMESTAMP_HXX
31 # error This library requires C++
45 #ifdef HAVE_SYS_TIMEB_H
46 # include <sys/timeb.h> // for ftime() and struct timeb
49 # include <unistd.h> // for gettimeofday()
51 #ifdef HAVE_SYS_TIME_H
52 # include <sys/time.h> // for get/setitimer, gettimeofday, struct timeval
57 # if defined( __CYGWIN__ ) || defined( __CYGWIN32__ )
61 # include <mmsystem.h>
75 fgTIMESTAMP( const long s, const long m );
78 // Set time to current time
81 fgTIMESTAMP& operator = ( const fgTIMESTAMP& t );
83 friend fgTIMESTAMP operator + (const fgTIMESTAMP& t, const long& m);
84 friend long operator - (const fgTIMESTAMP& a, const fgTIMESTAMP& b);
86 inline long get_seconds() const { return seconds; }
87 inline long get_millis() const { return millis; }
90 inline fgTIMESTAMP::fgTIMESTAMP() {
93 inline fgTIMESTAMP::fgTIMESTAMP( const long s, const long m ) {
98 inline fgTIMESTAMP::~fgTIMESTAMP() {
101 inline fgTIMESTAMP& fgTIMESTAMP::operator = (const fgTIMESTAMP& t)
108 inline void fgTIMESTAMP::stamp() {
114 #elif defined( HAVE_GETTIMEOFDAY )
115 struct timeval current;
117 // fg_timestamp currtime;
118 gettimeofday(¤t, &tz);
119 seconds = current.tv_sec;
120 millis = current.tv_usec / 1000;
121 #elif defined( HAVE_GETLOCALTIME )
123 GetLocalTime(¤t);
124 seconds = current.wSecond;
125 millis = current.wMilliseconds;
126 #elif defined( HAVE_FTIME )
127 struct timeb current;
129 seconds = current.time;
130 millis = current.millitm;
136 // difference between time stamps in milliseconds
137 inline fgTIMESTAMP operator + (const fgTIMESTAMP& t, const long& m) {
139 return fgTIMESTAMP( 0, t.millis + m );
141 return fgTIMESTAMP( t.seconds + ( t.millis + m ) / 1000,
142 ( t.millis + m ) % 1000 );
146 // difference between time stamps in milliseconds
147 inline long operator - (const fgTIMESTAMP& a, const fgTIMESTAMP& b)
150 return a.millis - b.millis;
152 return 1000 * (a.seconds - b.seconds) + (a.millis - b.millis);
157 #endif // _TIMESTAMP_HXX
161 // Revision 1.2 1998/12/11 20:26:56 curt
164 // Revision 1.1 1998/12/05 14:21:33 curt
165 // Moved struct fg_timestamp to class fgTIMESTAMP and moved it's definition
166 // to it's own file, timestamp.hxx.