libmemcached: fix #13
[awesomized/libmemcached] / libtest / timer.hpp
index eac5194036300a533dfabfbf14f4fd4f9a8adc61..18ed3e8ebaf5e02061f9c612ae762fed3d3fe09c 100644 (file)
 #include <ctime>
 #include <iostream>
 
-#ifdef __MACH__
-#  include <mach/clock.h>
-#  include <mach/mach.h>
-#else
-#  include <time.h>
-#  include <sys/time.h>
-#endif
-
 
 namespace libtest {
 
 class Timer {
 public:
 
-  Timer()
-  {
-    _begin.tv_sec= 0;
-    _begin.tv_nsec= 0;
-    _end.tv_sec= 0;
-    _end.tv_nsec= 0;
-  }
-
-  void reset()
-  {
-    _end.tv_sec= 0;
-    _end.tv_nsec= 0;
-    _time(_begin);
-  }
-
-  void sample()
-  {
-    _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_nsec= 1000000000 +_end.tv_nsec -_begin.tv_nsec;
-
-    }
-    else
-    {
-      arg.tv_sec= _end.tv_sec -_begin.tv_sec;
-      arg.tv_nsec= _end.tv_nsec -_begin.tv_nsec;
-    }
-  }
+  Timer();
+
+  void reset();
+
+  void sample();
+
+  void offset(int64_t minutes_arg, int64_t seconds_arg, int64_t nanoseconds);
+
+  int64_t minutes();
+
+  uint64_t elapsed_milliseconds() const;
+
+  void difference(struct timespec& arg) const;
 
 private:
-  void _time(struct timespec& ts)
-  {
-#ifdef __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);
-    clock_get_time(_clock_serv, &_mach_timespec);
-    mach_port_deallocate(mach_task_self(), _clock_serv);
-    ts.tv_sec= _mach_timespec.tv_sec;
-    ts.tv_nsec= _mach_timespec.tv_nsec;
-#elif defined(HAVE_CLOCK_GETTIME) && HAVE_CLOCK_GETTIME
-    int ret;
-    do
-    {
-      ret= clock_gettime(CLOCK_REALTIME, &ts);
-    } while (ret == -1);
-#elif defined(HAVE_GETTIMEOFDAY) && HAVE_GETTIMEOFDAY
-    struct timeval tv;
-    int ret;
-    do 
-    {
-      ret= gettimeofday(&tv, NULL)
-    } while (ret == -1);
-    /* Convert from timeval to timespec */
-    ts.tv_sec= tv.tv_sec;
-    ts.tv_nsec= tv.tv_usec * 1000;
-#else
-    memset(&ts, 0, sizeof(struct timespec));
-#endif
-  }
+  void _time(struct timespec& ts);
 
 private:
   struct timespec _begin;