Line data Source code
1 : #include "dpdklibs/CyclicDataGenerator.hpp"
2 :
3 : #define DEFAULT_CYCLIC_PATTERN "abcdefghijklmnopqrstuvwxyz"
4 :
5 : using namespace dunedaq::dpdklibs::cyclicdatagenerator;
6 :
7 0 : CyclicDataGenerator::CyclicDataGenerator(size_t offset)
8 0 : : pattern(DEFAULT_CYCLIC_PATTERN)
9 0 : , slice_len(strlen(DEFAULT_CYCLIC_PATTERN))
10 : {
11 0 : this->current_slice_index = offset % slice_len;
12 0 : }
13 :
14 0 : CyclicDataGenerator::CyclicDataGenerator(char* pattern, size_t offset)
15 0 : : pattern(pattern)
16 0 : , slice_len(strlen(pattern))
17 : {
18 0 : this->current_slice_index = offset % slice_len;
19 0 : }
20 :
21 : char
22 0 : CyclicDataGenerator::get_next()
23 : {
24 0 : size_t i = current_slice_index;
25 :
26 0 : if (current_slice_index + 1 == slice_len) {
27 0 : current_slice_index = 0;
28 : } else {
29 0 : current_slice_index++;
30 : }
31 :
32 0 : return pattern[i];
33 : }
34 :
35 : void
36 0 : CyclicDataGenerator::get_next_n(char* dst, size_t n)
37 : {
38 0 : char buffer[n];
39 :
40 0 : for (size_t i = 0; i < n; i++) {
41 0 : buffer[i] = get_next();
42 : }
43 :
44 0 : strcpy(dst, buffer);
45 0 : }
46 :
47 : char
48 0 : CyclicDataGenerator::get_prev()
49 : {
50 0 : size_t i = current_slice_index;
51 :
52 0 : if (current_slice_index == 0) {
53 0 : current_slice_index = slice_len - 1;
54 : } else {
55 0 : current_slice_index--;
56 : }
57 :
58 0 : return pattern[i];
59 : }
60 :
61 : void
62 0 : CyclicDataGenerator::get_prev_n(char* dst, size_t n)
63 : {
64 0 : char buffer[n];
65 :
66 0 : for (size_t i = 0; i < n; i++) {
67 0 : buffer[i] = get_prev();
68 : }
69 :
70 0 : strcpy(dst, buffer);
71 0 : }
72 :
73 0 : CyclicDataGenerator::~CyclicDataGenerator() {}
|