| 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 | }
|
|---|