#ifndef GETTIME_H
#define GETTIME_H


#ifdef WIN32

// Fonction de temps sous Windows
// définir __PRECISE_GETTIME__ pour utiliser QueryPerformanceCounter

#ifdef __PRECISE_GETTIME__
#include <windows.h>
#else
#include <ctime>
#endif // __PRECISE_GETTIME__

inline unsigned long GetTime()
{
#ifdef __PRECISE_GETTIME__

  static bool first = true;
  static LARGE_INTEGER freq;
  if (first)
  {
    first = false;
    QueryPerformanceFrequency(&freq);
  }

  LARGE_INTEGER count;
  QueryPerformanceCounter(&count);
  return (1000000*count.QuadPart) / freq.QuadPart;

#else

	return 1000*clock();

#endif // __PRECISE_GETTIME__
}

// Fin de la fonction de temps sous Windows


#elif defined __linux__

// Fonction de temps sous Linux

#include <sys/time.h>
#include <time.h>

inline unsigned long GetTime()
{
  static struct timeval Temps;
  gettimeofday(&Temps, 0);

  return (Temps.tv_sec*1000000 + Temps.tv_usec );
}

// Fin de la fontion de temps sous Linux

#else

#error ERROR: OS not supported


#endif


#endif // GETTIME_H
