/*
 * Instituto Superior de Engenharia do Porto
 *
 * Estruturas de Informação
 *
 * 2000/2001
 *
 * (C) Paulo Sousa
 *
 * ------------------------------------------
 *
 * Trabalho nº 1
 *
 *	classe CCronometro
 *
 */

#ifndef __CRONOMETRO_INC__
#define __CRONOMETRO_INC__


#include <ctime>
using namespace std;


class CCronometro
{
	clock_t m_start;
	clock_t m_stop;

public:
	CCronometro(bool bStart = true);
	void Start();
	double Pause(bool bMiliseg = false) const;
	double Stop(bool bMiliseg = false);
	double Duracao(bool bMiliseg = false) const;
};




//----------------------------------------------------------
//
//				I M P L E M E N T A Ç Ã O
//
//----------------------------------------------------------



inline CCronometro::CCronometro(bool bStart /* = true */)
{
	m_start = m_stop = 0;
	if (bStart)
		Start();
}

inline void CCronometro::Start()
{
	m_stop = 0;
	m_start = clock();
}

inline double CCronometro::Pause(bool bMiliseg /* = false */) const
{
	clock_t f = clock();
	if (bMiliseg)
		return (double)(f-m_start)/(CLOCKS_PER_SEC/1000);
	else
		return (double)(f-m_start)/CLOCKS_PER_SEC;
}

inline double CCronometro::Stop(bool bMiliseg /* = false */)
{
	m_stop = clock();
	return Duracao(bMiliseg);
}

inline double CCronometro::Duracao(bool bMiliseg /* = false */) const
{
	if (bMiliseg)
		return (double)(m_stop-m_start)/(CLOCKS_PER_SEC/1000);
	else
		return (double)(m_stop-m_start)/CLOCKS_PER_SEC;
}

#endif
