9 #ifndef CLUON_FROMMSGPACKVISITOR_HPP 10 #define CLUON_FROMMSGPACKVISITOR_HPP 13 #include "cluon/any/any.hpp" 29 class MsgPackKeyValue {
31 MsgPackKeyValue &operator=(MsgPackKeyValue &&) =
delete;
34 MsgPackKeyValue() =
default;
35 MsgPackKeyValue(
const MsgPackKeyValue &) =
default;
36 MsgPackKeyValue(MsgPackKeyValue &&) =
default;
37 MsgPackKeyValue &operator=(
const MsgPackKeyValue &) =
default;
38 ~MsgPackKeyValue() =
default;
41 std::string m_key{
""};
57 FromMsgPackVisitor(std::map<std::string, FromMsgPackVisitor::MsgPackKeyValue> &preset) noexcept;
69 void decodeFrom(std::istream &in) noexcept;
75 void preVisit(int32_t
id,
const std::string &shortName,
const std::string &longName) noexcept;
76 void postVisit() noexcept;
78 void visit(uint32_t
id, std::string &&typeName, std::string &&name,
bool &v) noexcept;
79 void visit(uint32_t
id, std::string &&typeName, std::string &&name,
char &v) noexcept;
80 void visit(uint32_t
id, std::string &&typeName, std::string &&name, int8_t &v) noexcept;
81 void visit(uint32_t
id, std::string &&typeName, std::string &&name, uint8_t &v) noexcept;
82 void visit(uint32_t
id, std::string &&typeName, std::string &&name, int16_t &v) noexcept;
83 void visit(uint32_t
id, std::string &&typeName, std::string &&name, uint16_t &v) noexcept;
84 void visit(uint32_t
id, std::string &&typeName, std::string &&name, int32_t &v) noexcept;
85 void visit(uint32_t
id, std::string &&typeName, std::string &&name, uint32_t &v) noexcept;
86 void visit(uint32_t
id, std::string &&typeName, std::string &&name, int64_t &v) noexcept;
87 void visit(uint32_t
id, std::string &&typeName, std::string &&name, uint64_t &v) noexcept;
88 void visit(uint32_t
id, std::string &&typeName, std::string &&name,
float &v) noexcept;
89 void visit(uint32_t
id, std::string &&typeName, std::string &&name,
double &v) noexcept;
90 void visit(uint32_t
id, std::string &&typeName, std::string &&name, std::string &v) noexcept;
93 void visit(uint32_t &
id, std::string &&typeName, std::string &&name, T &value) noexcept {
97 if (0 < m_keyValues.count(name)) {
99 std::map<std::string, FromMsgPackVisitor::MsgPackKeyValue> v
100 = linb::any_cast<std::map<std::string, FromMsgPackVisitor::MsgPackKeyValue>>(m_keyValues[name].m_value);
102 value.accept(nestedMsgPackDecoder);
103 }
catch (
const linb::bad_any_cast &) {
110 std::map<std::string, FromMsgPackVisitor::MsgPackKeyValue> readKeyValues(std::istream &in) noexcept;
111 uint64_t readUint(std::istream &in) noexcept;
112 int64_t readInt(std::istream &in) noexcept;
113 std::string readString(std::istream &in) noexcept;
116 std::map<std::string, FromMsgPackVisitor::MsgPackKeyValue> m_data{};
117 std::map<std::string, FromMsgPackVisitor::MsgPackKeyValue> &m_keyValues;
#define LIBCLUON_API
Definition: cluon.hpp:56
void visit(uint32_t &id, std::string &&typeName, std::string &&name, T &value) noexcept
Definition: FromMsgPackVisitor.hpp:93
Definition: FromMsgPackVisitor.hpp:25
MsgPackConstants
Definition: MsgPackConstants.hpp:16