Control Libraries 7.4.0
Loading...
Searching...
No Matches
decoders.cpp
1#include "clproto/decoders.hpp"
2
3using namespace state_representation;
4
5namespace clproto {
6
7std::vector<bool> decoder(const google::protobuf::RepeatedField<bool>& message) {
8 // explicit construction is needed for the bool vector due to stl optimisations
9 std::vector<bool> vec(message.begin(), message.end());
10 return vec;
11}
12
13Eigen::Vector3d decoder(const proto::Vector3d& message) {
14 return {message.x(), message.y(), message.z()};
15}
16
17Eigen::Quaterniond decoder(const proto::Quaterniond& message) {
18 return {message.w(), message.vec().x(), message.vec().y(), message.vec().z()};
19}
20
21template<>
22Parameter<int> decoder(const state_representation::proto::Parameter& message) {
23 if (message.state().empty()) {
24 return Parameter<int>(message.state().name());
25 }
26 return Parameter<int>(message.state().name(), message.parameter_value().int_().value());
27}
28
29template<>
30Parameter<std::vector<int>> decoder(const state_representation::proto::Parameter& message) {
31 if (message.state().empty()) {
32 return Parameter<std::vector<int>>(message.state().name());
33 }
35 message.state().name(), decoder(message.parameter_value().int_array().value()));
36}
37
38template<>
39Parameter<double> decoder(const state_representation::proto::Parameter& message) {
40 if (message.state().empty()) {
41 return Parameter<double>(message.state().name());
42 }
43 return Parameter<double>(message.state().name(), message.parameter_value().double_().value());
44}
45
46template<>
47Parameter<std::vector<double>> decoder(const state_representation::proto::Parameter& message) {
48 if (message.state().empty()) {
49 return Parameter<std::vector<double>>(message.state().name());
50 }
52 message.state().name(), decoder(message.parameter_value().double_array().value()));
53}
54
55template<>
56Parameter<bool> decoder(const state_representation::proto::Parameter& message) {
57 if (message.state().empty()) {
58 return Parameter<bool>(message.state().name());
59 }
60 return Parameter<bool>(message.state().name(), message.parameter_value().bool_().value());
61}
62
63template<>
64Parameter<std::vector<bool>> decoder(const state_representation::proto::Parameter& message) {
65 if (message.state().empty()) {
66 return Parameter<std::vector<bool>>(message.state().name());
67 }
68 auto val = decoder(message.parameter_value().bool_array().value());
69 return Parameter<std::vector<bool>>(message.state().name(), val);
70}
71
72template<>
73Parameter<std::string> decoder(const state_representation::proto::Parameter& message) {
74 if (message.state().empty()) {
75 return Parameter<std::string>(message.state().name());
76 }
77 return Parameter<std::string>(message.state().name(), message.parameter_value().string().value());
78}
79
80template<>
81Parameter<std::vector<std::string>> decoder(const state_representation::proto::Parameter& message) {
82 if (message.state().empty()) {
83 return Parameter<std::vector<std::string>>(message.state().name());
84 }
86 message.state().name(), decoder(message.parameter_value().string_array().value()));
87}
88
89template<>
90Parameter<Eigen::VectorXd> decoder(const state_representation::proto::Parameter& message) {
91 if (message.state().empty()) {
92 return Parameter<Eigen::VectorXd>(message.state().name());
93 }
94 std::vector<double> elements = decoder(message.parameter_value().vector().value());
96 message.state().name(), Eigen::Map<Eigen::VectorXd>(
97 elements.data(), static_cast<Eigen::Index>(elements.size())));
98}
99
100template<>
101Parameter<Eigen::MatrixXd> decoder(const state_representation::proto::Parameter& message) {
102 if (message.state().empty()) {
103 return Parameter<Eigen::MatrixXd>(message.state().name());
104 }
105 std::vector<double> elements = decoder(message.parameter_value().matrix().value());
107 message.state().name(), Eigen::Map<Eigen::MatrixXd>(
108 elements.data(), message.parameter_value().matrix().rows(), message.parameter_value().matrix().cols()));
109}
110}
Class to represent name-value pairs of different types.
Definition Parameter.hpp:18
Bindings to encode and decode state objects into serialised binary message.
std::vector< FieldT > decoder(const google::protobuf::RepeatedField< FieldT > &message)
Decoding helper method for a RepeatedField message into vector data.
Definition decoders.hpp:52
std::string encode(const T &obj)
Encode a control libraries object into a serialized binary string representation (wire format).
Core state variables and objects.