#pragma once #include "Betriebssystem.h" namespace Framework { class Datei; class RandomGenerator { 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; int ref; void srand( int seed ); public: //! Konstruktor //! Erzeugt einen neuen Zufallsgenerator mit dem seed des Zeitpunktes des Erzeugens __declspec( dllexport ) RandomGenerator(); //! Destruktor __declspec( dllexport ) ~RandomGenerator(); //! Gibt eine Zufallszahl zwischen 0 und 1 zurück __declspec( 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 __declspec( dllexport ) void setSeed( __int64 seed ); //! Gibt den aktuellen Seed zurück, mit dem alle weiteren Zufallszahlen vorherbestimmt werden können __declspec( dllexport ) __int64 getSeed() const; //! Erhöht den Reference Counting Zähler. //! \return this. __declspec( dllexport ) RandomGenerator *getThis(); //! Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht. //! \return 0. __declspec( dllexport ) RandomGenerator *release(); }; }