// AbstractRandom.h
#pragma once

#include "UncertainityOptions.h"
#include "MatData.h"
#include <random>

namespace math1d_cl {

	class AbstractRandom 
	{
		public:
			AbstractRandom(UncertainityOptions options); 
			virtual double getRandDouble(double min, double max);
			virtual void fillRandom(math1d_cl::precipitationsVector &prec, double deviation) = 0;
			void seed();

		protected:	
			UncertainityOptions m_options; // Uncertainity options
			std::mt19937_64 m_rand; // Mersenne Twister generator
	};

}