#ifndef CHRONO_HPP
#define CHRONO_HPP

// Détection du système cible...
#include "usgeDetectSystem.h"

#include <time.h>


#ifdef TARGET_SYSTEM_PSP
    #include <sys/time.h>
#elif defined TARGET_SYSTEM_WIN32
    #include <windows.h>
#endif


namespace USpeedGameEngine
{

class Chrono
{
    //*********************//
    //***** Variables *****//
    //*********************//
    public:
    protected:
    private:
        unsigned long int totalTime;        //!< Le nombre total de millisecondes où le chronomètre n'a pas été en pause
        bool onPause;                       //!< Permet de savoir si le chronomètre est en pause

        #ifdef TARGET_SYSTEM_PSP
            struct timeval startTime;       //!< Heure de départ - Référence
        #elif defined TARGET_SYSTEM_WIN32
            LARGE_INTEGER startTime;        //!< Heure de départ - Référence
            DWORD startTick;                //!< Début des secondes pour corriger une éventuelle erreur de bus PCI - ISA
            LONGLONG prevElapsedTime;       //!< Temps écoulé précédent
        #endif

    //*********************//
    //***** Fonctions *****//
    //*********************//
    public:
        // Constructeur par défaut
        Chrono();
        // Destructeur par défaut
        ~Chrono();
        // Retourne le temps écoulé depuis le dernier "reset" en millisecondes
        unsigned long int getTime();
        // Retourne le temps écoulé depuis le dernier "reset" en microsecondes.
        unsigned long int getMicrotime();
        // Met en pause le chronomètre
        void pause();
        // Relance le chronomètre si il était en pause
        void unpause();
        // Permet de savoir si le chronomètre est en pause
        bool isOnPause();
        // Remet le chronomètre à 0 ou à msTime
        void reset(unsigned long int msTime);
        void reset();
    protected:
    private:
};


}        // Fin "namespace USpeedGameEngine"

#endif
