tahoma2d/toonz/sources/include/trandom.h

71 lines
1.5 KiB
C
Raw Normal View History

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