27#include <SimoxUtility/algorithm/vector.hpp>
28#include <SimoxUtility/meta/type_name.h>
42 std::vector<std::string>
45 std::vector<std::string> ret;
46 for (
const auto& child :
type.getAcceptedTypes())
49 ret = simox::alg::appended(ret, child_s->getRequiredIncludes());
57 CppBlockPtr block_if_data = std::make_shared<CppBlock>();
61 for (
const auto& child :
type.getAcceptedTypes())
64 CppBlockPtr b2 = child_s->getResetSoftBlock(
"std::get<" + std::to_string(i++) +
">(" +
65 resolved_accessor +
")");
66 block_if_data->appendBlock(b2);
73 const std::string& cppAccessor,
75 std::string& variantAccessor)
const
77 CppBlockPtr block_if_data = std::make_shared<CppBlock>();
82 const std::string acceptedTypesAccessor = variantAccessor +
"_tupleAcceptedTypes";
83 block_if_data->addLine(
"std::vector<_Aron_T> " + acceptedTypesAccessor +
";");
86 for (
const auto&
type :
type.getAcceptedTypes())
88 std::string accessor_iterator =
89 "std::get<" + std::to_string(i) +
">(" + resolved_accessor +
");";
91 std::string nextVariantAccessor;
93 CppBlockPtr b2 = type_s->getWriteTypeBlock(type_s->getInstantiatedCppTypename(),
97 block_if_data->appendBlock(b2);
98 block_if_data->addLine(acceptedTypesAccessor +
".push_back(" + nextVariantAccessor +
102 ".writeTuple(" + acceptedTypesAccessor +
", " +
105 simox::alg::join(p.
getPath(),
", ") +
"})); // of " + cppAccessor);
106 return block_if_data;
112 std::string& variantAccessor)
const
114 CppBlockPtr block_if_data = std::make_shared<CppBlock>();
119 const std::string elementsAccessor = variantAccessor +
"_tupleElements";
120 block_if_data->addLine(
"std::vector<_Aron_T> " + elementsAccessor +
";");
123 for (
const auto&
type :
type.getAcceptedTypes())
125 std::string accessor_iterator =
126 "std::get<" + std::to_string(i) +
">(" + resolved_accessor +
");";
128 std::string nextVariantAccessor;
131 type_s->getWriteBlock(accessor_iterator, nextPath, nextVariantAccessor);
134 block_if_data->appendBlock(b2);
135 block_if_data->addLine(elementsAccessor +
".push_back(" + nextVariantAccessor +
");");
139 elementsAccessor +
", " +
"armarx::aron::Path(" +
141 "})); // of " + cppAccessor);
148 CppBlockPtr block_if_data = std::make_shared<CppBlock>();
151 std::string elements_accessor =
154 block_if_data->addLine(
"std::vector<_Aron_TNonConst> " + elements_accessor +
";");
156 "); // of " + cppAccessor);
159 for (
const auto&
type :
type.getAcceptedTypes())
163 "std::get<" + std::to_string(i) +
">(" + resolved_accessor +
")",
164 elements_accessor +
"[" + std::to_string(i) +
"]");
165 block_if_data->appendBlock(b2);
std::vector< std::string > getPath() const
Path withElement(const std::string &, bool escape=false) const
Path withAcceptedTypeIndex(int, 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
static const std::string ARON_READER_ACCESSOR
static std::vector< std::string > ExtractCppTypenames(const std::vector< type::VariantPtr > &)
static const std::string ARON_PATH_ACCESSOR
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
Tuple(const type::Tuple &e)
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