Random.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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
  28. //! des Erzeugens
  29. DLLEXPORT RandomGenerator();
  30. //! Destruktor
  31. DLLEXPORT ~RandomGenerator();
  32. //! Gibt eine Zufallszahl zwischen 0 und 1 zurück
  33. DLLEXPORT double rand();
  34. //! Initialisiert den Gennerator mit einem Seed.
  35. //! Diese methode sollte möglichst nur mit seeds verwendet werden, die
  36. //! von getSeed zurückgegeben wurden, da der aufruf sonnst sehr lange
  37. //! dauern kann
  38. DLLEXPORT void setSeed(__int64 seed);
  39. //! Gibt den aktuellen Seed zurück, mit dem alle weiteren Zufallszahlen
  40. //! vorherbestimmt werden können
  41. DLLEXPORT __int64 getSeed() const;
  42. };
  43. } // namespace Framework