00001
00018 #ifndef _H_GENERATORS
00019 #define _H_GENERATORS
00020
00021 #include <cstdlib>
00022 #include <cmath>
00023
00025 #define DEFAULT_SEED 1234567891
00026
00028 namespace generators {
00029
00036 class RNG {
00037
00038 protected:
00039
00041 unsigned int _seed;
00042
00043 public:
00044
00045 RNG();
00046
00053 virtual unsigned int nextInt() = 0;
00054
00062 virtual double nextDouble();
00063
00069 virtual void setSeed( unsigned int seed );
00070
00077 virtual unsigned int getMaximum();
00078
00080 virtual ~RNG() {}
00081 };
00082
00087 class RVG {
00088
00089 private:
00090 RVG() {}
00091
00092 protected:
00094 unsigned int _dim;
00095
00096 public:
00100 RVG( unsigned int dim );
00101
00103 virtual ~RVG() {}
00104
00108 virtual void nextVector( double *x ) = 0;
00109
00113 virtual void setSeed( unsigned int seed ) = 0;
00114 };
00115
00120 template< typename RNG_TYPE >
00121 class RVG_RNG: public generators::RVG {
00122
00123 protected:
00125 RNG_TYPE generator;
00126
00127 public:
00134 RVG_RNG( unsigned int dim ): RVG( dim ) {}
00135
00137 virtual ~RVG_RNG() {}
00138
00140 virtual void nextVector( double *x ) {
00141 for ( unsigned int i=0; i < _dim; i++ )
00142 x[i] = generator.nextDouble();
00143 }
00144
00146 virtual void setSeed( unsigned int seed ) {
00147 generator.setSeed( seed );
00148 }
00149 };
00150
00151 };
00152
00153 #endif
00154