36 if (measurement->header.name.empty())
41 if (measurement->getValues().empty())
46 std::string signal_name;
48 SignalGroup* group =
expandGroups(measurement->header.name, &signal_name, &signal);
52 signal = std::make_shared<TimeSeriesSignal>();
53 signal->header = measurement->header;
54 group->group_signals.push_back(signal);
59 PRINT_ERROR_NAMED(
"previous signal with same name but different type detected. Skipping signal.");
62 ts->add(*measurement);
67 if (time_series->header.name.empty())
73 std::string signal_name;
75 SignalGroup* group =
expandGroups(time_series->header.name, &signal_name, &signal);
79 signal = std::make_shared<TimeSeriesSequenceSignal>();
80 signal->header = time_series->header;
81 group->group_signals.push_back(signal);
86 PRINT_ERROR_NAMED(
"previous signal with same name but different type detected. Skipping signal.");
89 sequence->add(time_series->getTimeSeriesPtr());
94 if (indexed_values->header.name.empty())
99 if (indexed_values->getValueDimension() == 0)
104 std::string signal_name;
106 SignalGroup* group =
expandGroups(indexed_values->header.name, &signal_name, &signal);
110 signal = std::make_shared<IndexedValuesSetSignal>();
111 signal->header = indexed_values->header;
112 group->group_signals.push_back(signal);
117 PRINT_ERROR_NAMED(
"previous signal with same name but different type detected. Skipping signal.");
120 set->add(*indexed_values);
125 if (indexed_values_set->header.name.empty())
131 std::string signal_name;
133 SignalGroup* group =
expandGroups(indexed_values_set->header.name, &signal_name, &signal);
137 group->group_signals.push_back(indexed_values_set);
141 PRINT_ERROR_NAMED(
"Already received a previous signal with the same name. IndexedValuesSetSignal does not support signal stacking.");
147 if (
matrix->header.name.empty())
157 std::string signal_name;
163 signal = std::make_shared<MatrixSetSignal>();
164 signal->header =
matrix->header;
170 PRINT_ERROR_NAMED(
"previous signal with same name but different type detected. Skipping signal.");
178 SignalGroup* signal_group =
getGroup(name);
180 if (!signal_group)
return;
181 if (signal_group == &
_signals)
return;
183 SignalGroup* signal_group_parent = signal_group->parent;
185 for (
int i = 0; i < (
int)signal_group_parent->children.size(); ++i)
187 if (&signal_group_parent->children[i] == signal_group)
189 signal_group_parent->children.erase(signal_group_parent->children.begin() + i);
202 std::vector<std::string> groups;
203 std::istringstream stream(full_group_name);
207 groups.push_back(current);
212 for (
int i = 0; i < (
int)groups.size(); ++i)
218 auto it = std::find_if(group->
children.begin(), group->
children.end(), [&](
const SignalGroup& item) { return item.group_name == groups[i]; });
235 std::string full_group_name;
238 if (found < full_signal_name.size())
240 full_group_name = full_signal_name.substr(0, found);
249 SignalGroup* group =
getGroup(full_group_name);
255 if (signal->header.name.compare(full_signal_name) == 0)
269 std::vector<std::string> groups;
270 std::istringstream stream(full_signal_name);
274 groups.push_back(current);
279 int n = (
int)groups.size();
281 for (
int i = 0; i <
n; ++i)
285 if (signal_name_out) *signal_name_out = groups.back();
290 std::find_if(group->group_signals.begin(), group->group_signals.end(),
291 [&full_signal_name](
const SignalInterface::Ptr& sig) { return sig->header.name.compare(full_signal_name) == 0; });
292 if (it != group->group_signals.end())
299 std::string group_name = groups[i];
300 auto it = std::find_if(group->children.begin(), group->children.end(),
301 [&group_name](
const SignalGroup& child) { return child.group_name.compare(group_name) == 0; });
302 if (it == group->children.end())
305 SignalGroup new_group;
306 new_group.group_name = group_name;
307 new_group.parent = group;
308 group->children.push_back(new_group);
309 group = &group->children.back();