/*
 * Revised form high-precision timing code from PostgreSQL
 */

#ifndef WIN32
typedef struct timeval instr_time;
#else
typedef LARGE_INTEGER instr_time;

static __inline__ double
GetTimerFrequency(void)
{
	LARGE_INTEGER f;

	QueryPerformanceFrequency(&f);
	return (double) f.QuadPart;
}
#endif

static void
current_time(instr_time *curtime)
{
#ifndef WIN32
	gettimeofday(curtime, NULL);
#else
	QueryPerformanceCounter(curtime);
#endif
}

static double
elapsed_time(instr_time *starttime)
{
	instr_time	endtime;

	current_time(&endtime);

#ifndef WIN32
	endtime.tv_sec -= starttime->tv_sec;
	endtime.tv_usec -= starttime->tv_usec;
	while (endtime.tv_usec < 0)
	{
		endtime.tv_usec += 1000000;
		endtime.tv_sec--;
	}
	return (((double) endtime.tv_sec) + ((double) endtime.tv_usec) / 1000000.0);
#else
	endtime.QuadPart -= starttime->QuadPart;
	return (((double) endtime.QuadPart) / GetTimerFrequency());
#endif
}

