#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; }; }