#ifndef P2_H #define P2_H #include <cassert> #include <sstream> #include <string> #include <vector> class P2 { public: static void PR_init(std::stringstream& ss, int seed, int num_generals, int num_planets, int num_deployments, int arrival_rate); // Don't need to read further than this, unless you want to learn about // Mersenne Twister implementation private: /** * mt.h: Mersenne Twister header file * * Jason R. Blevins <jrblevin@sdf.lonestar.org> * Durham, March 7, 2007 */ /** * Mersenne Twister. * * M. Matsumoto and T. Nishimura, "Mersenne Twister: A * 623-dimensionally equidistributed uniform pseudorandom number * generator", ACM Trans. on Modeling and Computer Simulation Vol. 8, * No. 1, January pp.3-30 (1998). * * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html. */ class MersenneTwister { public: MersenneTwister(void); ~MersenneTwister(void); void print(void); void init_genrand(unsigned long s); unsigned long genrand_int32(void); private: static const int N = 624; static const int M = 397; // constant vector a static const unsigned long MATRIX_A = 0x9908b0dfUL; // most significant w-r bits static const unsigned long UPPER_MASK = 0x80000000UL; // least significant r bits static const unsigned long LOWER_MASK = 0x7fffffffUL; unsigned long* mt_; // the state vector int mti_; // mti == N+1 means mt not initialized unsigned long* init_key_; // Storage for the seed vector int key_length_; // Seed vector length unsigned long s_; // Seed integer bool seeded_by_array_; // Seeded by an array bool seeded_by_int_; // Seeded by an integer }; }; #endif