-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrandom_data_generator.cpp
More file actions
56 lines (47 loc) · 1.67 KB
/
Copy pathrandom_data_generator.cpp
File metadata and controls
56 lines (47 loc) · 1.67 KB
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
#include "random_data_generator.h"
#include <random>
std::unique_ptr<char[]> random_data_generator_simple(size_t length)
{
auto buffer = std::make_unique<char[]>(length);
static const char hex_digits[] = "0123456789ABCDEFabcdef";
std::random_device seeder;
std::mt19937 generator(seeder());
std::uniform_int_distribution<> selector(0, sizeof(hex_digits) - 2); // lb <= x <= ub
for (size_t idx = 0; idx < length;)
{
buffer[idx++] = hex_digits[selector(generator)];
}
return buffer;
}
std::unique_ptr<char[]> random_data_generator(size_t length)
{
auto buffer = std::make_unique<char[]>(length);
static const char hex_digits[] = "0123456789ABCDEFabcdef";
std::random_device seeder;
std::mt19937 generator(seeder());
std::uniform_int_distribution<uint64_t> selector(0);
for (size_t idx = 0; idx < length;)
{
uint64_t rand_indexes = selector(generator);
switch((length - idx) % 8)
{
case 0:
buffer[idx++] = hex_digits[(rand_indexes >> 0) && 0xff];
case 7:
buffer[idx++] = hex_digits[(rand_indexes >> 56) && 0xff];
case 6:
buffer[idx++] = hex_digits[(rand_indexes >> 48) && 0xff];
case 5:
buffer[idx++] = hex_digits[(rand_indexes >> 40) && 0xff];
case 4:
buffer[idx++] = hex_digits[(rand_indexes >> 32) && 0xff];
case 3:
buffer[idx++] = hex_digits[(rand_indexes >> 24) && 0xff];
case 2:
buffer[idx++] = hex_digits[(rand_indexes >> 16) && 0xff];
case 1:
buffer[idx++] = hex_digits[(rand_indexes >> 8) && 0xff];
}
}
return buffer;
}