1 | #include <cstdint>
|
---|
2 | #include <iostream>
|
---|
3 | #include <boost/random.hpp>
|
---|
4 |
|
---|
5 | #ifdef USE_64BIT
|
---|
6 | typedef boost::mt19937_64 MT_TYPE;
|
---|
7 | typedef uint64_t INT_TYPE;
|
---|
8 | #else
|
---|
9 | typedef boost::mt19937 MT_TYPE;
|
---|
10 | typedef uint32_t INT_TYPE;
|
---|
11 | #endif
|
---|
12 |
|
---|
13 | #define MAKE_GENERATOR() \
|
---|
14 | MT_TYPE base_generator(0); \
|
---|
15 | boost::uniform_int<INT_TYPE> distribution; \
|
---|
16 | boost::variate_generator<MT_TYPE&, boost::uniform_int<INT_TYPE>> generator(base_generator, distribution);
|
---|
17 |
|
---|
18 | boost::variate_generator<MT_TYPE&, boost::uniform_int<INT_TYPE>> return_generator() {
|
---|
19 | MAKE_GENERATOR();
|
---|
20 | return generator;
|
---|
21 | }
|
---|
22 |
|
---|
23 | INT_TYPE generate_directly() {
|
---|
24 | MAKE_GENERATOR();
|
---|
25 | return generator();
|
---|
26 | }
|
---|
27 |
|
---|
28 | INT_TYPE generate_after_copy() {
|
---|
29 | auto generator = return_generator();
|
---|
30 | return generator();
|
---|
31 | }
|
---|
32 |
|
---|
33 | int main(int argc, char** argv) {
|
---|
34 | std::cout << generate_directly() << std::endl;
|
---|
35 | std::cout << generate_after_copy() << std::endl;
|
---|
36 | }
|
---|