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) : pattern(DEFAULT_CYCLIC_PATTERN), slice_len(strlen(DEFAULT_CYCLIC_PATTERN)) {
8 0 : this->current_slice_index = offset % slice_len;
9 0 : }
10 :
11 0 : CyclicDataGenerator::CyclicDataGenerator(char *pattern, size_t offset) : pattern(pattern), slice_len(strlen(pattern)) {
12 0 : this->current_slice_index = offset % slice_len;
13 0 : }
14 :
15 0 : char CyclicDataGenerator::get_next() {
16 0 : size_t i = current_slice_index;
17 :
18 0 : if (current_slice_index + 1 == slice_len) {
19 0 : current_slice_index = 0;
20 : } else {
21 0 : current_slice_index++;
22 : }
23 :
24 0 : return pattern[i];
25 : }
26 :
27 0 : void CyclicDataGenerator::get_next_n(char *dst, size_t n) {
28 0 : char buffer[n];
29 :
30 0 : for (size_t i = 0; i < n; i++) {
31 0 : buffer[i] = get_next();
32 : }
33 :
34 0 : strcpy(dst, buffer);
35 0 : }
36 :
37 0 : char CyclicDataGenerator::get_prev() {
38 0 : size_t i = current_slice_index;
39 :
40 0 : if (current_slice_index == 0) {
41 0 : current_slice_index = slice_len - 1;
42 : } else {
43 0 : current_slice_index--;
44 : }
45 :
46 0 : return pattern[i];
47 : }
48 :
49 0 : void CyclicDataGenerator::get_prev_n(char *dst, size_t n) {
50 0 : char buffer[n];
51 :
52 0 : for (size_t i = 0; i < n; i++) {
53 0 : buffer[i] = get_prev();
54 : }
55 :
56 0 : strcpy(dst, buffer);
57 0 : }
58 :
59 0 : CyclicDataGenerator::~CyclicDataGenerator() {}
|