#ifndef ACLOCK_H
#define ACLOCK_H

#include <ctime>
using namespace std;
                                                                                
/*!
\brief A clock for measuring event times in ms.
 
Usage:
Call measure() before and after the event being timed.
Call difference functions diff_s() or diff().

\par Example
\verbatim
  aclock ac;
  
  ac.measure();
  event();
  ac.measure();
  cout << "The event took " << ac.diff_ms() << "ms" << endl;
\endverbatim
*/
class aclock
{
  /** Previous time measurement. */
  clock_t tv0;   
  /** Previous time measurement. */
  clock_t tv;   
  /** Most recent time measurement. */
  clock_t tv2;  
public:

  /** Call measure() before and after the event. */
  void measure()
    { tv = tv2; tv2 = clock(); }

  void measure2()
    { tv0 = tv; tv = tv2; tv2 = clock(); }

  /** Difference in clock cycles. */
  long int const diff() const 
    { return tv2-tv; }

  long int const diff2() const 
    { return tv2-tv0; }

  /** Difference in milliseconds. */
  double const diff_ms() const
    { return (double const) diff()*( (double const)1000. / (double const) CLOCKS_PER_SEC ); }

  /** Difference in seconds */
  double const diff_s() const
    { return (double const) diff()/ (double const) CLOCKS_PER_SEC; }
};



#endif



