PTLib  Version 2.18.8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PRandom Class Reference

Mersenne Twister random number generator. More...

#include <random.h>

Public Member Functions

 PRandom ()
 Construct the random number generator. More...
 
 PRandom (uint32_t seed)
 Construct the random number generator. More...
 
void SetSeed (uint32_t seed)
 Set the seed for the random number generator. More...
 
uint32_t Generate ()
 Get the next psuedo-random number in sequence. More...
 
uint32_t Generate (uint32_t maximum)
 Get the next psuedo-random number in sequence. More...
 
uint32_t Generate (uint32_t minimum, uint32_t maximum)
 Get the next psuedo-random number in sequence. More...
 
 operator uint32_t ()
 Get the next psuedo-random number in sequence. More...
 

Static Public Member Functions

static uint32_t Number ()
 Get the next psuedo-random number in sequence. More...
 
static uint32_t Number (unsigned maximum)
 Get a random number between zero and maximum. More...
 
static uint32_t Number (unsigned minimum, unsigned maximum)
 Get a random number between minimum and maximum. More...
 
static PBYTEArray Octets (PINDEX size)
 Get a random set of bits. More...
 
static void Octets (PBYTEArray &octets, PINDEX size=0)
 
static void Octets (BYTE *octets, PINDEX size)
 
static PString String (PINDEX size)
 Get a string of random alphanumeric characters. More...
 

Protected Types

enum  { RandBits = 8, RandSize = 1<<RandBits }
 

Protected Attributes

uint32_t randcnt
 
uint32_t randrsl [RandSize]
 
uint32_t randmem [RandSize]
 
uint32_t randa
 
uint32_t randb
 
uint32_t randc
 

Detailed Description

Mersenne Twister random number generator.

An application would create a static instance of this class, and then use if to generate a sequence of psuedo-random numbers.

Usually an application would simply use PRandom::Number() but if performance is an issue then it could also create a static local variable such as: { static PRandom rand; for (i = 0; i < 10000; i++) array[i] = rand; }

This method is not thread safe, so it is the applications responsibility to assure that its calls are single threaded.

Member Enumeration Documentation

anonymous enum
protected
Enumerator
RandBits 

I recommend 8 for crypto, 4 for simulations.

RandSize 

Constructor & Destructor Documentation

PRandom::PRandom ( )

Construct the random number generator.

This version will seed the random number generator with a value based on the system time as returned by time() and clock().

PRandom::PRandom ( uint32_t  seed)

Construct the random number generator.

This version allows the application to choose the seed, thus letting it get the same sequence of values on each run. Useful for debugging.

Parameters
seedNew seed value, must not be zero

Member Function Documentation

uint32_t PRandom::Generate ( )

Get the next psuedo-random number in sequence.

This generates one pseudorandom unsigned integer (32bit) which is uniformly distributed among 0 to 2^32-1 for each call.

Referenced by operator uint32_t().

uint32_t PRandom::Generate ( uint32_t  maximum)

Get the next psuedo-random number in sequence.

This generates one pseudorandom unsigned integer from 0 to maximum. Uses the Generate() function and scales accordingly. Is inclusive of maximum, i.e. [0..maximum].

uint32_t PRandom::Generate ( uint32_t  minimum,
uint32_t  maximum 
)

Get the next psuedo-random number in sequence.

This generates one pseudorandom unsigned integer from minimum to maximum. Uses the Generate() function and scales and shifts accordingly. Is inclusive of endpoints, i.e. [minimum..maximum].

static uint32_t PRandom::Number ( )
static

Get the next psuedo-random number in sequence.

This utilises a single system wide thread safe PRandom variable. All threads etc will share the same psuedo-random sequence.

static uint32_t PRandom::Number ( unsigned  maximum)
static

Get a random number between zero and maximum.

static uint32_t PRandom::Number ( unsigned  minimum,
unsigned  maximum 
)
static

Get a random number between minimum and maximum.

static PBYTEArray PRandom::Octets ( PINDEX  size)
static

Get a random set of bits.

static void PRandom::Octets ( PBYTEArray octets,
PINDEX  size = 0 
)
static
static void PRandom::Octets ( BYTE *  octets,
PINDEX  size 
)
static
PRandom::operator uint32_t ( )
inline

Get the next psuedo-random number in sequence.

This generates one pseudorandom unsigned integer which is uniformly distributed among 0 to maximum for each call. Uses Generate()

References Generate().

void PRandom::SetSeed ( uint32_t  seed)

Set the seed for the random number generator.

Parameters
seedNew seed value, must not be zero
static PString PRandom::String ( PINDEX  size)
static

Get a string of random alphanumeric characters.

Member Data Documentation

uint32_t PRandom::randa
protected
uint32_t PRandom::randb
protected
uint32_t PRandom::randc
protected
uint32_t PRandom::randcnt
protected
uint32_t PRandom::randmem[RandSize]
protected
uint32_t PRandom::randrsl[RandSize]
protected

The documentation for this class was generated from the following file: