text: #pragma once
  
  #include "lib_begin.h"
  
  namespace cgv {
  	namespace utils {
  
  /**
  * A trivial stop watch class for time measurement.
  * On Win32 the perfomance counter with a resolution of 0,313 microseconds is used, if available.
  * If the performance counter is not available and on other systems the std::clock() function with 
  * a resolution of 0,055 milliseconds is used.
  *
  * TODO: Better implementation for Linux (with higher resolution)
  * 
  * Example 1:
  *
  * {
  *	stopwatch s; 
  *	dosomethingtimeconsuming();
  * }
  * 
  * The duration is written into cout.
  *
  * Example 2:
  * double d = 0.0;
  *
  * {
  *	stopwatch s(&d); 
  *	dosomethingtimeconsuming();
  * }
  *
  * See also \link Profiler \endlink
  */
  
  class CGV_API stopwatch
  {
  public:
  	//standard constructor starts time measurement
  	stopwatch();
  	//start counting time
  	stopwatch(double *result);
  	// add_time adds the time ellapsed thus far
  	void add_time();
  	//destructor stops time measurement and puts the result into cout
  	~stopwatch();
  	/// return time elpased thus far
  	double get_elapsed_time() const;
  	/// restart timer and return time elapsed until restart
  	double restart();
  private:
  	void init();
  	double get_current_time(long long& end) const;
  	long long start;
  	double *resultd;	
  };
  
  	}
  }
  
  #include <cgv/config/lib_end.h>