/** * \file * * * \brief Portable abstraction for high-resolution time handling (implementation) * * \author Bernie Innocenti */ #include "hptime.h" #if defined(_WIN32) #include hptime_t hptime_get(void) { FILETIME ft; /* * La precisione dei FileTime sarebbe 100ns, ma il * valore viene ottenuto convertendo una struttura * SYSTEMTIME, che ha precisione di 1ms. Il numero * che otteniamo e' quindi sempre un multiplo di * 100000. */ GetSystemTimeAsFileTime(&ft); /* Copy the upper/lower into a quadword. */ return (((hptime_t)ft.dwHighDateTime) << 32) + (hptime_t)ft.dwLowDateTime; } #elif defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) #include /* for gettimeofday() */ #include /* for NULL */ hptime_t hptime_get(void) { struct timeval tv; gettimeofday(&tv, NULL); return (hptime_t)tv.tv_sec * HPTIME_TICKS_PER_SECOND + (hptime_t)tv.tv_usec; } #else /* !__unix__ */ #error OS dependent support code missing for this OS #endif /* !__unix__ */