#include "CRand.h"

#include "Debug/CAssert.h"
#include<math.h>

extern "C" {

#include"../Import/sfmt/sfmt.h"
}
namespace Maid
{
	namespace CRand
	{

/*!
 	@class	CRand CRand.h
 	@brief	乱数生成クラス
 */


/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
//! 0<=x<n の範囲で乱数を取得する
/*!
 	@param	n	[i ]	範囲（負数はアウト）
 */
unt	Get(unt n)
{
	if( n==0 ) { return 0; }
	return Get()%n;
}

/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
//! Min 0<= x < Max の範囲で乱数を取得する
/*!
 	こちらは負数有りなので気をつけること
 
 	@param	Min	[i ]	最小値
 	@param	Max	[i ]	最大値
 */
int	Get(int Min, int Max )
{
	MAID_ASSERT( !(Min<=Max), "引数の指定が反対です" <<  Min << " <= " << Max );
	return int(Get(abs(Max-Min)))+Min;
}


/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
//! 1/n の確率を満たしているか調べる
/*!
 	@param	n	[i ]	確率
 */
bool Check(unt n)
{
	return Get(n)==0;
}


void SetSeed( unt Seed)
{
	init_gen_rand( Seed );
}


unt Get() 
{
	return gen_rand32();
}

}
}