#pragma once
#if !defined( CLIENT_H )
#define CLIENT_H
#include <boost/program_options.hpp>
#ifdef WIN32
struct Timer
{
LARGE_INTEGER start, stop, freq;
public:
Timer() { QueryPerformanceFrequency( &freq ); }
void Start() { QueryPerformanceCounter(&start); }
double Sample()
{
QueryPerformanceCounter ( &stop );
double time = (double)(stop.QuadPart-start.QuadPart) / (double)(freq.QuadPart);
return time;
}
};
#elif defined(__APPLE__) || defined(__MACOSX)
#include <mach/clock.h>
#include <mach/mach.h>
struct Timer
{
clock_serv_t clock;
mach_timespec_t start, end;
public:
Timer() { host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &clock); }
~Timer() { mach_port_deallocate(mach_task_self(), clock); }
void Start() { clock_get_time(clock, &start); }
double Sample()
{
clock_get_time(clock, &end);
double time = 1000000000L * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec;
return time * 1E-9;
}
};
#else
#include <time.h>
#include <math.h>
struct Timer
{
struct timespec start, end;
public:
Timer() { }
void Start() { clock_gettime(CLOCK_MONOTONIC, &start); }
double Sample()
{
clock_gettime(CLOCK_MONOTONIC, &end);
double time = 1000000000L * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec;
return time * 1E-9;
}
};
#endif
#endif