--- /dev/null
+/*!
+ * \file
+ * <!--
+ * Copyright 2003,2004 Develer S.r.l. (http://www.develer.com/)
+ * All rights reserved.
+ * -->
+ *
+ * \brief Portable abstraction for high-resolution time handling (implementation)
+ *
+ * \version $Id$
+ * \author Bernardo Innocenti <bernie@develer.com>
+ */
+
+/*
+ * $Log$
+ * Revision 1.1 2004/06/03 09:01:06 bernie
+ * Import into DevLib.
+ *
+ */
+
+#include "hptime.h"
+
+#if defined(_WIN32)
+
+#include <windows.h>
+
+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__)
+
+#include <sys/time.h>
+
+hptime_t hptime_get(void)
+{
+ struct timeval tv;
+
+ gettimeofday(&tv, 0);
+ 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__ */
+
--- /dev/null
+/*!
+ * \file
+ * <!--
+ * Copyright 2003,2004 Develer S.r.l. (http://www.develer.com/)
+ * All rights reserved.
+ * -->
+ *
+ * \brief Portable abstraction for high-resolution time handling (interface)
+ *
+ * \version $Id$
+ * \author Bernardo Innocenti <bernie@develer.com>
+ */
+
+/*
+ * $Log$
+ * Revision 1.1 2004/06/03 09:01:06 bernie
+ * Import into DevLib.
+ *
+ */
+#ifndef HPTIME_H
+#define HPTIME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifdef _WIN32
+
+ /* type for time expressed in ms */
+ typedef unsigned long mtime_t;
+
+ /* our type for "high precision absolute time" */
+ typedef unsigned __int64 hptime_t;
+
+ #define HPTIME_TICKS_PER_SECOND ((hptime_t)10000000I64)
+ #define HPTIME_TICKS_PER_MILLISEC ((hptime_t)10000I64)
+ #define HPTIME_TICKS_PER_MICRO ((hptime_t)10I64)
+
+#elif defined(__unix__)
+
+ /* type for time expressed in ms */
+ typedef long mtime_t;
+
+ /* our type for "high precision absolute time" */
+ typedef long long hptime_t;
+
+ #define HPTIME_TICKS_PER_SECOND ((hptime_t)1000000LL)
+ #define HPTIME_TICKS_PER_MILLISEC ((hptime_t)1000LL)
+ #define HPTIME_TICKS_PER_MICRO ((hptime_t)1LL)
+
+#else /* !__unix__ */
+ #error OS dependent support code missing for this OS
+#endif /* !__unix__ */
+
+/*!
+ * Return the current time with the maximum precision made available from the hosting OS
+ */
+extern hptime_t hptime_get(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* HPTIME_H */