Random.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #pragma once
  2. #include "Betriebssystem.h"
  3. #include "ReferenceCounter.h"
  4. namespace Framework
  5. {
  6. class Datei;
  7. class RandomGenerator : public virtual ReferenceCounter
  8. {
  9. private:
  10. struct random_data
  11. {
  12. int *fptr; /* Front pointer. */
  13. int *rptr; /* Rear pointer. */
  14. int *state; /* Array of state values. */
  15. int rand_type; /* Type of random number generator. */
  16. int rand_deg; /* Degree of random number generator. */
  17. int rand_sep; /* Distance between front and rear. */
  18. int *end_ptr; /* Pointer behind state table. */
  19. };
  20. int randtbl[ 32 ];
  21. random_data unsafe_state;
  22. int seed;
  23. int offset;
  24. void srand( int seed );
  25. public:
  26. //! Konstruktor
  27. //! Erzeugt einen neuen Zufallsgenerator mit dem seed des Zeitpunktes des Erzeugens
  28. DLLEXPORT RandomGenerator();
  29. //! Destruktor
  30. DLLEXPORT ~RandomGenerator();
  31. //! Gibt eine Zufallszahl zwischen 0 und 1 zurück
  32. DLLEXPORT double rand();
  33. //! Initialisiert den Gennerator mit einem Seed.
  34. //! Diese methode sollte möglichst nur mit seeds verwendet werden, die von getSeed zurückgegeben wurden, da der aufruf sonnst sehr lange dauern kann
  35. DLLEXPORT void setSeed( __int64 seed );
  36. //! Gibt den aktuellen Seed zurück, mit dem alle weiteren Zufallszahlen vorherbestimmt werden können
  37. DLLEXPORT __int64 getSeed() const;
  38. };
  39. }