#ifndef _VNXPLAT_TIME_H_
#define _VNXPLAT_TIME_H_

#include "int.h"
#include "export.h"

namespace vn {
namespace xplat {

struct vn_proglib_DLLEXPORT TimeStamp
{
public:
	TimeStamp();

private:
	TimeStamp(int64_t sec, uint64_t usec);

public:

	// \brief Returns a timestamp.
	//
	// \return The timestamp.
	static TimeStamp get();

// HACK: Current values are made public until the TimeStamp interface
// is fully worked out.
//private:
public:
	int64_t _sec;		// Seconds.
	uint64_t _usec;		// Microseconds.
};

/// \brief Provides simple timing capabilities.
class vn_proglib_DLLEXPORT Stopwatch
{

public:
	
	/// \brief Creates a new Stopwatch and starts timing.
	Stopwatch();

	~Stopwatch();

	/// \brief Resets the Stopwatch.
	void reset();

	/// \brief Gets the elapsed time in milliseconds.
	///
	/// \return The elapsed time in milliseconds.
	float elapsedMs();

private:
	struct Impl;
	Impl *_pi;
};

}
}

#endif
