//========================================================================
//
// GooTimer.cc
//
// Copyright 2005 Jonathan Blandford <jrb@redhat.com>
// Inspired by gtimer.c in glib, which is Copyright 2000 by the GLib Team
//
//========================================================================

#include <config.h>

#ifdef USE_GCC_PRAGMAS
#pragma implementation
#endif

#include "GooTimer.h"
#include <string.h>

#define USEC_PER_SEC 1000000

//------------------------------------------------------------------------
// GooTimer
//------------------------------------------------------------------------

GooTimer::GooTimer() {
  start();
}

void GooTimer::start() {
#ifdef HAVE_GETTIMEOFDAY
  gettimeofday(&start_time, NULL);
#elif defined(_MSC_VER)
  QueryPerformanceCounter(&start_time);
#endif
  active = true;
}

void GooTimer::stop() {
#ifdef HAVE_GETTIMEOFDAY
  gettimeofday(&end_time, NULL);
#elif defined(_MSC_VER)
  QueryPerformanceCounter(&end_time);
#endif
  active = false;
}

#ifdef HAVE_GETTIMEOFDAY
double GooTimer::getElapsed()
{
  double total;
  struct timeval elapsed;

  if (active)
    gettimeofday(&end_time, NULL);

  if (start_time.tv_usec > end_time.tv_usec) {
      end_time.tv_usec += USEC_PER_SEC;
      end_time.tv_sec--;
  }

  elapsed.tv_usec = end_time.tv_usec - start_time.tv_usec;
  elapsed.tv_sec = end_time.tv_sec - start_time.tv_sec;

  total = elapsed.tv_sec + ((double) elapsed.tv_usec / 1e6);
  if (total < 0)
      total = 0;

  return total;
}
#elif defined(_MSC_VER)
double GooTimer::getElapsed()
{
  LARGE_INTEGER   freq;
  double          time_in_secs;
  QueryPerformanceFrequency(&freq);

  if (active)
    QueryPerformanceCounter(&end_time);

  time_in_secs = (double)(end_time.QuadPart-start_time.QuadPart)/(double)freq.QuadPart;
  return time_in_secs * 1000.0;

}
#else
double GooTimer::getElapsed()
{
#warning "no support for GooTimer"
  return 0;
}
#endif

