]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | ||
4 | #include <random> | |
5 | ||
6 | #include "CDC.h" | |
7 | #include "FastCDC.h" | |
8 | #include "FixedCDC.h" | |
9 | ||
10 | std::unique_ptr<CDC> CDC::create( | |
11 | const std::string& type, | |
12 | int bits, | |
13 | int windowbits) | |
14 | { | |
15 | if (type == "fastcdc") { | |
16 | return std::unique_ptr<CDC>(new FastCDC(bits, windowbits)); | |
17 | } | |
18 | if (type == "fixed") { | |
19 | return std::unique_ptr<CDC>(new FixedCDC(bits, windowbits)); | |
20 | } | |
21 | return nullptr; | |
22 | } | |
23 | ||
24 | void generate_buffer(int size, bufferlist *outbl, int seed) | |
25 | { | |
26 | std::mt19937_64 engine, engine2; | |
27 | engine.seed(seed); | |
28 | engine2.seed(seed); | |
29 | ||
30 | // assemble from randomly-sized segments! | |
31 | outbl->clear(); | |
32 | auto left = size; | |
33 | while (left) { | |
34 | size_t l = std::min<size_t>((engine2() & 0xffff0) + 16, left); | |
35 | left -= l; | |
36 | bufferptr p(l); | |
37 | p.set_length(l); | |
38 | char *b = p.c_str(); | |
39 | for (size_t i = 0; i < l / sizeof(uint64_t); ++i) { | |
20effc67 | 40 | ((ceph_le64 *)b)[i] = ceph_le64(engine()); |
f67539c2 TL |
41 | } |
42 | outbl->append(p); | |
43 | } | |
44 | } | |
45 |