00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef TVMET_UTIL_RANDOM_H
00025 #define TVMET_UTIL_RANDOM_H
00026
00027 #include <tvmet/CompileTimeError.h>
00028
00029 namespace tvmet {
00030
00031 namespace util {
00032
00033
00051 template<class T, int MIN=0, int MAX=100>
00052 class Random {
00053 static unsigned int s_seed;
00054 public:
00055 typedef T value_type;
00056 Random() { TVMET_CT_CONDITION(MIN<MAX, wrong_random_range) }
00057 value_type operator()() {
00058 s_seed += (unsigned)std::time(0);
00059 std::srand(s_seed);
00060 return MIN + int(double(MAX) * std::rand()/(double(RAND_MAX)+1.0));
00061 }
00062 };
00063
00064 template<class T, int MIN, int MAX>
00065 unsigned int Random<T, MIN, MAX>::s_seed;
00066
00067
00068 #if defined(TVMET_HAVE_COMPLEX)
00069
00074 template<class T, int MIN=0, int MAX=100>
00075 class Random {
00076 static unsigned int s_seed;
00077 public:
00078 typedef std::complex<T> value_type;
00079 Random() { TVMET_CT_CONDITION(MIN<MAX, wrong_random_range) }
00080 value_type operator()() {
00081 s_seed += (unsigned)std::time(0);
00082 std::srand(s_seed);
00083 return MIN + int(double(MAX) * std::rand()/(double(RAND_MAX)+1.0));
00084 }
00085 };
00086
00087 template<class T, int MIN, int MAX>
00088 unsigned int Random<std::complex<T>, MIN, MAX>::s_seed;
00089 #endif // defined(TVMET_HAVE_COMPLEX)
00090
00091
00092 }
00093
00094 }
00095
00096 #endif // TVMET_UTIL_RANDOM_H
00097
00098
00099
00100
00101