2017-10-18 02:38:38 +00:00
|
|
|
/*
|
|
|
|
* Implements the CRandom class.
|
|
|
|
*
|
|
|
|
* This class implements the Lehmer Random Number Generator.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2017-10-18 03:52:07 +00:00
|
|
|
#include "stdafx.h"
|
2017-10-18 02:38:38 +00:00
|
|
|
#include "Random.h"
|
|
|
|
#include <time.h>
|
|
|
|
|
|
|
|
CRandom::CRandom()
|
|
|
|
{
|
2017-10-18 05:16:30 +00:00
|
|
|
m_state = (uint32_t)time(NULL);
|
2017-10-18 02:38:38 +00:00
|
|
|
}
|
|
|
|
|
2017-10-18 03:52:07 +00:00
|
|
|
CRandom::CRandom(uint32_t state_value)
|
2017-10-18 02:38:38 +00:00
|
|
|
{
|
2017-10-18 05:16:30 +00:00
|
|
|
m_state = state_value;
|
2017-10-18 02:38:38 +00:00
|
|
|
}
|
|
|
|
|
2017-10-18 03:52:07 +00:00
|
|
|
uint32_t CRandom::randomizer(uint32_t val)
|
2017-10-18 02:38:38 +00:00
|
|
|
{
|
|
|
|
return ((uint64_t)val * 279470273UL) % 4294967291UL;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t CRandom::next()
|
|
|
|
{
|
2017-10-18 05:16:30 +00:00
|
|
|
m_state = randomizer(m_state);
|
|
|
|
return m_state;
|
2017-10-18 02:38:38 +00:00
|
|
|
}
|
|
|
|
|
2017-10-18 03:52:07 +00:00
|
|
|
void CRandom::set_state(uint32_t state_value)
|
2017-10-18 02:38:38 +00:00
|
|
|
{
|
2017-10-18 03:52:07 +00:00
|
|
|
if (state_value == 0)
|
2017-10-18 05:16:30 +00:00
|
|
|
m_state = 1;
|
2017-10-18 02:38:38 +00:00
|
|
|
else
|
2017-10-18 05:16:30 +00:00
|
|
|
m_state = state_value;
|
2017-10-18 03:52:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t CRandom::get_state()
|
|
|
|
{
|
2017-10-18 05:16:30 +00:00
|
|
|
return m_state;
|
2017-10-18 02:38:38 +00:00
|
|
|
}
|