passage/minorGems/util/random/RandomSource.h
2025-10-03 02:19:59 -04:00

86 lines
2 KiB
C++

// Jason Rohrer
// RandomSource.h
/**
*
* abstract interface for random number generation
*
* Can be implemented by:
* --stdlib rand() function calls
* --seed file full of random numbers
*
* Created 12-7-99
* Mods:
* Jason Rohrer 9-28-2000 Added a getRandomBoundedInt()
* interface to faciliate retrieving
* an integer in a given range [a,b]
* where each integer in the range
* has the same probability of being
* returned.
* Jason Rohrer 12-16-2000 Added a getRandomDouble() interface.
* Jason Rohrer 11-21-2005 Added a virtual destructor.
* Jason Rohrer 07-09-2006 Added a getRandomBoundedDouble interface.
* Jason Rohrer 07-27-2006 Added a getRandomBoolean interface.
*/
#include "minorGems/common.h"
#ifndef RANDOM_SOURCE_INCLUDED
#define RANDOM_SOURCE_INCLUDED
class RandomSource {
public:
// pure virtual functions implemented by inheriting classes
virtual float getRandomFloat() = 0; // in interval [0,1.0]
virtual double getRandomDouble() = 0; // in interval [0,1.0]
virtual unsigned int getRandomInt() = 0; // in interval [0,MAX]
virtual unsigned int getIntMax() = 0; // returns MAX
/**
* Returns a random integer in [rangeStart,rangeEnd]
* where each integer in the range has an equal
* probability of occuring.
*/
virtual int getRandomBoundedInt( int inRangeStart,
int inRangeEnd ) = 0;
/**
* Returns a random double in [rangeStart,rangeEnd].
*/
virtual double getRandomBoundedDouble( double inRangeStart,
double inRangeEnd ) = 0;
/**
* Gets a random true/false value.
*/
virtual char getRandomBoolean() = 0;
virtual ~RandomSource();
protected:
unsigned int MAX; // maximum integer random number
float invMAX; // floating point inverse of MAX
double invDMAX; // double invers of MAX
};
inline RandomSource::~RandomSource() {
// does nothing
// exists to ensure that subclass destructors are called
}
#endif