| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | 
							
- /*
 
-  * CRandomGenerator.h, part of VCMI engine
 
-  *
 
-  * Authors: listed in file AUTHORS in main folder
 
-  *
 
-  * License: GNU General Public License v2.0 or later
 
-  * Full text of license available in license.txt file, in main folder
 
-  *
 
-  */
 
- #pragma once
 
- #include <boost/version.hpp>
 
- #include <boost/random/mersenne_twister.hpp>
 
- #if BOOST_VERSION >= 104700
 
- #include <boost/random/uniform_int_distribution.hpp>
 
- #include <boost/random/uniform_real_distribution.hpp>
 
- #else
 
- #include <boost/random/uniform_int.hpp>
 
- #include <boost/random/uniform_real.hpp>
 
- #endif
 
- #include <boost/random/variate_generator.hpp>
 
- typedef boost::mt19937 TGenerator;
 
- #if BOOST_VERSION >= 104700
 
- typedef boost::random::uniform_int_distribution<int> TIntDist;
 
- typedef boost::random::uniform_real_distribution<double> TRealDist;
 
- #else
 
- typedef boost::uniform_int<int> TIntDist;
 
- typedef boost::uniform_real<double> TRealDist;
 
- #endif
 
- typedef boost::variate_generator<TGenerator &, TIntDist> TRandI;
 
- typedef boost::variate_generator<TGenerator &, TRealDist> TRand;
 
- /**
 
-  * The random generator randomly generates integers and real numbers("doubles") between
 
-  * a given range. This is a header only class and mainly a wrapper for
 
-  * convenient usage of the boost random API.
 
-  */
 
- class CRandomGenerator
 
- {
 
- public:
 
- 	/**
 
- 	 * Constructor. Seeds the generator with the current time by default.
 
- 	 */
 
- 	CRandomGenerator() 
 
- 	{
 
- 		gen.seed(std::time(nullptr)); 
 
- 	}
 
- 	/**
 
- 	 * Seeds the generator with the given value.
 
- 	 *
 
- 	 * @param value the random seed
 
- 	 */
 
- 	void seed(int value)
 
- 	{
 
- 		gen.seed(value);
 
- 	}
 
- 	/**
 
- 	 * Gets a generator which generates integers in the given range.
 
- 	 *
 
- 	 * Example how to use:
 
- 	 * @code
 
- 	 * TRandI rand = getRangeI(0, 10);
 
- 	 * int a = rand(); // with the operator() the next value can be obtained
 
- 	 * int b = rand(); // you can generate more values
 
- 	 * @endcode
 
- 	 *
 
- 	 * @param lower the lower boundary
 
- 	 * @param upper the upper boundary
 
- 	 * @return the generator which can be used to generate integer numbers
 
- 	 */
 
- 	TRandI getRangeI(int lower, int upper)
 
- 	{
 
- 		TIntDist range(lower, upper);
 
- 		return TRandI(gen, range);
 
- 	}
 
- 	
 
- 	/**
 
- 	 * Gets a integer in the given range. In comparison to getRangeI it's
 
- 	 * a convenient method if you want to generate only one value in a given
 
- 	 * range.
 
- 	 *
 
- 	 * @param lower the lower boundary
 
- 	 * @param upper the upper boundary
 
- 	 * @return the generated integer
 
- 	 */
 
- 	int getInteger(int lower, int upper)
 
- 	{
 
- 		return getRangeI(lower, upper)();
 
- 	}
 
- 	
 
- 	/**
 
- 	 * Gets a generator which generates doubles in the given range.
 
- 	 *
 
- 	 * Example how to use:
 
- 	 * @code
 
- 	 * TRand rand = getRange(23.56, 32.10);
 
- 	 * double a = rand(); // with the operator() the next value can be obtained
 
- 	 * double b = rand(); // you can generate more values
 
- 	 * @endcode
 
- 	 *
 
- 	 * @param lower the lower boundary
 
- 	 * @param upper the upper boundary
 
- 	 * @return the generated double
 
- 	 */
 
- 	TRand getRange(double lower, double upper)
 
- 	{
 
- 		TRealDist range(lower, upper);
 
- 		return TRand(gen, range);
 
- 	}
 
- 	
 
- 	/**
 
- 	 * Gets a double in the given range. In comparison to getRange it's
 
- 	 * a convenient method if you want to generate only one value in a given
 
- 	 * range.
 
- 	 *
 
- 	 * @param lower the lower boundary
 
- 	 * @param upper the upper boundary
 
- 	 * @return the generated double
 
- 	 */
 
- 	double getDouble(double lower, double upper)
 
- 	{
 
- 		return getRange(lower, upper)();
 
- 	}
 
- private:
 
- 	/** The actual boost random generator. */
 
- 	TGenerator gen;
 
- };
 
 
  |