/* -----------------------------------------------------------------------------
	GSFramework
	Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */


#ifndef	__NRAND__
#define	__NRAND__


		#include "ntypes.h"


namespace GS {
	namespace Random {

#ifndef	RAND_MAX
#define	RAND_MAX		0x7fff
#endif

/*!
	@short	A random number generator class.

	@note	The maximum precision of this generator is fixed to 16bit integer.
			This means that you cannot get, even with floats, more than 65536
			different values. But this generator has, of course, no query
			limit.

	@author Emmanuel Julien (ejulien@gsworks.fr)
*/
/// Set the starting seed of the random number generator.
void		Seed(uint s);
/// Return an integer random number in the range [0;r] (default [0;RAND_MAX].
uint		Rand(uint r = RAND_MAX);
/// Return a float random value in the range [0;r] (default [0;1]).
float		FRand(float r = 1.0f);
/// Return a float random value un the range [lo, hi] (default [-1, 1]).
float		FRRand(float lo = -1, float hi = 1);
/*!
	@short	Pseudo-unique random number generator.

	A random number generator that tries to feed a different number
	than what was returned at the previous call.
	This class is a wrapper for Rand().

	@note	The number 'might' still be the same.
*/
uint		CRand(uint r = RAND_MAX);

	} // Random
} // GS


#endif	// __NRAND__

