Control Libraries 6.3.4
Loading...
Searching...
No Matches
decoders.cpp
1#include "clproto/decoders.h"
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
13StateType decoder(const proto::StateType& message) {
14 return static_cast<StateType>(message);
15}
16
17Eigen::Vector3d decoder(const proto::Vector3d& message) {
18 return {message.x(), message.y(), message.z()};
19}
20
21Eigen::Quaterniond decoder(const proto::Quaterniond& message) {
22 return {message.w(), message.vec().x(), message.vec().y(), message.vec().z()};
23}
24
25template<>
26Parameter<int> decoder(const state_representation::proto::Parameter& message) {
27 return Parameter<int>(message.state().name(), message.parameter_value().int_().value());
28}
29template<>
30Parameter<std::vector<int>> decoder(const state_representation::proto::Parameter& message) {
32 message.state().name(), decoder(message.parameter_value().int_array().value()));
33}
34template<>
35Parameter<double> decoder(const state_representation::proto::Parameter& message) {
36 return Parameter<double>(message.state().name(), message.parameter_value().double_().value());
37}
38template<>
39Parameter<std::vector<double>> decoder(const state_representation::proto::Parameter& message) {
41 message.state().name(), decoder(message.parameter_value().double_array().value()));
42}
43template<>
44Parameter<bool> decoder(const state_representation::proto::Parameter& message) {
45 return Parameter<bool>(message.state().name(), message.parameter_value().bool_().value());
46}
47template<>
48Parameter<std::vector<bool>> decoder(const state_representation::proto::Parameter& message) {
49 auto val = decoder(message.parameter_value().bool_array().value());
50 return Parameter<std::vector<bool>>(message.state().name(), val);
51}
52template<>
53Parameter<std::string> decoder(const state_representation::proto::Parameter& message) {
54 return Parameter<std::string>(message.state().name(), message.parameter_value().string().value());
55}
56template<>
57Parameter<std::vector<std::string>> decoder(const state_representation::proto::Parameter& message) {
59 message.state().name(), decoder(message.parameter_value().string_array().value()));
60}
61template<>
62Parameter<Eigen::VectorXd> decoder(const state_representation::proto::Parameter& message) {
63 std::vector<double> elements = decoder(message.parameter_value().vector().value());
65 message.state().name(), Eigen::Map<Eigen::VectorXd>(
66 elements.data(), static_cast<Eigen::Index>(elements.size())));
67}
68template<>
69Parameter<Eigen::MatrixXd> decoder(const state_representation::proto::Parameter& message) {
70 std::vector<double> elements = decoder(message.parameter_value().matrix().value());
72 message.state().name(), Eigen::Map<Eigen::MatrixXd>(
73 elements.data(), message.parameter_value().matrix().rows(), message.parameter_value().matrix().cols()));
74}
75}
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.h:53
Core state variables and objects.
StateType
The class types inheriting from State.
Definition: StateType.hpp:13