@q $Id: random.hweb 2335 2009-01-14 10:35:21Z kamenik $ @>
@q Copyright 2007, Ondra Kamenik @>

@*2 Random number generation. Start of {\tt random.h} file.

@s RandomGenerator int
@s SystemRandomGenerator int

@c
#ifndef RANDOM_H
#define RANDOM_H

@<|RandomGenerator| class declaration@>;
@<|SystemRandomGenerator| class declaration@>;
extern SystemRandomGenerator system_random_generator;

#endif

@ This is a general interface to an object able to generate random
numbers. Subclass needs to implement |uniform| method, other is, by
default, implemented here.
@<|RandomGenerator| class declaration@>=
class RandomGenerator {
public:@;
	virtual double uniform() = 0;
	int int_uniform();
	double normal();
};

@ This implements |RandomGenerator| interface with system |drand| or
|rand|. It is not thread aware.
@<|SystemRandomGenerator| class declaration@>=
class SystemRandomGenerator : public RandomGenerator {
public:@;
	double uniform();
	void initSeed(int seed);
};

@ End of {\tt random.h} file.
