]> git.proxmox.com Git - ceph.git/blame - ceph/src/common/CDC.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / common / CDC.cc
CommitLineData
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
10std::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
24void 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