00001 #ifndef BZ_RANDOM_DEFAULT_H
00002 #define BZ_RANDOM_DEFAULT_H
00003
00004 #include <random/mt.h>
00005
00006 BZ_NAMESPACE(ranlib)
00007
00008
00009
00010
00011
00012
00013
00014
00015 typedef float defaultType;
00016
00017
00018
00019
00020
00021
00022 struct sharedState { };
00023 struct independentState { };
00024 typedef sharedState defaultState;
00025
00026 typedef unsigned int IRNG_int;
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 template<typename IRNG, typename state>
00037 class IRNGWrapper {
00038 };
00039
00040 template<typename IRNG>
00041 class IRNGWrapper<IRNG,sharedState> {
00042
00043 public:
00044 void seed(IRNG_int x)
00045 { irng_.seed(x); }
00046
00047 typedef typename IRNG::T_state T_state;
00048 T_state getState() const { return irng_.getState(); }
00049 std::string getStateString() const { return irng_.getStateString(); }
00050 void setState(const T_state& s) { irng_.setState(s); }
00051 void setState(const std::string& s) { irng_.setState(s); }
00052
00053 protected:
00054 static IRNG irng_;
00055 };
00056
00057 template<typename IRNG>
00058 IRNG IRNGWrapper<IRNG,sharedState>::irng_;
00059
00060 template<typename IRNG>
00061 class IRNGWrapper<IRNG,independentState> {
00062
00063 public:
00064 void seed(IRNG_int x)
00065 { irng_.seed(x); }
00066
00067 typedef typename IRNG::T_state T_state;
00068 T_state getState() const { return irng_.getState(); }
00069 std::string getStateString() const { return irng_.getStateString(); }
00070 void setState(const T_state& s) { irng_.setState(s); }
00071 void setState(const std::string& s) { irng_.setState(s); }
00072
00073 protected:
00074 IRNG irng_;
00075 };
00076
00077
00078
00079
00080 typedef MersenneTwister defaultIRNG;
00081
00082 BZ_NAMESPACE_END
00083
00084 #endif // BZ_RANDOM_DEFAULT_H
00085