#pragma once #include "Betriebssystem.h" #include "ReferenceCounter.h" namespace Framework { class Datei; class RandomGenerator : public virtual ReferenceCounter { private: struct random_data { int* fptr; /* Front pointer. */ int* rptr; /* Rear pointer. */ int* state; /* Array of state values. */ int rand_type; /* Type of random number generator. */ int rand_deg; /* Degree of random number generator. */ int rand_sep; /* Distance between front and rear. */ int* end_ptr; /* Pointer behind state table. */ }; int randtbl[32]; random_data unsafe_state; int seed; int offset; void srand(int seed); public: //! Konstruktor //! Erzeugt einen neuen Zufallsgenerator mit dem seed des Zeitpunktes //! des Erzeugens DLLEXPORT RandomGenerator(); //! Destruktor DLLEXPORT ~RandomGenerator(); //! Gibt eine Zufallszahl zwischen 0 und 1 zurück DLLEXPORT double rand(); //! Initialisiert den Gennerator mit einem Seed. //! Diese methode sollte möglichst nur mit seeds verwendet werden, die //! von getSeed zurückgegeben wurden, da der aufruf sonnst sehr lange //! dauern kann DLLEXPORT void setSeed(__int64 seed); //! Gibt den aktuellen Seed zurück, mit dem alle weiteren Zufallszahlen //! vorherbestimmt werden können DLLEXPORT __int64 getSeed() const; }; } // namespace Framework