29 #ifndef _cmnRandomSequence_h
30 #define _cmnRandomSequence_h
108 SetSequencePosition(position);
139 return RandomInstance;
154 SequencePosition = 0;
162 return SequencePosition;
171 while (GetSequencePosition() < position) {
172 ExtractRandomElement();
189 template <
typename _valueType>
190 void ExtractRandomValue(_valueType & result);
192 template <
typename _valueType>
193 inline void ExtractRandomValue(
const _valueType min,
const _valueType max, _valueType & result);
195 template <
typename _valueType>
196 inline void ExtractRandomValueArray(
const _valueType min,
const _valueType max, _valueType * array,
197 const size_t arraySize);
203 float myPosition =
static_cast<float>(randomNumber) - static_cast<float>(LowerRandomBound);
204 float randomFloat = myPosition / (
static_cast<float>(UpperRandomBound) - static_cast<float>(LowerRandomBound) + 1);
209 const float randomFloat = ExtractRandomFloat();
210 return (randomFloat * (max - min)) + min;
213 const size_t arraySize) {
214 for (
size_t i = 0; i < arraySize; ++i, ++array) {
215 *array = ExtractRandomFloat(min, max);
221 return (static_cast<double>(ExtractRandomElement()) - static_cast<double>(LowerRandomBound)) / (
static_cast<double>(UpperRandomBound) - static_cast<double>(LowerRandomBound) + 1);
225 const double randomDouble = ExtractRandomDouble();
226 return (randomDouble * (max - min)) + min;
229 const size_t arraySize) {
230 for (
size_t i = 0; i < arraySize; ++i, ++array) {
231 *array = ExtractRandomDouble(min, max);
236 return ExtractRandomElement();
239 const float randomFloat = ExtractRandomFloat();
240 return static_cast<int>((randomFloat * (max - min)) + min); }
243 const size_t arraySize) {
244 for (
size_t i = 0; i < arraySize; ++i, ++array) {
245 *array = ExtractRandomInt(min, max);
250 int randomInt = ExtractRandomElement();
251 return static_cast<unsigned int>(randomInt);
254 const float randomFloat = ExtractRandomFloat();
255 return static_cast<unsigned int>((randomFloat * (max - min)) + min);
258 const size_t arraySize) {
259 for (
size_t i = 0; i < arraySize; ++i, ++array) {
260 *array = ExtractRandomUnsignedInt(min, max);
265 return static_cast<short>(ExtractRandomElement()&0xffff);
268 const float randomFloat = ExtractRandomFloat();
269 return static_cast<short>((randomFloat * (max - min)) + min);
272 const size_t arraySize) {
273 for (
size_t i = 0; i < arraySize; ++i, ++array) {
274 *array = ExtractRandomShort(min, max);
279 int randomInt = ExtractRandomElement();
280 return static_cast<unsigned short>((0xff) & randomInt);
283 const float randomFloat = ExtractRandomFloat();
284 return static_cast<unsigned short>((randomFloat * (max - min)) + min);
287 const size_t arraySize) {
288 for (
size_t i = 0; i < arraySize; ++i, ++array) {
289 *array = ExtractRandomUnsignedShort(min, max);
294 #if (CISST_DATA_MODEL == CISST_LP64)
296 return ExtractRandomLongLong();
299 return ExtractRandomInt();
303 const float randomFloat = ExtractRandomFloat();
304 return static_cast<long>((randomFloat * (max - min)) + min);
307 const size_t arraySize) {
308 for (
size_t i = 0; i < arraySize; ++i, ++array)
309 *array = ExtractRandomLong(min, max);
313 #if (CISST_DATA_MODEL == CISST_LP64)
315 return ExtractRandomUnsignedLongLong();
318 return ExtractRandomUnsignedInt();
323 const double randomDouble = ExtractRandomDouble();
324 return static_cast<unsigned long >((randomDouble * (max - min)) + min);
327 const size_t arraySize) {
328 for (
size_t i = 0; i < arraySize; ++i, ++array) {
329 *array = ExtractRandomUnsignedLong(min, max);
335 long long int result;
336 int * part =
reinterpret_cast<int *
>(&result);
337 *part = ExtractRandomElement();
339 *part = ExtractRandomElement();
344 const float randomFloat = ExtractRandomFloat();
345 return static_cast<long long>((randomFloat * (max - min)) + min);
348 const size_t arraySize) {
349 for (
size_t i = 0; i < arraySize; ++i, ++array) {
350 *array = ExtractRandomLongLong(min, max);
356 unsigned long long int result;
357 int * part =
reinterpret_cast<int *
>(&result);
358 *part = ExtractRandomElement();
360 *part = ExtractRandomElement();
364 const double randomDouble = ExtractRandomDouble();
365 return static_cast<unsigned long long >((randomDouble * (max - min)) + min);
368 const size_t arraySize) {
369 for (
size_t i = 0; i < arraySize; ++i, ++array) {
370 *array = ExtractRandomUnsignedLongLong(min, max);
375 int randomInt = ExtractRandomElement();
376 return static_cast<char>((0xff) & randomInt);
379 const float randomFloat = ExtractRandomFloat();
380 return static_cast<char>((randomFloat * (max - min)) + min);
383 const size_t arraySize) {
384 for (
size_t i = 0; i < arraySize; ++i, ++array) {
385 *array = ExtractRandomChar(min, max);
390 int randomInt = ExtractRandomElement();
391 return static_cast<unsigned char>((0xff) & randomInt);
394 const float randomFloat = ExtractRandomFloat();
395 return static_cast<unsigned char>((randomFloat * (max - min)) + min);
398 const size_t arraySize) {
399 for (
size_t i = 0; i < arraySize; ++i, ++array) {
400 *array = ExtractRandomUnsignedChar(min, max);
405 void ExtractRandomPermutation(
const size_t length,
size_t * array);
416 const float randomFloat = ExtractRandomFloat();
417 return static_cast<size_t>((randomFloat * (max - min)) + min);
420 const size_t arraySize) {
421 for (
size_t i = 0; i < arraySize; ++i, ++array) {
422 *array = ExtractRandomSizeT(min, max);
427 const float randomFloat = ExtractRandomFloat();
428 return static_cast<ptrdiff_t
>((randomFloat * (max - min)) + min);
431 const size_t arraySize) {
432 for (
size_t i = 0; i < arraySize; ++i, ++array) {
433 *array = ExtractRandomPtrdiffT(min, max);
445 SequenceCounterType SequencePosition;
454 void cmnRandomSequence::ExtractRandomValue<float>(
float & result);
456 void cmnRandomSequence::ExtractRandomValue<float>(
const float min,
const float max,
float & result);
458 void cmnRandomSequence::ExtractRandomValueArray<float>(
const float min,
const float max,
float * array,
459 const size_t arraySize);
463 void cmnRandomSequence::ExtractRandomValue<double>(
double & result);
465 void cmnRandomSequence::ExtractRandomValue<double>(
const double min,
const double max,
double & result);
467 void cmnRandomSequence::ExtractRandomValueArray<double>(
const double min,
const double max,
double * array,
468 const size_t arraySize);
472 void cmnRandomSequence::ExtractRandomValue<int>(
int & result);
474 void cmnRandomSequence::ExtractRandomValue<int>(
const int min,
const int max,
int & result);
476 void cmnRandomSequence::ExtractRandomValueArray<int>(
const int min,
const int max,
int * array,
477 const size_t arraySize);
480 void cmnRandomSequence::ExtractRandomValue<unsigned int>(
unsigned int & result);
482 void cmnRandomSequence::ExtractRandomValue<unsigned int>(
const unsigned int min,
const unsigned int max,
unsigned int & result);
484 void cmnRandomSequence::ExtractRandomValueArray<unsigned int>(
const unsigned int min,
const unsigned int max,
unsigned int * array,
485 const size_t arraySize);
489 void cmnRandomSequence::ExtractRandomValue<short>(
short & result);
491 void cmnRandomSequence::ExtractRandomValue<short>(
const short min,
const short max,
short & result);
493 void cmnRandomSequence::ExtractRandomValueArray<short>(
const short min,
const short max,
short * array,
494 const size_t arraySize);
497 void cmnRandomSequence::ExtractRandomValue<unsigned short>(
unsigned short & result);
499 void cmnRandomSequence::ExtractRandomValue<unsigned short>(
const unsigned short min,
const unsigned short max,
unsigned short & result);
501 void cmnRandomSequence::ExtractRandomValueArray<unsigned short>(
const unsigned short min,
const unsigned short max,
unsigned short * array,
502 const size_t arraySize);
506 void cmnRandomSequence::ExtractRandomValue<long>(
long & result);
508 void cmnRandomSequence::ExtractRandomValue<long>(
const long min,
const long max,
long & result);
510 void cmnRandomSequence::ExtractRandomValueArray<long>(
const long min,
const long max,
long * array,
511 const size_t arraySize);
515 void cmnRandomSequence::ExtractRandomValue<unsigned long>(
unsigned long & result);
517 void cmnRandomSequence::ExtractRandomValue<unsigned long>(
const unsigned long min,
const unsigned long max,
unsigned long & result);
519 void cmnRandomSequence::ExtractRandomValueArray<unsigned long>(
const unsigned long min,
const unsigned long max,
unsigned long * array,
520 const size_t arraySize);
524 void cmnRandomSequence::ExtractRandomValue<long long>(
long long & result);
526 void cmnRandomSequence::ExtractRandomValue<long long>(
const long long min,
const long long max,
long long & result);
528 void cmnRandomSequence::ExtractRandomValueArray<long long>(
const long long min,
const long long max,
long long * array,
529 const size_t arraySize);
533 void cmnRandomSequence::ExtractRandomValue<unsigned long long>(
unsigned long long & result);
535 void cmnRandomSequence::ExtractRandomValue<unsigned long long>(
const unsigned long long min,
const unsigned long long max,
unsigned long long & result);
537 void cmnRandomSequence::ExtractRandomValueArray<unsigned long long>(
const unsigned long long min,
const unsigned long long max,
unsigned long long * array,
538 const size_t arraySize);
542 void cmnRandomSequence::ExtractRandomValue<char>(
char & result);
544 void cmnRandomSequence::ExtractRandomValue<char>(
const char min,
const char max,
char & result);
546 void cmnRandomSequence::ExtractRandomValueArray<char>(
const char min,
const char max,
char * array,
547 const size_t arraySize);
551 void cmnRandomSequence::ExtractRandomValue<unsigned char>(
unsigned char & result);
553 void cmnRandomSequence::ExtractRandomValue<unsigned char>(
const unsigned char min,
const unsigned char max,
unsigned char & result);
555 void cmnRandomSequence::ExtractRandomValueArray<unsigned char>(
const unsigned char min,
const unsigned char max,
unsigned char * array,
556 const size_t arraySize);
560 void cmnRandomSequence::ExtractRandomValue<bool>(
bool & result);
562 void cmnRandomSequence::ExtractRandomValue<bool>(
const bool min,
const bool max,
bool & result);
564 void cmnRandomSequence::ExtractRandomValueArray<bool>(
const bool min,
const bool max,
bool * array,
565 const size_t arraySize);
579 const size_t arraySize) {
594 const size_t arraySize) {
609 const size_t arraySize) {
623 const size_t arraySize) {
638 const size_t arraySize) {
652 const size_t arraySize) {
667 const size_t arraySize) {
681 const size_t arraySize) {
697 const size_t arraySize) {
711 const size_t arraySize) {
739 const size_t arraySize) {
759 const size_t arraySize) {
760 for (
size_t i = 0; i < arraySize; ++i, ++array) {
767 #endif // _cmnRandomSequence_h
size_t ExtractRandomSizeT(const size_t min, const size_t max)
Definition: cmnRandomSequence.h:415
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
short ExtractRandomShort(const short min, const short max)
Definition: cmnRandomSequence.h:267
long ExtractRandomLong(void)
Definition: cmnRandomSequence.h:293
void ExtractRandomValueArray(const _valueType min, const _valueType max, _valueType *array, const size_t arraySize)
Definition: cmnRandomSequence.h:578
cmnRandomSequence(const SeedType seed, const SequenceCounterType position=0)
Definition: cmnRandomSequence.h:106
Portability across compilers and operating systems tools.
void ExtractRandomUnsignedShortArray(const unsigned short min, const unsigned short max, unsigned short *array, const size_t arraySize)
Definition: cmnRandomSequence.h:286
unsigned short ExtractRandomUnsignedShort(void)
Definition: cmnRandomSequence.h:278
unsigned int ExtractRandomUnsignedInt(void)
Definition: cmnRandomSequence.h:249
void ExtractRandomDoubleArray(const double min, const double max, double *array, const size_t arraySize)
Definition: cmnRandomSequence.h:228
unsigned char ExtractRandomUnsignedChar(void)
Definition: cmnRandomSequence.h:389
ptrdiff_t ExtractRandomPtrdiffT(const ptrdiff_t min, const ptrdiff_t max)
Definition: cmnRandomSequence.h:426
short ExtractRandomShort(void)
Definition: cmnRandomSequence.h:264
void ExtractRandomUnsignedLongLongArray(const unsigned long long min, const unsigned long long max, unsigned long long *array, const size_t arraySize)
Definition: cmnRandomSequence.h:367
void ExtractRandomCharArray(const char min, const char max, char *array, const size_t arraySize)
Definition: cmnRandomSequence.h:382
void ExtractRandomValue(_valueType &result)
void ExtractRandomLongArray(const long min, const long max, long *array, const size_t arraySize)
Definition: cmnRandomSequence.h:306
void ExtractRandomSizeTArray(const size_t min, const size_t max, size_t *array, const size_t arraySize)
Definition: cmnRandomSequence.h:419
static cmnRandomSequence & GetInstance(void)
Definition: cmnRandomSequence.h:138
int ExtractRandomInt(const int min, const int max)
Definition: cmnRandomSequence.h:238
void ExtractRandomUnsignedIntArray(const unsigned int min, const unsigned int max, unsigned int *array, const size_t arraySize)
Definition: cmnRandomSequence.h:257
long long ExtractRandomLongLong(void)
Definition: cmnRandomSequence.h:333
cmnRandomSequence(const cmnRandomSequence &other)
Definition: cmnRandomSequence.h:115
cmnRandomSequence()
Definition: cmnRandomSequence.h:98
Macros to export the symbols of cisstCommon (in a Dll).
void ExtractRandomIntArray(const int min, const int max, int *array, const size_t arraySize)
Definition: cmnRandomSequence.h:242
void ExtractRandomShortArray(const short min, const short max, short *array, const size_t arraySize)
Definition: cmnRandomSequence.h:271
void ExtractRandomUnsignedLongArray(const unsigned long min, const unsigned long max, unsigned long *array, const size_t arraySize)
Definition: cmnRandomSequence.h:326
float ExtractRandomFloat(const float min, const float max)
Definition: cmnRandomSequence.h:208
double ExtractRandomDouble(const double min, const double max)
Definition: cmnRandomSequence.h:224
unsigned char ExtractRandomUnsignedChar(const unsigned char min, const unsigned char max)
Definition: cmnRandomSequence.h:393
ElementaryRandomNumber ExtractRandomElement(void)
Definition: cmnRandomSequence.h:180
unsigned long SequenceCounterType
Definition: cmnRandomSequence.h:79
SequenceCounterType GetSequencePosition(void) const
Definition: cmnRandomSequence.h:161
static const ElementaryRandomNumber UpperRandomBound
Definition: cmnRandomSequence.h:91
unsigned long long ExtractRandomUnsignedLongLong(void)
Definition: cmnRandomSequence.h:354
unsigned long long ExtractRandomUnsignedLongLong(const unsigned long long min, const unsigned long long max)
Definition: cmnRandomSequence.h:363
unsigned short ExtractRandomUnsignedShort(const unsigned short min, const unsigned short max)
Definition: cmnRandomSequence.h:282
static const ElementaryRandomNumber LowerRandomBound
Definition: cmnRandomSequence.h:87
char ExtractRandomChar(const char min, const char max)
Definition: cmnRandomSequence.h:378
unsigned int SeedType
Definition: cmnRandomSequence.h:71
void ExtractRandomUnsignedCharArray(const unsigned char min, const unsigned char max, unsigned char *array, const size_t arraySize)
Definition: cmnRandomSequence.h:397
#define CISST_DECLARE_TEMPLATE_FUNCTION_SPECIALIZATION
Definition: cmnPortability.h:450
static const SeedType DefaultSeed
Definition: cmnRandomSequence.h:83
SeedType GetSeed(void) const
Definition: cmnRandomSequence.h:145
#define CISST_DEFINE_TEMPLATE_FUNCTION_SPECIALIZATION
Definition: cmnPortability.h:451
long ExtractRandomLongLong(const long long min, const long long max)
Definition: cmnRandomSequence.h:343
cmnRandomSequence & operator=(const cmnRandomSequence &other)
Definition: cmnRandomSequence.h:123
static cmnRandomSequence RandomInstance
Definition: cmnRandomSequence.h:132
int ElementaryRandomNumber
Definition: cmnRandomSequence.h:75
void SetSequencePosition(const SequenceCounterType position)
Definition: cmnRandomSequence.h:169
unsigned long ExtractRandomUnsignedLong(const unsigned long min, const unsigned long max)
Definition: cmnRandomSequence.h:322
int ExtractRandomInt(void)
Definition: cmnRandomSequence.h:235
unsigned long ExtractRandomUnsignedLong(void)
Definition: cmnRandomSequence.h:312
Provide an interface to a reproducible random sequence.
Definition: cmnRandomSequence.h:66
void ExtractRandomLongLongArray(const long long min, const long long max, long long *array, const size_t arraySize)
Definition: cmnRandomSequence.h:347
float ExtractRandomFloat(void)
Definition: cmnRandomSequence.h:201
unsigned int ExtractRandomUnsignedInt(const unsigned int min, const unsigned int max)
Definition: cmnRandomSequence.h:253
long ExtractRandomLong(const long min, const long max)
Definition: cmnRandomSequence.h:302
double ExtractRandomDouble(void)
Definition: cmnRandomSequence.h:220
char ExtractRandomChar(void)
Definition: cmnRandomSequence.h:374
void SetSeed(const SeedType seed)
Definition: cmnRandomSequence.h:152
void ExtractRandomFloatArray(const float min, const float max, float *array, const size_t arraySize)
Definition: cmnRandomSequence.h:212
void ExtractRandomPtrdiffTArray(const ptrdiff_t min, const ptrdiff_t max, ptrdiff_t *array, const size_t arraySize)
Definition: cmnRandomSequence.h:430