00001 #ifndef BZ_RANDOM_DISCRETE_UNIFORM_H 00002 #define BZ_RANDOM_DISCRETE_UNIFORM_H 00003 00004 #include <random/default.h> 00005 00006 BZ_NAMESPACE(ranlib) 00007 00008 template<typename T = unsigned int, typename IRNG = defaultIRNG, 00009 typename stateTag = defaultState> 00010 class DiscreteUniform : public IRNGWrapper<IRNG,stateTag> 00011 { 00012 public: 00013 typedef T T_numtype; 00014 00015 DiscreteUniform(T n) 00016 { 00017 BZPRECONDITION(n < 4294967295U); 00018 n_ = n; 00019 } 00020 00021 T random() 00022 { 00023 return this->irng_.random() % n_; 00024 } 00025 00026 private: 00027 T n_; 00028 }; 00029 00030 BZ_NAMESPACE_END 00031 00032 #endif // BZ_RANDOM_DISCRETE_UNIFORM_H