#pragma once

#include "PseudoRandom.h"

namespace Math
{
	class RandomInt
	{
	private:
		PseudoRandomInt random;
		
		// unable to copy
		RandomInt(const RandomInt& );
		void operator =(const RandomInt&);

	public:
		RandomInt();
		RandomInt(unsigned long seed);

		void SetSeed(unsigned long seed);

		virtual unsigned int Next();
		virtual unsigned int Next(unsigned int excludedMax);
		virtual unsigned int Next(unsigned int includedMin, unsigned int excludedMax);
	};

	class RandomDouble
	{
	private:
		PseudoRandomFloatClosed random;

		// unable to copy
		RandomDouble(const RandomDouble& );
		void operator =(const RandomDouble&);

	public:
		RandomDouble();
		RandomDouble(unsigned long seed);

		void SetSeed(unsigned long seed);

		virtual double Next(); // generates a float number [0, 1]
	};

} 