Numerous fixes related to compiling for mingw
[m6w6/libmemcached] / libtest / timer.hpp
index 37da32f1af1e9ad99086da3faae060b54d4673ae..73de26c6ac2361168cdf7974180cd32d4fa3c5e1 100644 (file)
@@ -36,8 +36,9 @@
 
 #pragma once
 
+#include <cstdlib>
 #include <ctime>
-#include <ostream>
+#include <iostream>
 
 #ifdef __MACH__
 #  include <mach/clock.h>
@@ -72,11 +73,34 @@ public:
     _time(_end);
   }
 
+  void offset(int64_t minutes_arg, int64_t seconds_arg, int64_t nanoseconds)
+  {
+    reset();
+    _end= _begin;
+    _end.tv_sec+= (minutes_arg * 60) +seconds_arg;
+    _end.tv_nsec+= nanoseconds;
+  }
+
+  int64_t minutes()
+  {
+    struct timespec result;
+    difference(result);
+    return int64_t(result.tv_sec / 60);
+  }
+
+  uint64_t elapsed_milliseconds() const
+  {
+    struct timespec temp;
+    difference(temp);
+
+    return temp.tv_sec*1000 +temp.tv_nsec/1000000;
+  }
+
   void difference(struct timespec& arg) const
   {
     if ((_end.tv_nsec -_begin.tv_nsec) < 0)
     {
-      arg.tv_sec= _end.tv_sec -_begin.tv_sec-1;
+      arg.tv_sec= _end.tv_sec -_begin.tv_sec -1;
       arg.tv_nsec= 1000000000 +_end.tv_nsec -_begin.tv_nsec;
 
     }
@@ -90,7 +114,9 @@ public:
 private:
   void _time(struct timespec& ts)
   {
-#ifdef __MACH__ // OSX lacks clock_gettime()
+#if defined(HAVE_CLOCK_GETTIME) && HAVE_CLOCK_GETTIME
+    clock_gettime(CLOCK_REALTIME, &ts);
+#elif defined(__MACH__) && __MACH__ // OSX lacks clock_gettime()
     clock_serv_t _clock_serv;
     mach_timespec_t _mach_timespec;
     host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &_clock_serv);
@@ -99,7 +125,6 @@ private:
     ts.tv_sec= _mach_timespec.tv_sec;
     ts.tv_nsec= _mach_timespec.tv_nsec;
 #else
-    clock_gettime(CLOCK_REALTIME, &ts);
 #endif
   }