e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef CR_TIMER_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CR_TIMER_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef WINDOWS
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <sys/time.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#if defined (IRIX) || defined( IRIX64 )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef unsigned long long iotimer64_t;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef unsigned int iotimer32_t;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <windows.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct Timer
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync double time0, elapsed;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync char running;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int fd;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#if defined (IRIX) || defined( IRIX64 )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync unsigned long long counter64;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync unsigned int counter32;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync unsigned int cycleval;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync volatile iotimer64_t *iotimer_addr64;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync volatile iotimer32_t *iotimer_addr32;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync void *unmapLocation;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int unmapSize;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#elif defined(WINDOWS)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync LARGE_INTEGER performance_counter, performance_frequency;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync double one_over_frequency;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#elif defined( Linux ) || defined( FreeBSD ) || defined(DARWIN) || defined(AIX) || defined (SunOS) || defined(OSF1)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync struct timeval timeofday;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRTimer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncCRTimer *crTimerNewTimer( void );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crDestroyTimer( CRTimer *t );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crStartTimer( CRTimer *t );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crStopTimer( CRTimer *t );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crResetTimer( CRTimer *t );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncdouble crTimerTime( CRTimer *t );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_TIMER_H */