Newer
Older
/*
* PacketStructure.cpp
*
* Created on: Dec 7, 2022
* Author: valerio
*/
#include <PacketStructureTxt.h>
using namespace inaf::oasbo::Packets;
std::vector<std::tuple<int, std::string, int>> PacketStructureTxt::readStructureFromSource(std::string source) {
stringArrayFile = this->toStringArray(file);
size_t start = 0;
size_t count = 0;
this->structure = convertToTupleVector(start, count);
file.close();
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
}
std::vector<std::string> PacketStructureTxt::toStringArray(std::ifstream &file) {
std::vector<std::string> out;
std::string line;
while (std::getline(file, line)) {
out.push_back(line);
}
return out;
}
std::vector<std::tuple<int, std::string, int>> PacketStructureTxt::convertToTupleVector(
size_t &start, size_t &count) {
std::vector<std::tuple<int, std::string, int>> out;
for (;
start < stringArrayFile.size()
&& stringArrayFile.at(start).find("}") == std::string::npos;
start++) {
std::string line = stringArrayFile.at(start);
if (line.find("#") != std::string::npos) {
continue;
}
if (line.find("array") != std::string::npos) {
size_t arraySize = std::stoi(
line.substr(line.find(":") + 1, line.find("{")));
size_t i;
std::vector<std::tuple<int, std::string, int>> array;
size_t newStart = start + 1;
for (i = 0; i < arraySize; i++) {
newStart = start + 1;
array = convertToTupleVector(newStart, count);
std::for_each(array.begin(), array.end(),
[i](std::tuple<int, std::string, int> &line) {
std::get<1>(line).append("_#").append(
std::to_string(i));
});
out.insert(out.end(), array.begin(), array.end());
}
start = newStart;
} else {
std::string fieldName = line.substr(0, line.find(" "));
fieldName.erase(
std::remove_if(fieldName.begin(), fieldName.end(),
::isspace), fieldName.end());
out.push_back(
std::make_tuple(count, fieldName,
std::stoi(line.substr(line.find(" ")))));
count += 1;
}
}
return out;
}