41 #ifdef MESSAGE_SUPPORT 42 void Measurement::toMessage(corbo::messages::Signal& message)
const 44 header.toMessage(*message.mutable_header());
45 message.mutable_measurement()->set_time(
_time);
46 google::protobuf::RepeatedField<double> values(
_values.begin(),
_values.end());
47 message.mutable_measurement()->mutable_values()->Swap(&values);
49 message.mutable_measurement()->clear_value_labels();
50 for (
const std::string& label :
_value_labels) message.mutable_measurement()->add_value_labels(label);
52 void Measurement::fromMessage(
const corbo::messages::Signal& message, std::stringstream* issues)
54 header.fromMessage(message.header(), issues);
55 _time = message.measurement().time();
56 _values.assign(message.measurement().values().begin(), message.measurement().values().end());
58 _value_labels.clear();
59 for (
int i = 0; i < message.measurement().value_labels_size(); ++i) _value_labels.push_back(message.measurement().value_labels(i));
65 if (!_time_series) _time_series = std::make_shared<TimeSeries>();
68 if (!measurement.
getValueLabels().empty() && _time_series->getValueLabels().empty())
76 if (!_time_series) _time_series = std::make_shared<TimeSeries>();
77 _time_series->add(time, values);
82 if (!_time_series) _time_series = std::make_shared<TimeSeries>();
83 _time_series->add(time, values);
87 double time_from_start)
89 if (!_time_series) _time_series = std::make_shared<TimeSeries>();
90 _time_series->set(time, values_matrix, time_from_start);
95 if (!_time_series) _time_series = std::make_shared<TimeSeries>();
96 _time_series->setTimeFromStart(time_from_start);
99 #ifdef MESSAGE_SUPPORT 100 void TimeSeriesSignal::toMessage(corbo::messages::Signal& message)
const 102 header.toMessage(*message.mutable_header());
103 if (_time_series) _time_series->toMessage(*message.mutable_time_series());
106 void TimeSeriesSignal::fromMessage(
const corbo::messages::Signal& message, std::stringstream* issues)
108 header.fromMessage(message.header());
109 if (!_time_series) _time_series = std::make_shared<TimeSeries>();
110 _time_series->fromMessage(message.time_series(), issues);
116 if (!_ts_sequence) _ts_sequence = std::make_shared<TimeSeriesSequence>();
117 _ts_sequence->add(ts);
120 #ifdef MESSAGE_SUPPORT 121 void TimeSeriesSequenceSignal::toMessage(corbo::messages::Signal& message)
const 123 header.toMessage(*message.mutable_header());
124 if (_ts_sequence) _ts_sequence->toMessage(*message.mutable_ts_sequence());
126 void TimeSeriesSequenceSignal::fromMessage(
const corbo::messages::Signal& message, std::stringstream* issues)
128 header.fromMessage(message.header());
129 if (!_ts_sequence) _ts_sequence = std::make_shared<TimeSeriesSequence>();
130 _ts_sequence->fromMessage(message.ts_sequence(), issues);
136 std::copy(values.data(), values.data() + values.size(), std::back_inserter(
_values));
159 #ifdef MESSAGE_SUPPORT 162 message.set_index(_index);
163 google::protobuf::RepeatedField<double> values(
_values.begin(),
_values.end());
164 message.mutable_values()->Swap(&values);
169 _index = message.index();
170 _values.assign(message.values().begin(), message.values().end());
183 std::copy(values.data(), values.data() + values.size(), std::back_inserter(_values_map[index]));
188 std::copy(values.begin(), values.end(), std::back_inserter(_values_map[index]));
194 for (
const auto& elem : _values_map)
196 if ((
int)elem.second.size() > max_dim) max_dim = (
int)elem.second.size();
201 #ifdef MESSAGE_SUPPORT 204 for (
auto& item : _values_map)
206 messages::Vector& value_vec = (*message.mutable_indexed_values())[item.first];
207 for (
const double& value : item.second) value_vec.add_values(value);
215 for (
const auto& item : message.indexed_values())
217 std::vector<double>& value_vec = _values_map[item.first];
218 value_vec.assign(item.second.values().begin(), item.second.values().end());
223 #ifdef MESSAGE_SUPPORT 226 message.set_rows(_matrix.rows());
227 message.set_cols(_matrix.cols());
228 message.set_row_major(
true);
230 message.mutable_data()->Resize(_matrix.rows() * _matrix.cols(), 0);
233 message.set_label(_label);
236 void MatrixSignal::fromMessage(
const messages::Matrix& message, std::stringstream* isses)
238 if (message.row_major())
247 _label = message.label();
257 _matrix_set.push_back(matrix_signal);
260 #ifdef MESSAGE_SUPPORT 266 mat->toMessage(*mat_msg);
270 void MatrixSetSignal::fromMessage(
const messages::MatrixSet& message, std::stringstream* issues)
273 for (
int i = 0; i < message.matrices_size(); ++i)
276 matrix_signal->fromMessage(message.matrices(i));
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
std::vector< std::string > _value_labels
labels for value vector components (optional)
int getIndex() const
Return current index.
int getMaxValueDimension() const
Iterate internal map to find the largest value vector dimension.
A matrix or vector expression mapping an existing array of data.
void setTimeFromStart(double time_from_start)
Set time from start (offset to all time stamps in time())
void set(TimeSeries::Ptr time_series)
Set time series (and override any existing)
std::vector< double > _values
corresponding value vector
double getTime() const
Retrieve recorded time of the measurement.
SignalHeader header
The header of the signal.
Signal containing values indexed by a single integer.
void add(TimeSeries::Ptr ts)
Add a new time serie to the sequence.
void add(double value)
Add value.
void add(const Measurement &measurement)
Add measurement (time and value pair)
Measurement signal (value vector recorded at a specific time)
std::shared_ptr< MatrixSignal > Ptr
A matrix or vector expression mapping an existing expression.
const std::vector< std::string > & getValueLabels() const
Access labels of signal components (might be empty if not provided) [read-only].
void set(int index, double value)
Set index value pair (wipes off previous values)
for(int i=0;i< std::min(*m, *n);++i) ipiv[i]++
const std::vector< double > & getValues() const
Read access to the underlying values object.
double _time
measurement time
int EIGEN_BLAS_FUNC() copy(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy)
std::shared_ptr< TimeSeries > Ptr
The matrix class, also used for vectors and row-vectors.
void add(int index, double value)
Add index value pair.
const std::vector< double > & getValues() const
Access value vector (read-only)
void add(MatrixSignal::Ptr &matrix_signal)
Add matrix signal.