]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/sort/example/randomgen.cpp
1 // flexible random number generator providing multiple distributions.
3 // Copyright Steven Ross 2009-2014.
5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
9 // See http://www.boost.org/libs/sort for library home page.
11 #include <boost/random/mersenne_twister.hpp>
12 #include <boost/random/uniform_int_distribution.hpp>
17 using namespace boost
;
19 int main(int argc
, const char ** argv
) {
20 random::mt19937 generator
;
21 random::uniform_int_distribution
<unsigned> distribution
;
23 unsigned high_shift
= 16;
24 unsigned low_shift
= 16;
25 unsigned count
= 1000000;
26 //Reading in user arguments
28 high_shift
= atoi(argv
[1]);
30 low_shift
= atoi(argv
[2]);
32 count
= atoi(argv
[3]);
38 ofile
.open("input.txt", std::ios_base::out
| std::ios_base::binary
|
39 std::ios_base::trunc
);
41 printf("could not open input.txt for writing!\n");
44 //buffering file output for speed
45 unsigned uDivideFactor
= 1000;
46 //Skipping buffering for small files
47 if (count
< uDivideFactor
* 100)
48 uDivideFactor
= count
;
49 unsigned * pNumbers
= static_cast<unsigned *>(malloc(uDivideFactor
*
51 //Generating semirandom numbers
54 for (unsigned u
= 0; u
< low_shift
; ++u
) {
57 for (unsigned u
= 0; u
< high_shift
; ++u
) {
58 mask
+= one
<< (16 + u
);
60 for (unsigned u
= 0; u
< count
/uDivideFactor
; ++u
) {
62 for (; i
< uDivideFactor
; ++i
) {
63 pNumbers
[i
] = distribution(generator
) & mask
;
65 ofile
.write(reinterpret_cast<char *>(pNumbers
), uDivideFactor
* 4 );