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