workaround for missing clock_gettime() in OS
[umurmur.git] / src / timer.c
index b354fd67df9d5c9338d351bed6631165533c6e9b..65df9edcb8df06b189338723bb8b9974c9328c90 100644 (file)
 #include <stdint.h>
 #include <stdio.h>
 
+#ifdef __MACH__
+#include <mach/clock.h>
+#include <mach/mach.h>
+#endif
+
 #include "timer.h"
 
 static uint64_t Timer_now()
 {
        struct timespec ts;
        uint64_t e;
-       
-        clock_gettime(CLOCK_MONOTONIC, &ts);
-        e = ts.tv_sec * 1000000LL;
-        e += ts.tv_nsec / 1000LL; //convert to microseconds
+
+#ifdef __MACH__
+  clock_serv_t clock;
+  mach_timespec_t mts;
+  host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &clock);
+  clock_get_time(clock, &mts);
+  mach_port_deallocate(mach_task_self(), clock);
+  ts.tv_sec = mts.tv_sec;
+  ts.tv_nsec = mts.tv_nsec;
+#else
+  clock_gettime(CLOCK_MONOTONIC, &ts);
+#endif
+  e = ts.tv_sec * 1000000LL;
+  e += ts.tv_nsec / 1000LL; //convert to microseconds
        return e;
 }