-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommon.hpp
96 lines (74 loc) · 2 KB
/
common.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
* BEANDisco: general stuff
*
* Copyright 2011 Teppo Niinimäki <teppo.niinimaki(at)helsinki.fi>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_real.hpp>
#include <boost/random/uniform_int.hpp>
#include <boost/random/uniform_01.hpp>
#include <boost/random/variate_generator.hpp>
#include <boost/format.hpp>
#ifndef COMMON_HPP
#define COMMON_HPP
// min and max utility function
template <typename T>
T min(T x, T y) {
return x < y ? x : y;
}
template <typename T>
T max(T x, T y) {
return x > y ? x : y;
}
// random number generators
typedef boost::mt19937 Rng;
Rng rng;
double randu() {
boost::uniform_01<double> dist;
return dist(rng);
}
//boost::uniform_01<Rng&> randu(rng);
int randuint(int ceiling) {
boost::uniform_int<> dist(0, ceiling - 1);
return dist(rng);
//boost::variate_generator<Rng&, boost::uniform_int<> > gen(rng, dist);
//return gen();
}
/*double randu() {
return rand() / (double) RAND_MAX;
}
int randuint(int ceiling) {
return rand() % ceiling;
}/**/
using boost::format;
using std::string;
class Exception {
private:
format msg_;
public:
Exception(const string& msg) : msg_(msg) {
}
Exception(const format& msg) : msg_(msg) {
}
template <typename T>
Exception operator%(const T& x) {
return Exception(msg_ % x);
}
const char* what() {
return str(msg_).c_str();
}
};
#endif