#include <iostream.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>
#include "RndNoGen.h"


RandomNumGenerator::RandomNumGenerator(long aSeed)
{
	theSeed = (aSeed ? aSeed : time(NULL));
}

int RandomNumGenerator::generateNum(int lowerLimit, int upperLimit)
{
	//
	// pre-condition: parameters are valid integers.
	// post-condition: random integer generated between
	//				   lowerLimit & upperLimit as return
	//  

	// Returns a random number.

	int generatedNum;

	generatedNum = (lowerLimit + Next()%(upperLimit - lowerLimit + 1));

	//int range = upperLimit - lowerLimit + 1;

	//unsigned seed = time(NULL) + (rand()/100%range + lowerLimit);

	//int generatedNum;

	//cout << "Seed: " << seed << endl;

	//srand(seed);
	//generatedNum = rand()/100%range + lowerLimit;
	return generatedNum;
}

//
// Implements the Linear Congruential Algorithm introduced
// by D.H.Lehmer in 1949... Which is nice!
//
void RandomNumGenerator::Randomize()
{
	theSeed = (314159265 * theSeed + 13579) %ULONG_MAX;
}


// 
// Updates the seed by calling the Randomize function several
// times.
//
int RandomNumGenerator::Next()
{
	int iterations = theSeed%3;

	int i;

	for(i =0; i <= iterations; i++)
		Randomize();

	//cout << theSeed/2 << endl;
	return int(theSeed/2);

	//return i;
}

