"Fossies" - the Fresh Open Source Software Archive 
Member "xdelta3-3.0.11/testing/segment.h" (24 Mar 2015, 2218 Bytes) of package /linux/misc/xdelta3-3.0.11.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
1 // -*- Mode: C++ -*-
2
3 class Segment {
4 public:
5 Segment(size_t size, MTRandom *rand)
6 : size_(size),
7 seed_(rand->Rand32()),
8 seed_offset_(0),
9 data_(NULL) {
10 CHECK_GT(size_, 0);
11 }
12
13 Segment(size_t size, uint32_t seed)
14 : size_(size),
15 seed_(seed),
16 seed_offset_(0),
17 data_(NULL) {
18 CHECK_GT(size_, 0);
19 }
20
21 Segment(size_t size, uint8_t *data)
22 : size_(size),
23 seed_(0),
24 seed_offset_(0),
25 data_(data) {
26 CHECK_GT(size_, 0);
27 }
28
29 size_t Size() const {
30 return size_;
31 }
32
33 Segment Subseg(size_t start, size_t size) const {
34 CHECK_LE(start + size, size_);
35 if (data_) {
36 return Segment(size, data_ + start);
37 } else {
38 return Segment(size, seed_, seed_offset_ + start);
39 }
40 }
41
42 void Fill(size_t seg_offset, size_t size, uint8_t *data) const {
43 CHECK_LE(seg_offset + size, size_);
44 if (data_) {
45 memcpy(data, data_ + seg_offset, size);
46 } else {
47 size_t skip = seg_offset + seed_offset_;
48 MTRandom gen(seed_);
49 MTRandom8 gen8(&gen);
50 while (skip--) {
51 gen8.Rand8();
52 }
53 for (size_t i = 0; i < size; i++) {
54 data[i] = gen8.Rand8();
55 }
56 }
57 }
58
59 string ToString() const {
60 string r;
61 if (data_) {
62 for (size_t i = 0; i < size_; i++) {
63 char buf[10];
64 sprintf(buf, "%02x ", data_[i]);
65 r.append(buf);
66 }
67 } else {
68 char buf[256];
69 sprintf(buf, "size=%ld,seed=%ud,skip=%ld", size_, seed_, seed_offset_);
70 r.append(buf);
71 }
72 return r;
73 }
74
75 private:
76 // Used by Subseg()
77 Segment(size_t size, uint32_t seed, size_t seed_offset)
78 : size_(size),
79 seed_(seed),
80 seed_offset_(seed_offset),
81 data_(NULL) {
82 CHECK_GT(size_, 0);
83 }
84
85 size_t size_; // Size of this segment
86
87 // For random segments
88 uint32_t seed_; // Seed used for generating byte sequence
89 size_t seed_offset_; // Seed positions the sequence this many bytes
90 // before its beginning.
91
92 // For literal segments (data is not owned)
93 uint8_t *data_;
94 };
95
96 typedef map<xoff_t, Segment> SegmentMap;
97 typedef typename SegmentMap::const_iterator ConstSegmentMapIterator;
98 typedef typename SegmentMap::iterator SegmentMapIterator;