36 if (measurement->header.name.empty())
41 if (measurement->getValues().empty())
46 std::string signal_name;
52 signal = std::make_shared<TimeSeriesSignal>();
53 signal->header = measurement->header;
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;
79 signal = std::make_shared<TimeSeriesSequenceSignal>();
80 signal->header = time_series->header;
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;
110 signal = std::make_shared<IndexedValuesSetSignal>();
111 signal->header = indexed_values->header;
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;
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())
152 if (matrix->isEmpty())
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.");
180 if (!signal_group)
return;
181 if (signal_group == &
_signals)
return;
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);
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();
291 [&full_signal_name](
const SignalInterface::Ptr& sig) {
return sig->header.name.compare(full_signal_name) == 0; });
299 std::string group_name = groups[i];
301 [&group_name](
const SignalGroup& child) {
return child.group_name.compare(group_name) == 0; });
308 group->
children.push_back(new_group);
void clear()
Erase stored signals.
void removeSignal(const std::string &name)
#define PRINT_ERROR_NAMED(msg)
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Signal for a sequence of time series objects.
#define PRINT_WARNING_NAMED(msg)
SignalGroup * expandGroups(const std::string full_signal_name, std::string *signal_name_out=nullptr, SignalInterface::Ptr *signal=nullptr)
Parse full signal name, create tree-sub-groups if not found and return related signal group...
void sendMatrix(MatrixSignal::Ptr matrix) override
Send a matrix to the target.
std::shared_ptr< TimeSeriesSignal > Ptr
void sendIndexedValues(IndexedValuesSignal::Ptr indexed_values) override
Send signal containing values indexed by a single integer.
std::shared_ptr< MatrixSetSignal > Ptr
void sendTimeSeries(TimeSeriesSignal::Ptr time_series) override
Send a time series to the target.
std::vector< SignalGroup > children
Container for children (sub-namespace)
std::vector< SignalInterface::Ptr > group_signals
set of signals in the current group
void sendIndexedValuesSet(IndexedValuesSetSignal::Ptr indexed_values_set) override
Send signal containing a set of values indexed by integers (int to double[] map)
std::shared_ptr< TimeSeriesSequenceSignal > Ptr
SignalInterface::Ptr getSignal(const std::string &full_signal_name)
SignalGroup _signals
Root element of the signal tree.
#define PRINT_DEBUG_NAMED(msg)
Signal containing a set of matrices.
std::string group_name
Identifier for the current group / signal namespace.
std::shared_ptr< SignalInterface > Ptr
void sendMeasurement(Measurement::ConstPtr measurement) override
Send a measurement to the target.
std::shared_ptr< const Measurement > ConstPtr
std::shared_ptr< MatrixSignal > Ptr
Time Series signal (trajectory resp. sequence of values w.r.t. time)
SignalGroup * getGroup(const std::string &full_group_name)
constexpr const char SIGNAL_NAMESPACE_DELIMITER
Tree node containing a group of signals and a set of child tree nodes.
std::shared_ptr< IndexedValuesSignal > Ptr
std::shared_ptr< IndexedValuesSetSignal > Ptr
Signal containing values indexed by an integer (int to double[] map)