27#include <SimoxUtility/meta/type_name.h>
34 "std::map<std::string, " +
36 "std::map<std::string, " +
45 std::vector<std::string>
49 return c->getRequiredIncludes();
55 CppBlockPtr block_if_data = std::make_shared<CppBlock>();
56 block_if_data->addLine(cppAccessor +
nextEl() +
"clear();");
62 const std::string& cppAccessor,
64 std::string& variantAccessor)
const
71 std::string nextVariantAccessor;
73 b->appendBlock(type_s->getWriteTypeBlock(type_s->getInstantiatedCppTypename(),
74 cppAccessor +
nextEl() +
"accepted_type",
76 nextVariantAccessor));
81 simox::alg::join(p.
getPath(),
", ") +
"})); // of " + cppAccessor);
89 std::string& variantAccessor)
const
91 CppBlockPtr block_if_data = std::make_shared<CppBlock>();
95 const std::string elementsAccessor = variantAccessor +
"_dictElements";
96 block_if_data->addLine(
"std::map<std::string, _Aron_T> " + elementsAccessor +
";");
99 std::string accessor_iterator_val =
103 block_if_data->addLine(
"for (const auto& [" + accessor_iterator_key +
", " +
104 accessor_iterator_val +
"] : " + resolved_accessor +
") ");
107 CppBlockPtr for_loop = std::make_shared<CppBlock>();
108 std::string nextVariantAccessor;
111 type_s->getWriteBlock(accessor_iterator_val, nextPath, nextVariantAccessor);
114 for_loop->appendBlock(child_b);
115 for_loop->addLine(elementsAccessor +
".emplace(" + accessor_iterator_key +
", " +
116 nextVariantAccessor +
");");
117 block_if_data->addBlock(for_loop);
122 block_if_data->addLine(variantAccessor +
" = " +
ARON_WRITER_ACCESSOR +
".writeDict(std::move(" +
123 elementsAccessor +
"), " +
"std::nullopt, " +
"armarx::aron::Path(" +
125 "})); // of " + cppAccessor);
133 CppBlockPtr block_if_data = std::make_shared<CppBlock>();
135 std::string elements_accessor =
137 std::string accessor_iterator_value =
139 std::string accessor_iterator_key =
142 block_if_data->addLine(
"std::map<std::string, _Aron_TElement> " + elements_accessor +
";");
144 elements_accessor +
");");
145 block_if_data->addLine(
"for (const auto& [" + accessor_iterator_key +
", " +
146 accessor_iterator_value +
"] : " + elements_accessor +
")");
149 CppBlockPtr for_loop = std::make_shared<CppBlock>();
150 std::string accessor_iterator_tmp =
152 for_loop->addLine(type_s->getFullInstantiatedCppTypename() +
" " +
153 accessor_iterator_tmp +
";");
154 for_loop->appendBlock(
155 type_s->getReadBlock(accessor_iterator_tmp,
156 "::armarx::aron::data::dereferenceElement(" + accessor_iterator_value +
")"));
157 for_loop->addLine(cppAccessor +
nextEl() +
"insert({" + accessor_iterator_key +
", " +
158 accessor_iterator_tmp +
"});");
159 block_if_data->addBlock(for_loop);
const std::vector< std::string > & getPath() const
Returned by reference: a Path is copied for every variant node that is created, so handing out the el...
Path withElement(const std::string &, bool escape=false) const
Path withAcceptedType(bool escape=false) const
std::string resolveMaybeAccessor(const std::string &) const
CppBlockPtr resolveMaybeReadBlock(const CppBlockPtr &, const std::string &, const std::string &) const
static std::string EscapeAccessor(const std::string &)
CppBlockPtr resolveMaybeResetSoftBlock(const CppBlockPtr &, const std::string &) const
std::string nextEl() const
static const std::string ARON_READER_ACCESSOR
static const std::string ARON_PATH_ACCESSOR
std::string getFullInstantiatedCppTypename() const
static const std::string ARON_VARIABLE_PREFIX
static const std::string ARON_WRITER_ACCESSOR
static std::unique_ptr< Generator > FromAronType(const type::Variant &)
static const std::string ARON_VARIANT_RETURN_ACCESSOR
CppBlockPtr resolveMaybeWriteBlock(const CppBlockPtr &, const std::string &) const
CppBlockPtr getReadBlock(const std::string &cppAccessor, const std::string &variantAccessor) const final
std::vector< std::string > getRequiredIncludes() const final
CppBlockPtr getWriteTypeBlock(const std::string &typeAccessor, const std::string &cppAccessor, const Path &, std::string &variantAccessor) const final
CppBlockPtr getWriteBlock(const std::string &cppAccessor, const Path &, std::string &variantAccessor) const final
CppBlockPtr getResetSoftBlock(const std::string &cppAccessor) const final
const std::map< type::Maybe, std::string > Maybe2CppString
A convenience header to include all aron files (full include, not forward declared)
std::shared_ptr< CppBlock > CppBlockPtr