2016-05-17 03:04:11 +12:00
|
|
|
#pragma once
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
#ifndef TRANDOM_INCLUDED
|
|
|
|
#define TRANDOM_INCLUDED
|
|
|
|
|
|
|
|
#include "tcommon.h"
|
|
|
|
|
|
|
|
#undef DVAPI
|
|
|
|
#undef DVVAR
|
|
|
|
#ifdef TNZCORE_EXPORTS
|
|
|
|
#define DVAPI DV_EXPORT_API
|
|
|
|
#define DVVAR DV_EXPORT_VAR
|
|
|
|
#else
|
|
|
|
#define DVAPI DV_IMPORT_API
|
|
|
|
#define DVVAR DV_IMPORT_VAR
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*! Generates a pseudorandom sequence
|
|
|
|
*/
|
2016-06-15 18:43:10 +12:00
|
|
|
class DVAPI TRandom {
|
2016-03-19 06:57:51 +13:00
|
|
|
public:
|
2016-06-15 18:43:10 +12:00
|
|
|
TRandom(UINT seed = 0);
|
|
|
|
~TRandom();
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
/*! resets the pseudorandom engine to the first number of the sequence */
|
|
|
|
void reset();
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
/*! set a new seed for the pseudorandom engine and reset the sequence */
|
|
|
|
void setSeed(UINT seed);
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
/*! returns an unsigned integer number in the range [0, end[ */
|
|
|
|
UINT getUInt(UINT end = c_maxuint); // [0,end[
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
/*! returns an integer number in the range [begin, end[ */
|
|
|
|
int getInt(int begin, int end);
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
/*! returns a float number in the range [0, 1[ */
|
|
|
|
float getFloat();
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
/*! returns a float number in the range [0, end[ */
|
|
|
|
float getFloat(float end);
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
/*! returns a float number in the range [begin, end[ */
|
|
|
|
float getFloat(float begin, float end);
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
/*! returns a random bool value */
|
|
|
|
bool getBool();
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
/*! returns a double number in the range [0, 1[ */
|
|
|
|
double getDouble();
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
private:
|
2016-06-15 18:43:10 +12:00
|
|
|
UINT seed;
|
|
|
|
int idx1, idx2;
|
|
|
|
UINT ran[56];
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
enum RANDOM_FLOAT_TYPE {
|
|
|
|
RANDOM_FLOAT_TYPE_NONE,
|
|
|
|
RANDOM_FLOAT_TYPE_1,
|
|
|
|
RANDOM_FLOAT_TYPE_2,
|
|
|
|
RANDOM_FLOAT_TYPE_HOW_MANY
|
|
|
|
};
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
static RANDOM_FLOAT_TYPE RandomFloatType;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
inline UINT getNextUINT();
|
|
|
|
inline void setRandomFloatType();
|
2016-03-19 06:57:51 +13:00
|
|
|
};
|
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
#endif // TRANDOM_INCLUDED
|