diff --git a/source/RobotAPI/libraries/aron/core/Path.cpp b/source/RobotAPI/libraries/aron/core/Path.cpp index c1a0ef6b621506c0e855117dac81d6e3689b13b2..bcc51b5d3e2974766b8e0aa84e034410602c8698 100644 --- a/source/RobotAPI/libraries/aron/core/Path.cpp +++ b/source/RobotAPI/libraries/aron/core/Path.cpp @@ -137,24 +137,44 @@ namespace armarx::aron return Path(elements); } - Path Path::withIndex(int i) const + Path Path::withIndex(int i, bool escape) const { - return Path(*this, {std::to_string(i)}); + std::string el = std::to_string(i); + if (escape) + { + el = "\"" + el + "\""; + } + return Path(*this, {el}); } - Path Path::withElement(const std::string& s) const + Path Path::withElement(const std::string& s, bool escape) const { - return Path(*this, {s}); + std::string el = s; + if (escape) + { + el = "\"" + el + "\""; + } + return Path(*this, {el}); } - Path Path::withAcceptedType() const + Path Path::withAcceptedType(bool escape) const { - return Path(*this, {"::accepted_type"}); + std::string el = "::accepted_type"; + if (escape) + { + el = "\"" + el + "\""; + } + return Path(*this, {el}); } - Path Path::withAcceptedTypeIndex(int i) const + Path Path::withAcceptedTypeIndex(int i, bool escape) const { - return Path(*this, {"::accepted_type_" + std::to_string(i)}); + std::string el = "::accepted_type_" + std::to_string(i); + if (escape) + { + el = "\"" + el + "\""; + } + return Path(*this, {el}); } Path Path::withDetachedLastElement() const diff --git a/source/RobotAPI/libraries/aron/core/Path.h b/source/RobotAPI/libraries/aron/core/Path.h index 941345a759c4c9f31b0e87ddd39263194ebb95e0..a9ffffc8a993e39ec70d980a5e8cc50df49a42c1 100644 --- a/source/RobotAPI/libraries/aron/core/Path.h +++ b/source/RobotAPI/libraries/aron/core/Path.h @@ -57,10 +57,10 @@ namespace armarx::aron bool hasElement() const; size_t size() const; - Path withIndex(int) const; - Path withElement(const std::string&) const; - Path withAcceptedType() const; - Path withAcceptedTypeIndex(int) const; + Path withIndex(int, bool escape = false) const; + Path withElement(const std::string&, bool escape = false) const; + Path withAcceptedType(bool escape = false) const; + Path withAcceptedTypeIndex(int, bool escape = false) const; void setRootIdentifier(const std::string&); std::string getRootIdentifier() const; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp index ca25e51b7032bbf96dcc6b910289df4412e7fc19..b09de439d8552793e3cdd8437799dbd19a28b127 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp @@ -193,7 +193,7 @@ namespace armarx::aron::codegenerator::cpp doc << "@param r - The reader implementation\n"; doc << "@return - nothing"; - CppMethodPtr m = CppMethodPtr(new CppMethod("template<class T>\nvoid read(armarx::aron::data::ReaderInterface<T>& " + ARON_READER_ACCESSOR + ", T& input, const armarx::aron::Path& "+ARON_PATH_ACCESSOR+" = armarx::aron::Path())", doc.str())); + CppMethodPtr m = CppMethodPtr(new CppMethod("template<class T>\nvoid read(armarx::aron::data::ReaderInterface<T>& " + ARON_READER_ACCESSOR + ", T& input)", doc.str())); CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine("using TNonConst = typename std::remove_const<T>::type;"); @@ -209,7 +209,7 @@ namespace armarx::aron::codegenerator::cpp b->addLine("this->resetSoft();"); b->addLine("if (" + ARON_READER_ACCESSOR + ".readNull(input))"); b->addLineAsBlock("throw armarx::aron::error::AronException(__PRETTY_FUNCTION__, \"The input to the read method must not be null.\");"); - b->appendBlock(this->getReadBlock("", Path(), "input")); + b->appendBlock(this->getReadBlock("", "input")); m->setBlock(b); return m; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h index e200e3157731965b0ee3f17be937a477190ed0ce..870715276cf3cd791bb406f4108338ea7bda7203 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h @@ -134,7 +134,7 @@ namespace armarx::aron::codegenerator::cpp virtual CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const = 0; CppMethodPtr toReadMethod() const; - virtual CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const = 0; + virtual CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const = 0; CppMethodPtr toEqualsMethod() const; virtual CppBlockPtr getEqualsBlock(const std::string& cppAccessorThis, const std::string& cppAccessorOther) const; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.cpp index 1579bf11ff346ec44fd60792ec6842d9da093a12..b42286150ae700c5efa0b702e97f09ee8854476e 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.cpp @@ -51,10 +51,12 @@ namespace armarx::aron::codegenerator::cpp::generator auto type_s = FromAronType(*type.getAcceptedType()); std::string nextVariantAccessor; - Path nextPath = p.withAcceptedType(); + Path nextPath = p.withAcceptedType(true); b->appendBlock(type_s->getWriteTypeBlock(type_s->getCoreCppTypename(), cppAccessor + nextEl() + "accepted_type", nextPath, nextVariantAccessor)); - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeDict(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + nextVariantAccessor + "); // of " + cppAccessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeDict(" + nextVariantAccessor + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -88,12 +90,12 @@ namespace armarx::aron::codegenerator::cpp::generator block_if_data->addLine(variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeDict(" + elementsAccessor + ", " + "std::nullopt, " + - "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ",")+"})); // of " + cppAccessor); + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Dict::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Dict::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); @@ -108,9 +110,8 @@ namespace armarx::aron::codegenerator::cpp::generator auto type_s = FromAronType(*type.getAcceptedType()); CppBlockPtr for_loop = std::make_shared<CppBlock>(); std::string accessor_iterator_tmp = ARON_VARIABLE_PREFIX + "_" + escaped_accessor + "_dictTmp"; - Path nextPath = p.withElement(accessor_iterator_key); for_loop->addLine(type_s->getFullCppTypename() + " " + accessor_iterator_tmp +";"); - for_loop->appendBlock(type_s->getReadBlock(accessor_iterator_tmp, nextPath, accessor_iterator_value)); + for_loop->appendBlock(type_s->getReadBlock(accessor_iterator_tmp, accessor_iterator_value)); for_loop->addLine(cppAccessor + nextEl() + "insert({" + accessor_iterator_key + ", " + accessor_iterator_tmp + "});"); block_if_data->addBlock(for_loop); } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.h index d503a291e4edd09f36f5b7ea58b347dbac70b228..7db7bf2ca9cc5d58518aa799c7a2d18decfebc6c 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.h @@ -40,6 +40,6 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.cpp index 0b9de6d85826fb329b6bf3a4b18995cf963a9264..a7fbcd3ad8f19fec91251ce6bf1c5074feab6774 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.cpp @@ -50,11 +50,13 @@ namespace armarx::aron::codegenerator::cpp::generator auto type_s = FromAronType(*type.getAcceptedType()); std::string nextVariantAccessor; - Path nextPath = p.withAcceptedType(); + Path nextPath = p.withAcceptedType(true); CppBlockPtr b2 = type_s->getWriteTypeBlock(type_s->getCoreCppTypename(), cppAccessor + nextEl() + "accepted_type", nextPath, nextVariantAccessor); b->appendBlock(b2); - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeList(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + nextVariantAccessor + "); // of " + cppAccessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeList(" + nextVariantAccessor + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -89,17 +91,15 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr List::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr List::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); std::string elements_accessor = ARON_VARIABLE_PREFIX + "_" + escaped_accessor + "_listElements"; std::string accessor_iterator_value = ARON_VARIABLE_PREFIX + "_" + escaped_accessor + "_listValue"; - std::string accessor_iterator = ARON_VARIABLE_PREFIX + "_" + escaped_accessor + "_it"; block_if_data->addLine("std::vector<TNonConst> " + elements_accessor + ";"); block_if_data->addLine("" + ARON_READER_ACCESSOR + ".readList(" + variantAccessor + ", " + elements_accessor + ");"); - block_if_data->addLine("unsigned int " + accessor_iterator + " = 0;"); block_if_data->addLine("for (const auto& " + accessor_iterator_value + " : " + elements_accessor + ")"); { CppBlockPtr for_loop = std::make_shared<CppBlock>(); @@ -107,11 +107,9 @@ namespace armarx::aron::codegenerator::cpp::generator auto type_s = FromAronType(*type.getAcceptedType()); std::string accessor_iterator_tmp = ARON_VARIABLE_PREFIX + "_" + escaped_accessor + "_listTmp"; - Path nextPath = p.withElement("std::to_string(" + accessor_iterator + ")"); for_loop->addLine(type_s->getFullCppTypename() + " " + accessor_iterator_tmp + ";"); - for_loop->appendBlock(type_s->getReadBlock(accessor_iterator_tmp, nextPath, accessor_iterator_value)); + for_loop->appendBlock(type_s->getReadBlock(accessor_iterator_tmp, accessor_iterator_value)); for_loop->addLine(cppAccessor + nextEl() + "push_back(" + accessor_iterator_tmp + ");"); - for_loop->addLine(accessor_iterator + "++;"); block_if_data->addBlock(for_loop); } return resolveMaybeReadBlock(block_if_data, cppAccessor, variantAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.h index 149c10c523a97f5ca36689531fc21d4c551cd8ae..c126af2ad3aa868b365a6f38c312ef5b93a92a68 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.h @@ -41,6 +41,6 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.cpp index 838db5b0dcabeff6a30a453a515e694901293e27..faf7d6f2dcc2ef324b11b2521bd1fa9bceed7932 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.cpp @@ -49,7 +49,9 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + getCoreCppTypename() + "::writeType(" + ARON_WRITER_ACCESSOR + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + cppAccessor); + b->addLine("auto " + variantAccessor + " = " + getCoreCppTypename() + "::writeType(" + ARON_WRITER_ACCESSOR + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -64,7 +66,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Object::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Object::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); if (const auto reset = resolveMaybeGenerator(cppAccessor); !reset.empty()) diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.h index 63296a64372dd0f41dd7553865491e95df5f7dd4..a1a5af406007f0fc061ebf4eacb876fd4c55e394 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.h @@ -41,6 +41,6 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.cpp index c258ddc8addb60f451d62e44b001f29619184ebb..d0fe5fc4729db68f048e070dd8b76d7035a19fee 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.cpp @@ -69,7 +69,10 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr b22 = child_s2->getWriteTypeBlock(child_s2->getCoreCppTypename(), accessor_iterator2, secondPath, secondVariantAccessor); block_if_data->appendBlock(b22); - block_if_data->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePair("+conversion::Maybe2CppString.at(type.getMaybe())+", "+firstVariantAccessor+", "+secondVariantAccessor+"); // of " + cppAccessor); + block_if_data->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePair(" + firstVariantAccessor + ", " + + secondVariantAccessor + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return block_if_data; } @@ -101,7 +104,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Pair::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Pair::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); @@ -111,13 +114,11 @@ namespace armarx::aron::codegenerator::cpp::generator block_if_data->addLine("" + ARON_READER_ACCESSOR + ".readList("+elements_accessor+"); // of " + cppAccessor); auto child_s1 = FromAronType(*type.getFirstAcceptedType()); - Path firstPath = p.withElement("\"0\""); - CppBlockPtr b21 = child_s1->getReadBlock(cppAccessor + nextEl() + "first", firstPath, elements_accessor+"[0]"); + CppBlockPtr b21 = child_s1->getReadBlock(cppAccessor + nextEl() + "first", elements_accessor+"[0]"); block_if_data->appendBlock(b21); auto child_s2 = FromAronType(*type.getSecondAcceptedType()); - Path secondPath = p.withElement("\"1\""); - CppBlockPtr b22 = child_s2->getReadBlock(cppAccessor + nextEl() + "second", secondPath, elements_accessor+"[1]"); + CppBlockPtr b22 = child_s2->getReadBlock(cppAccessor + nextEl() + "second", elements_accessor+"[1]"); block_if_data->appendBlock(b22); return resolveMaybeReadBlock(block_if_data, cppAccessor, variantAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.h index 04cccc5067ee53f453743a778d16d869adee3aec..0fc1c8f3ec11379c2692b9d07c8e93ebac244631 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.h @@ -41,6 +41,6 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.cpp index dce8fcf233f20e26f9f8e336b65f70cfcb644311..ce09ac5050b7dc86a27790b0b31203d6de8af1a5 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.cpp @@ -69,7 +69,9 @@ namespace armarx::aron::codegenerator::cpp::generator block_if_data->appendBlock(b2); block_if_data->addLine(acceptedTypesAccessor + ".push_back(" + nextVariantAccessor + ");"); } - block_if_data->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeTuple("+conversion::Maybe2CppString.at(type.getMaybe())+", "+acceptedTypesAccessor+"); // of " + cppAccessor); + block_if_data->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeTuple(" + acceptedTypesAccessor + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return block_if_data; } @@ -101,7 +103,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Tuple::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Tuple::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); @@ -115,8 +117,7 @@ namespace armarx::aron::codegenerator::cpp::generator for (const auto& type : type.getAcceptedTypes()) { auto type_s = FromAronType(*type); - Path nextPath = p.withElement("\"" + std::to_string(i) + "\""); - CppBlockPtr b2 = type_s->getReadBlock("std::get<" + std::to_string(i) + ">(" + resolved_accessor + ")", nextPath, elements_accessor+"[" + std::to_string(i) + "]"); + CppBlockPtr b2 = type_s->getReadBlock("std::get<" + std::to_string(i) + ">(" + resolved_accessor + ")", elements_accessor+"[" + std::to_string(i) + "]"); block_if_data->appendBlock(b2); i++; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.h index 2ed85c206c31611d07c1b2df84f71985a8dcc79f..ada4efb7a85083d3be3509483dd6236ce1ff72b7 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.h @@ -41,6 +41,6 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h index 27381337413d6f350c11847b236bcdef55937673..c4ebdfacb0c7622493726d37eb6245c52b8179b3 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h @@ -51,7 +51,7 @@ namespace armarx::aron::codegenerator::cpp::generator::detail return this->resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override { auto block_if_data = std::make_shared<CppBlock>(); std::string resolved_accessor = this->resolveMaybeAccessor(cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp index 9547f5ff563e19f1d470fdee22cb8987ca939345..a36899f7240a28b6c439eaafe506a751ffbfe999 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp @@ -62,7 +62,9 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto "+variantAccessor+" = " +getCoreCppTypename() + "::writeType(" + ARON_WRITER_ACCESSOR + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + ");"); + b->addLine("auto "+variantAccessor+" = " +getCoreCppTypename() + "::writeType(" + ARON_WRITER_ACCESSOR + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -78,7 +80,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr IntEnum::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr IntEnum::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); if (const auto reset = resolveMaybeGenerator(cppAccessor); !reset.empty()) diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.h index 694cb7dc11c1ed4b3c14881bd9ef100aa99e721a..f472129d93a75d6f3219151bb48017f1109e4eee 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.h @@ -48,6 +48,6 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp index f6d6ba2c763df223f58336da2b33a351d60e6143..466f4deb5e81d8c00c3a32f69cae80dd6932735c 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp @@ -65,7 +65,9 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeImage(" + conversion::PixelType2CppString.at(type.getPixelType()) + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + cppAccessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeImage(" + conversion::PixelType2CppString.at(type.getPixelType()) + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -87,7 +89,7 @@ namespace armarx::aron::codegenerator::cpp::generator } - CppBlockPtr Image::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Image::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.h index 027dfba2e3102edaa6d2909bdf7492954d013ee8..a6722dbbeabed393b0eba5190be363b9c34f8d0e 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.h @@ -46,7 +46,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; public: diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp index 4c2b71fa834526c4be21fad9ec8a95dc24b37608..d653183867d90a3d63213a5c5751c4c31c2ab984 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp @@ -57,9 +57,12 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr b = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - const std::string line_if_data = "auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeMatrix((int) " + std::to_string(type.getRows()) + ", (int) " + std::to_string(type.getCols()) + ", " + conversion::MatrixElementType2CppString.at(type.getElementType()) + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + ")"; + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeMatrix((int) " + std::to_string(type.getRows()) + ", " + + "(int) " + std::to_string(type.getCols()) + ", " + + conversion::MatrixElementType2CppString.at(type.getElementType()) + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); - b->addLine(line_if_data + "; // of " + cppAccessor); return b; } @@ -79,7 +82,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Matrix::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Matrix::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h index f4c6c1e661fb25650f72b5a3f9242c75817d6054..491a3d19de4f6d4cf3c659897ebeab5ae05f22a7 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h @@ -44,7 +44,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; public: diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp index 5981ba326bc459cf3d1223993f9ffbdda6dcf785..440aa5197b1f3bd84d1f31cc1dc165b17865143c 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp @@ -54,7 +54,7 @@ namespace armarx::aron::codegenerator::cpp::generator return b; } - CppBlockPtr NDArray::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string&) const + CppBlockPtr NDArray::getReadBlock(const std::string& cppAccessor, const std::string&) const { CppBlockPtr b = std::make_shared<CppBlock>(); return b; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h index 9adc6be067409c4a15978a50cade08b133e851b2..428ca861d7ce36ba3a79bbe6c664511c20d9e412 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h @@ -44,6 +44,6 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Orientation.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Orientation.cpp index 829fb7483914c8df18c09dca049849050dc5f96a..e650162243dcf5b1a2d096faa0fb2e9496e6ead4 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Orientation.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Orientation.cpp @@ -48,7 +48,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeOrientation(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + cppAccessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeOrientation(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -66,7 +67,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Orientation::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Orientation::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Orientation.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Orientation.h index 5b3b7d4cfc94e52709e8ffca77fae829595d4f19..e2c48cba179f025aa1fa3fd60f56fd8cda3a6463 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Orientation.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Orientation.h @@ -42,7 +42,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string&) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; CppBlockPtr getEqualsBlock(const std::string& cppAccessor, const std::string&) const override; }; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp index f0e6448b153f17599aac1c0e1d837bd1c4e76fa6..ef64710682085b28bc86457ca22ea1863d65d692 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp @@ -65,7 +65,9 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePointCloud(" + conversion::VoxelType2CppString.at(type.getVoxelType()) + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + cppAccessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePointCloud(" + conversion::VoxelType2CppString.at(type.getVoxelType()) + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -83,7 +85,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr PointCloud::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr PointCloud::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h index 302e9114b3c3e2a1bb4e9b2f83d078e62075f7da..3c1770656c5c40035129e34373523fc971bf2216 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h @@ -43,7 +43,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; CppBlockPtr getEqualsBlock(const std::string& cppAccessor, const std::string&) const override; public: diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Pose.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Pose.cpp index 029ce03489316cad172d3278f40e285795d3a6b9..c6116c2f85128609b6dd5357600f9b2b71ad3873 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Pose.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Pose.cpp @@ -52,7 +52,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePose(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + cppAccessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePose(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -70,7 +71,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Pose::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Pose::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Pose.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Pose.h index dc142f3ee6d28449f3278f82192165361486cce8..1cc292cf7cccbf2e980ef13102fb6b9cb2b78441 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Pose.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Pose.h @@ -41,7 +41,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; CppBlockPtr getEqualsBlock(const std::string& cppAccessor, const std::string&) const override; }; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Position.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Position.cpp index 1cdddae372c3470629005f3f53c8b8af7fd316e5..34da5638614d5ce43c95986dcb3df6b0775d8616 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Position.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Position.cpp @@ -52,7 +52,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePosition(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + cppAccessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePosition(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -70,7 +71,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Position::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Position::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Position.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Position.h index 251b27c7cc43e72cd75df4aed3867235c1482f91..f0c12560b01e85ca5be736bd559054bf2b46a310 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Position.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Position.h @@ -41,7 +41,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; CppBlockPtr getEqualsBlock(const std::string& cppAccessor, const std::string&) const override; }; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp index 7bdc3fd6aa2833f33a1b19c670f76825b0a3fea4..e5b0aeb6ad780dbc8b3702f54939c16411da3766 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp @@ -59,7 +59,9 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeQuaternion(" + conversion::QuaternionElementType2Cpp.at(type.getElementType()) + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + cppAccessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeQuaternion(" + conversion::QuaternionElementType2Cpp.at(type.getElementType()) + ", " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; } @@ -77,7 +79,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Quaternion::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Quaternion::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h index af1ff9aa9e51d5e46d8284da51ef63d61c81b8ee..cc39ad162402f7489ed1c698f076ee80ff6a97bd 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h @@ -44,7 +44,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; public: diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Bool.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Bool.cpp index 5cc283fc2d6853039e969d733131609ab2b76830..96a072070f84fcc3fca990103fcde71d6b15e8b6 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Bool.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Bool.cpp @@ -41,7 +41,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(accessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeBool(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + accessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeBool(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + typeAccessor); return b; } } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Double.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Double.cpp index ee262c12ba6303ee617dc166a4e3901e4fa94905..ba2a91499ca23401ed9ba967c2091447cec6ecde 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Double.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Double.cpp @@ -45,7 +45,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(accessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeDouble(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + accessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeDouble(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + typeAccessor); return b; } } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Float.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Float.cpp index ba009be5959604d654bf61701761195006ad9410..a0161aa678fc5a0335c2741bd1d03ddcc923ce24 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Float.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Float.cpp @@ -45,7 +45,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(accessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeFloat(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + accessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeFloat(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + typeAccessor); return b; } } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Int.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Int.cpp index a7d815f15aab6898b89b283275d1613f8eb03021..ca09f8b02176f0dbd6c0196e766865f78e133e98 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Int.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Int.cpp @@ -45,7 +45,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(accessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeInt(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + accessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeInt(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + typeAccessor); return b; } } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Long.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Long.cpp index cfc6d86c55233c209343fa3ed48beb77604ea669..bc9a136ae898757102160ccd26b0b8e8d637f3d5 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Long.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Long.cpp @@ -45,7 +45,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(accessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeLong(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + accessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeLong(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + typeAccessor); return b; } } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/String.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/String.cpp index f2c48085d9ad4cd09b9fe7099cf1264446688bdc..83a818f00b4589a0eab84e1117386fed8b914082 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/String.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/String.cpp @@ -45,7 +45,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(accessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeString(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + accessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeString(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + typeAccessor); return b; } } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Time.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Time.cpp index bfbacd20807304a202a4501961a1c270dd1e6a0d..d836e3cabaebf6c46ac4cf090e9953a4597893b0 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Time.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Time.cpp @@ -45,7 +45,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(accessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeTime(" + conversion::Maybe2CppString.at(type.getMaybe()) + "); // of " + accessor); + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeTime(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + typeAccessor); return b; } @@ -61,7 +62,7 @@ namespace armarx::aron::codegenerator::cpp::generator return resolveMaybeWriteBlock(block_if_data, cppAccessor); } - CppBlockPtr Time::getReadBlock(const std::string& cppAccessor, const Path& p, const std::string& variantAccessor) const + CppBlockPtr Time::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); std::string escaped_accessor = EscapeAccessor(cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Time.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Time.h index caa92b1bf15f9e5964e9cb9e20a5e68472c1d5a7..00a0fe530a715fe032ba70b24495819e2363e80d 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Time.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Time.h @@ -40,6 +40,6 @@ namespace armarx::aron::codegenerator::cpp::generator /* virtual implementations */ CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp index 8853abb334b1293521514f635004654f1ed2a8a2..16e93a66da0070428bb492ab2cf37d320d27fc91 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp @@ -104,7 +104,10 @@ namespace armarx::aron::codegenerator::cpp::generator b->addLine("//TODO: "); b->addLine("std::map<std::string, int> " + INT_ENUM_VALUE_MAP + ";"); - b->addLine("return " + ARON_WRITER_ACCESSOR + ".writeIntEnum(\"" + type.getEnumName() + "\", "+INT_ENUM_VALUE_MAP+", "+ ARON_MAYBE_TYPE_ACCESSOR + ");"); + b->addLine("return " + ARON_WRITER_ACCESSOR + ".writeIntEnum(\"" + type.getEnumName() + "\", " + + INT_ENUM_VALUE_MAP + ", " + + ARON_MAYBE_TYPE_ACCESSOR + ", " + + ARON_PATH_ACCESSOR + ");"); return b; return b; @@ -114,12 +117,12 @@ namespace armarx::aron::codegenerator::cpp::generator { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); - block_if_data->addLine("return " + ARON_WRITER_ACCESSOR + ".writePrimitive(EnumToValueMap.at(value), "+ + block_if_data->addLine("return " + ARON_WRITER_ACCESSOR + ".writePrimitive(EnumToValueMap.at(value), " + ARON_PATH_ACCESSOR + "); // of top level enum " + getCoreCppTypename()); return block_if_data; } - CppBlockPtr IntEnumClass::getReadBlock(const std::string&, const Path& p, const std::string& variantAccessor) const + CppBlockPtr IntEnumClass::getReadBlock(const std::string&, const std::string& variantAccessor) const { static const std::string INT_ENUM_TMP_VALUE = ARON_VARIABLE_PREFIX + "_tmpValue"; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h index ec4617d2c8e5c0a65898d6b49599327d3b056280..1d105b79c70e809d0b94614c648078e1897e92a4 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h @@ -46,7 +46,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string& variantAccessor) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; // TODO: Move some of those methods to upper class for enums (if we want to support multiple enums) diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp index bde9b45c30fd8bfe844223ffef69659eb9151243..7b8c63115bab0edba5bf2842a6e8ae69988db841 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp @@ -101,26 +101,27 @@ namespace armarx::aron::codegenerator::cpp::generator b->addLine("// get base class of " + this->getFullCppTypename()); b->addLine("auto " + OBJECT_EXTENDS_ACCESSOR + " = " + extends_s->getFullCppTypename() + "::writeType(" + ARON_WRITER_ACCESSOR + ", ::armarx::aron::type::Maybe::eNone);"); } + else + { + b->addLine("auto " + OBJECT_EXTENDS_ACCESSOR + " = std::nullopt;"); + } b->addLine("// members of " + this->getFullCppTypename()); for (const auto& [key, child] : type.getMemberTypes()) { const auto child_s = FromAronType(*child); std::string child_return_variant; - Path nextPath = p.withElement("\"" + key + "\""); + Path nextPath = p.withElement(key, true); CppBlockPtr child_b = child_s->getWriteTypeBlock(child_s->getFullCppTypename(), key, nextPath, child_return_variant); b->appendBlock(child_b); b->addLine(OBJECT_MEMBERS_ACCESSOR + ".emplace(\"" + key + "\", " + child_return_variant + ");"); } - if (type.getExtends() != nullptr) - { - b->addLine("return " + ARON_WRITER_ACCESSOR + ".writeObject(\"" + type.getObjectName() + "\", "+ARON_MAYBE_TYPE_ACCESSOR+", " + OBJECT_MEMBERS_ACCESSOR + ", " + OBJECT_EXTENDS_ACCESSOR + ");"); - } - else - { - b->addLine("return " + ARON_WRITER_ACCESSOR + ".writeObject(\"" + type.getObjectName() + "\", "+ARON_MAYBE_TYPE_ACCESSOR+", " + OBJECT_MEMBERS_ACCESSOR + ", std::nullopt);"); - } + b->addLine("return " + ARON_WRITER_ACCESSOR + ".writeObject(\"" + type.getObjectName() + "\", " + + OBJECT_MEMBERS_ACCESSOR + ", " + + OBJECT_EXTENDS_ACCESSOR + ", " + + ARON_MAYBE_TYPE_ACCESSOR + ", " + + ARON_PATH_ACCESSOR + "); // of top level object " + getCoreCppTypename());; return b; } @@ -148,7 +149,7 @@ namespace armarx::aron::codegenerator::cpp::generator const auto child_s = FromAronType(*child); std::string child_return_variant; - Path nextPath = p.withElement("\"" + key + "\""); + Path nextPath = p.withElement(key, true); CppBlockPtr child_b = child_s->getWriteBlock(key, nextPath, child_return_variant); block_if_data->addLine("auto " + child_return_variant + " = " + ARON_WRITER_ACCESSOR + ".writeNull();"); block_if_data->appendBlock(child_b); @@ -161,7 +162,7 @@ namespace armarx::aron::codegenerator::cpp::generator return block_if_data; } - CppBlockPtr ObjectClass::getReadBlock(const std::string&, const Path& p, const std::string& variantAccessor) const + CppBlockPtr ObjectClass::getReadBlock(const std::string&, const std::string& variantAccessor) const { static const std::string OBJECT_MEMBERS_ACCESSOR = ARON_VARIABLE_PREFIX + "_objectMembers"; static const std::string OBJECT_EXTENDS_ACCESSOR = ARON_VARIABLE_PREFIX + "_objectExtends"; @@ -181,8 +182,7 @@ namespace armarx::aron::codegenerator::cpp::generator { const auto child_s = FromAronType(*child); const std::string child_variant_accessor = OBJECT_MEMBERS_ACCESSOR + ".at(\"" + key + "\")"; - Path nextPath = p.withElement("\"" + key + "\""); - block_if_data->appendBlock(child_s->getReadBlock(key, nextPath, child_variant_accessor)); + block_if_data->appendBlock(child_s->getReadBlock(key, child_variant_accessor)); } return block_if_data; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h index 27fd14a7b4e4e823fd9f96958b0bbaaf1e2b75be..8d7a996ef5e0baa081257a4bae4ce09b9425a8a5 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h @@ -43,7 +43,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string&) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const Path&, const std::string&) const override; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string&) const override; CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; }; } diff --git a/source/RobotAPI/libraries/aron/core/data/converter/Converter.h b/source/RobotAPI/libraries/aron/core/data/converter/Converter.h index f0573af75ff15dbf2740b09d5c590732bfb3fc73..3c74e41973d965e8a3ee3e79dcc9265e7c5dd5bb 100644 --- a/source/RobotAPI/libraries/aron/core/data/converter/Converter.h +++ b/source/RobotAPI/libraries/aron/core/data/converter/Converter.h @@ -64,27 +64,29 @@ namespace armarx::aron::data { std::map<std::string, ReaderInputTypeNonConst> elementsOfInput; std::map<std::string, WriterReturnType> elementsReturn; - r.readDict(o, elementsOfInput); + Path p; + r.readDict(o, elementsOfInput, p); for (const auto& [key, value] : elementsOfInput) { auto converted = readAndWrite<DerivedT>(value); elementsReturn.insert({key, converted}); } - last_returned = w.writeDict(elementsReturn); + last_returned = w.writeDict(elementsReturn, std::nullopt, p); }; void visitList(ReaderInputType& o) final { std::vector<ReaderInputTypeNonConst> elementsOfInput; std::vector<WriterReturnType> elementsReturn; - r.readList(o, elementsOfInput); + Path p; + r.readList(o, elementsOfInput, p); for (const auto& value : elementsOfInput) { auto converted = readAndWrite<DerivedT>(value); elementsReturn.push_back(converted); } - last_returned = w.writeList(elementsReturn); + last_returned = w.writeList(elementsReturn, p); }; void visitNDArray(ReaderInputType& o) final @@ -92,50 +94,57 @@ namespace armarx::aron::data std::string type; std::vector<int> shape; std::vector<unsigned char> data; - r.readNDArray(o, shape, type, data); - last_returned = w.writeNDArray(shape, type, data.data()); + Path p; + r.readNDArray(o, shape, type, data, p); + last_returned = w.writeNDArray(shape, type, data.data(), p); }; void visitInt(ReaderInputType& o) final { int i; - r.readInt(o, i); - last_returned = w.writeInt(i); + Path p; + r.readInt(o, i, p); + last_returned = w.writeInt(i, p); }; void visitLong(ReaderInputType& o) final { long i; - r.readLong(o, i); - last_returned = w.writeLong(i); + Path p; + r.readLong(o, i, p); + last_returned = w.writeLong(i, p); }; void visitFloat(ReaderInputType& o) final { float i; - r.readFloat(o, i); - last_returned = w.writeFloat(i); + Path p; + r.readFloat(o, i, p); + last_returned = w.writeFloat(i, p); }; void visitDouble(ReaderInputType& o) final { double i; - r.readDouble(o, i); - last_returned = w.writeDouble(i); + Path p; + r.readDouble(o, i, p); + last_returned = w.writeDouble(i, p); }; void visitBool(ReaderInputType& o) final { bool i; - r.readBool(o, i); - last_returned = w.writeBool(i); + Path p; + r.readBool(o, i, p); + last_returned = w.writeBool(i, p); }; void visitString(ReaderInputType& o) final { std::string i; - r.readString(o, i); - last_returned = w.writeString(i); + Path p; + r.readString(o, i, p); + last_returned = w.writeString(i, p); }; }; diff --git a/source/RobotAPI/libraries/aron/core/data/rw/Reader.h b/source/RobotAPI/libraries/aron/core/data/rw/Reader.h index d3642c15790434c0b89b0444c83e6a671f442bb2..3c14c097d8583f9d8ff54f4b769dbb6335627e4d 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/Reader.h +++ b/source/RobotAPI/libraries/aron/core/data/rw/Reader.h @@ -27,6 +27,7 @@ #include <optional> // ArmarX +#include <RobotAPI/libraries/aron/core/Path.h> #include <RobotAPI/libraries/aron/core/Descriptor.h> namespace armarx::aron::data @@ -40,25 +41,110 @@ namespace armarx::aron::data virtual ~ReaderInterface() = default; - virtual void readList(InputType& input, std::vector<InputTypeNonConst>& elements) = 0; - virtual void readDict(InputType& input, std::map<std::string, InputTypeNonConst>& elements) = 0; + virtual void readList(InputType& input, std::vector<InputTypeNonConst>& elements, Path&) = 0; + virtual void readDict(InputType& input, std::map<std::string, InputTypeNonConst>& elements, Path&) = 0; - virtual void readNDArray(InputType& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data) = 0; + virtual void readNDArray(InputType& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data, Path&) = 0; - virtual void readInt(InputType& input, int& i) = 0; - virtual void readLong(InputType& input, long& i) = 0; - virtual void readFloat(InputType& input, float& i) = 0; - virtual void readDouble(InputType& input, double& i) = 0; - virtual void readString(InputType& input, std::string& s) = 0; - virtual void readBool(InputType& input, bool& i) = 0; + virtual void readInt(InputType& input, int& i, Path&) = 0; + virtual void readLong(InputType& input, long& i, Path&) = 0; + virtual void readFloat(InputType& input, float& i, Path&) = 0; + virtual void readDouble(InputType& input, double& i, Path&) = 0; + virtual void readString(InputType& input, std::string& s, Path&) = 0; + virtual void readBool(InputType& input, bool& i, Path&) = 0; virtual bool readNull(InputType& input) // defaulted implementation { InputType nil = {}; - return input == nil; + return (input == nil); } // Convenience methods + void readPrimitive(InputType& input, int& i, Path& p) + { + return readInt(input, i, p); + } + + void readPrimitive(InputType& input, long& i, Path& p) + { + return readLong(input, i, p); + } + + void readPrimitive(InputType& input, float& i, Path& p) + { + return readFloat(input, i, p); + } + + void readPrimitive(InputType& input, double& i, Path& p) + { + return readDouble(input, i, p); + } + + void readPrimitive(InputType& input, std::string& i, Path& p) + { + return readString(input, i, p); + } + + void readPrimitive(InputType& input, bool& i, Path& p) + { + return readBool(input, i, p); + } + + // Convenience methods without path object + void readList(InputType& input, std::vector<InputTypeNonConst>& elements) + { + Path p; + return readList(input, elements, p); + } + + void readDict(InputType& input, std::map<std::string, InputTypeNonConst>& elements) + { + Path p; + return readDict(input, elements, p); + } + + void readNDArray(InputType& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data) + { + Path p; + return readNDArray(input, shape, typeAsString, data, p); + } + + void readInt(InputType& input, int& i) + { + Path p; + return readInt(input, i, p); + } + + void readLong(InputType& input, long& i) + { + Path p; + return readLong(input, i, p); + } + + void readFloat(InputType& input, float& i) + { + Path p; + return readFloat(input, i, p); + } + + void readDouble(InputType& input, double& i) + { + Path p; + return readDouble(input, i, p); + } + + void readString(InputType& input, std::string& s) + { + Path p; + return readString(input, s, p); + } + + void readBool(InputType& input, bool& i) + { + Path p; + return readBool(input, i, p); + } + void readPrimitive(InputType& input, int& i) { return readInt(input, i); @@ -88,6 +174,8 @@ namespace armarx::aron::data { return readBool(input, i); } + + }; template <class T> diff --git a/source/RobotAPI/libraries/aron/core/data/rw/Writer.h b/source/RobotAPI/libraries/aron/core/data/rw/Writer.h index f75438b52bc186389fb0b541a8c166ff27aa57f4..42a363b3d2c8f756585251c5c8098fe02bdfa1bf 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/Writer.h +++ b/source/RobotAPI/libraries/aron/core/data/rw/Writer.h @@ -50,7 +50,7 @@ namespace armarx::aron::data virtual ReturnType writeString(const std::string& i, const Path& p) = 0; virtual ReturnType writeBool(const bool i, const Path& p) = 0; - virtual ReturnType writeNull(const Path& p = Path()) // defaulted implementation + virtual ReturnType writeNull() // defaulted implementation { return {}; } diff --git a/source/RobotAPI/libraries/aron/core/data/rw/json/Data.h b/source/RobotAPI/libraries/aron/core/data/rw/json/Data.h index b26eeff05139b1016db34ff5d452bc4c5cb7852a..0506a13262efc971870fc444ba3b40dd18a4d5f3 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/json/Data.h +++ b/source/RobotAPI/libraries/aron/core/data/rw/json/Data.h @@ -32,6 +32,7 @@ namespace armarx::aron::data::rw::json namespace constantes { const std::string TYPE_SLUG = "_ARON_TYPE"; + const std::string PATH_SLUG = "_ARON_PATH"; const std::string VERSION_SLUG = "_ARON_VERSION"; const std::string KEY_SLUG = "_ARON_KEY"; diff --git a/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp b/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp index 9719e0e35b1d4a040356eaf309f464ae44a01816..cece44b58ab1bfaf1f24d6a95c95b545d43363aa 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp +++ b/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp @@ -36,68 +36,73 @@ namespace armarx::aron::data::reader namespace { /// Throw an exception if the type is other than expected - void checkInputForCorrectType(const nlohmann::json& input, const std::string& expectedType) + void getAronMetaInformationForType(const nlohmann::json& input, const std::string& expectedType, Path& p) { + // check type if (input[rw::json::constantes::TYPE_SLUG] != expectedType) { throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Wrong type in json encountered.", input[rw::json::constantes::TYPE_SLUG], expectedType); } + + // set path + std::vector<std::string> pathElements = input[rw::json::constantes::PATH_SLUG]; + p = Path(pathElements); } } - void NlohmannJSONReader::readList(const nlohmann::json& input, std::vector<nlohmann::json>& elements) + void NlohmannJSONReader::readList(const nlohmann::json& input, std::vector<nlohmann::json>& elements, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::LIST_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::LIST_TYPENAME_SLUG, p); elements = input[rw::json::constantes::ELEMENTS_SLUG].get<std::vector<nlohmann::json>>(); } - void NlohmannJSONReader::readDict(const nlohmann::json& input, std::map<std::string, nlohmann::json>& elements) + void NlohmannJSONReader::readDict(const nlohmann::json& input, std::map<std::string, nlohmann::json>& elements, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::DICT_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::DICT_TYPENAME_SLUG, p); elements = input[rw::json::constantes::ELEMENTS_SLUG].get<std::map<std::string, nlohmann::json>>(); } - void NlohmannJSONReader::readNDArray(const nlohmann::json& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data) + void NlohmannJSONReader::readNDArray(const nlohmann::json& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::NDARRAY_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::NDARRAY_TYPENAME_SLUG, p); shape = input[rw::json::constantes::DIMENSIONS_SLUG].get<std::vector<int>>(); typeAsString = input[rw::json::constantes::USED_TYPE_SLUG]; data = input[rw::json::constantes::DATA_SLUG].get<std::vector<unsigned char>>(); } - void NlohmannJSONReader::readInt(const nlohmann::json& input, int& i) + void NlohmannJSONReader::readInt(const nlohmann::json& input, int& i, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::INT_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::INT_TYPENAME_SLUG, p); i = input[rw::json::constantes::VALUE_SLUG]; } - void NlohmannJSONReader::readLong(const nlohmann::json& input, long& i) + void NlohmannJSONReader::readLong(const nlohmann::json& input, long& i, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::LONG_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::LONG_TYPENAME_SLUG, p); i = input[rw::json::constantes::VALUE_SLUG]; } - void NlohmannJSONReader::readFloat(const nlohmann::json& input, float& i) + void NlohmannJSONReader::readFloat(const nlohmann::json& input, float& i, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::FLOAT_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::FLOAT_TYPENAME_SLUG, p); i = input[rw::json::constantes::VALUE_SLUG]; } - void NlohmannJSONReader::readDouble(const nlohmann::json& input, double& i) + void NlohmannJSONReader::readDouble(const nlohmann::json& input, double& i, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::DOUBLE_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::DOUBLE_TYPENAME_SLUG, p); i = input[rw::json::constantes::VALUE_SLUG]; } - void NlohmannJSONReader::readString(const nlohmann::json& input, std::string& i) + void NlohmannJSONReader::readString(const nlohmann::json& input, std::string& i, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::STRING_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::STRING_TYPENAME_SLUG, p); i = input[rw::json::constantes::VALUE_SLUG]; } - void NlohmannJSONReader::readBool(const nlohmann::json& input, bool& i) + void NlohmannJSONReader::readBool(const nlohmann::json& input, bool& i, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::BOOL_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::BOOL_TYPENAME_SLUG, p); i = input[rw::json::constantes::VALUE_SLUG]; } } diff --git a/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReader.h b/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReader.h index 53b1c360b1149237c1497f186750b831210e590b..575dee835eb3e1f8842e3bcd20dba30a675921a3 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReader.h +++ b/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReader.h @@ -33,22 +33,22 @@ namespace armarx::aron::data::reader { class NlohmannJSONReader : - virtual public ReaderInterface<const nlohmann::json> + public ReaderInterface<const nlohmann::json> { public: // constructors NlohmannJSONReader() = default; - virtual void readList(const nlohmann::json& input, std::vector<nlohmann::json>& elements) override; - virtual void readDict(const nlohmann::json& input, std::map<std::string, nlohmann::json>& elements) override; + void readList(InputType& input, std::vector<InputTypeNonConst>& elements, Path& p) override; + void readDict(InputType& input, std::map<std::string, InputTypeNonConst>& elements, Path& p) override; - virtual void readNDArray(const nlohmann::json& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data) override; + void readNDArray(InputType& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data, Path& p) override; - virtual void readInt(const nlohmann::json& input, int& i) override; - virtual void readLong(const nlohmann::json& input, long& i) override; - virtual void readFloat(const nlohmann::json& input, float& i) override; - virtual void readDouble(const nlohmann::json& input, double& i) override; - virtual void readString(const nlohmann::json& input, std::string& s) override; - virtual void readBool(const nlohmann::json& input, bool& i) override; + void readInt(InputType& input, int& i, Path& p) override; + void readLong(InputType& input, long& i, Path& p) override; + void readFloat(InputType& input, float& i, Path& p) override; + void readDouble(InputType& input, double& i, Path& p) override; + void readString(InputType& input, std::string& s, Path& p) override; + void readBool(InputType& input, bool& i, Path& p) override; }; } diff --git a/source/RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.cpp b/source/RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.cpp index cb1f3cbec377ee2da4564f1cc1030294d1164876..2eaea65364239a216ca92e1e06266bf3588e8cd1 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.cpp +++ b/source/RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.cpp @@ -33,59 +33,77 @@ namespace armarx::aron::data::reader { - void VariantReader::readList(const data::VariantPtr& input, std::vector<data::VariantPtr>& elements) + void VariantReader::readList(const data::VariantPtr& input, std::vector<data::VariantPtr>& elements, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = data::List::DynamicCastAndCheck(input); elements = o->getElements(); + p = o->getPath(); } - void VariantReader::readDict(const data::VariantPtr& input, std::map<std::string, data::VariantPtr>& elements) + void VariantReader::readDict(const data::VariantPtr& input, std::map<std::string, data::VariantPtr>& elements, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = data::Dict::DynamicCastAndCheck(input); elements = o->getElements(); + p = o->getPath(); } - void VariantReader::readNDArray(const data::VariantPtr& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data) + void VariantReader::readNDArray(const data::VariantPtr& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = data::NDArray::DynamicCastAndCheck(input); shape = o->getShape(); typeAsString = o->getType(); data = o->getDataAsVector(); + p = o->getPath(); } - void VariantReader::readInt(const data::VariantPtr& input, int& i) + void VariantReader::readInt(const data::VariantPtr& input, int& i, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = data::Int::DynamicCastAndCheck(input); i = o->getValue(); + p = o->getPath(); } - void VariantReader::readLong(const data::VariantPtr& input, long& i) + void VariantReader::readLong(const data::VariantPtr& input, long& i, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = data::Long::DynamicCastAndCheck(input); i = o->getValue(); + p = o->getPath(); } - void VariantReader::readFloat(const data::VariantPtr& input, float& i) + void VariantReader::readFloat(const data::VariantPtr& input, float& i, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = data::Float::DynamicCastAndCheck(input); i = o->getValue(); + p = o->getPath(); } - void VariantReader::readDouble(const data::VariantPtr& input, double& i) + void VariantReader::readDouble(const data::VariantPtr& input, double& i, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = data::Double::DynamicCastAndCheck(input); i = o->getValue(); + p = o->getPath(); } - void VariantReader::readString(const data::VariantPtr& input, std::string& i) + void VariantReader::readString(const data::VariantPtr& input, std::string& i, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = data::String::DynamicCastAndCheck(input); i = o->getValue(); + p = o->getPath(); } - void VariantReader::readBool(const data::VariantPtr& input, bool& i) + void VariantReader::readBool(const data::VariantPtr& input, bool& i, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = data::Bool::DynamicCastAndCheck(input); i = o->getValue(); + p = o->getPath(); } } diff --git a/source/RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h b/source/RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h index 33a1a5258e10848aab2fa37a4f71f88a4a57bfb7..14d2b40b363e50e6dbbeca2c8289037996e7f92c 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h +++ b/source/RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h @@ -34,22 +34,22 @@ namespace armarx::aron::data::reader { class VariantReader : - virtual public ReaderInterface<const data::VariantPtr> + public ReaderInterface<const data::VariantPtr> { public: // constructors VariantReader() = default; - virtual void readList(const data::VariantPtr& input, std::vector<data::VariantPtr>& elements) override; - virtual void readDict(const data::VariantPtr& input, std::map<std::string, data::VariantPtr>& elements) override; + void readList(InputType& input, std::vector<InputTypeNonConst>& elements, Path& p) override; + void readDict(InputType& input, std::map<std::string, InputTypeNonConst>& elements, Path& p) override; - virtual void readNDArray(const data::VariantPtr& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data) override; + void readNDArray(InputType& input, std::vector<int>& shape, std::string& typeAsString, std::vector<unsigned char>& data, Path& p) override; - virtual void readInt(const data::VariantPtr& input, int& i) override; - virtual void readLong(const data::VariantPtr& input, long& i) override; - virtual void readFloat(const data::VariantPtr& input, float& i) override; - virtual void readDouble(const data::VariantPtr& input, double& i) override; - virtual void readString(const data::VariantPtr& input, std::string& s) override; - virtual void readBool(const data::VariantPtr& input, bool& i) override; + void readInt(InputType& input, int& i, Path& p) override; + void readLong(InputType& input, long& i, Path& p) override; + void readFloat(InputType& input, float& i, Path& p) override; + void readDouble(InputType& input, double& i, Path& p) override; + void readString(InputType& input, std::string& s, Path& p) override; + void readBool(InputType& input, bool& i, Path& p) override; }; } diff --git a/source/RobotAPI/libraries/aron/core/data/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp b/source/RobotAPI/libraries/aron/core/data/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp index bfd75e274daafc4cf52ea733d7f594b359234f5e..55b7a5e32f5cba4032a34ae6c1b82c0dd7421d8a 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp +++ b/source/RobotAPI/libraries/aron/core/data/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp @@ -34,33 +34,34 @@ namespace armarx::aron::data::writer namespace { /// Set important members for json object (aron meta information) - void setupAronInformationForType(nlohmann::json& json, const std::string& type) + void setupAronMetaInformationForType(nlohmann::json& json, const std::string& type, const Path& p) { json[rw::json::constantes::TYPE_SLUG] = type; + json[rw::json::constantes::PATH_SLUG] = p.getPath(); } } - nlohmann::json NlohmannJSONWriter::writeList(const std::vector<nlohmann::json>& elements, const Path&) + nlohmann::json NlohmannJSONWriter::writeList(const std::vector<nlohmann::json>& elements, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::LIST_TYPENAME_SLUG); + setupAronMetaInformationForType(o, rw::json::constantes::LIST_TYPENAME_SLUG, p); o[rw::json::constantes::ELEMENTS_SLUG] = elements; return o; } - nlohmann::json NlohmannJSONWriter::writeDict(const std::map<std::string, nlohmann::json>& elements, const std::optional<nlohmann::json>& extends, const Path&) + nlohmann::json NlohmannJSONWriter::writeDict(const std::map<std::string, nlohmann::json>& elements, const std::optional<nlohmann::json>& extends, const Path& p) { auto o = extends ? extends.value() : nlohmann::json(); - setupAronInformationForType(o, rw::json::constantes::DICT_TYPENAME_SLUG); + setupAronMetaInformationForType(o, rw::json::constantes::DICT_TYPENAME_SLUG, p); o[rw::json::constantes::ELEMENTS_SLUG] = elements; return o; } - nlohmann::json NlohmannJSONWriter::writeNDArray(const std::vector<int>& shape, const std::string& typeAsString, const unsigned char* data, const Path&) + nlohmann::json NlohmannJSONWriter::writeNDArray(const std::vector<int>& shape, const std::string& typeAsString, const unsigned char* data, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::NDARRAY_TYPENAME_SLUG); + setupAronMetaInformationForType(o, rw::json::constantes::NDARRAY_TYPENAME_SLUG, p); o[rw::json::constantes::DIMENSIONS_SLUG] = shape; o[rw::json::constantes::USED_TYPE_SLUG] = typeAsString; @@ -71,50 +72,50 @@ namespace armarx::aron::data::writer return o; } - nlohmann::json NlohmannJSONWriter::writeInt(const int i, const Path&) + nlohmann::json NlohmannJSONWriter::writeInt(const int i, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::INT_TYPENAME_SLUG); + setupAronMetaInformationForType(o, rw::json::constantes::INT_TYPENAME_SLUG, p); o[rw::json::constantes::VALUE_SLUG] = i; return o; } - nlohmann::json NlohmannJSONWriter::writeLong(const long i, const Path&) + nlohmann::json NlohmannJSONWriter::writeLong(const long i, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::LONG_TYPENAME_SLUG); + setupAronMetaInformationForType(o, rw::json::constantes::LONG_TYPENAME_SLUG, p); o[rw::json::constantes::VALUE_SLUG] = i; return o; } - nlohmann::json NlohmannJSONWriter::writeFloat(const float i, const Path&) + nlohmann::json NlohmannJSONWriter::writeFloat(const float i, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::FLOAT_TYPENAME_SLUG); + setupAronMetaInformationForType(o, rw::json::constantes::FLOAT_TYPENAME_SLUG, p); o[rw::json::constantes::VALUE_SLUG] = i; return o; } - nlohmann::json NlohmannJSONWriter::writeDouble(const double i, const Path&) + nlohmann::json NlohmannJSONWriter::writeDouble(const double i, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::DOUBLE_TYPENAME_SLUG); + setupAronMetaInformationForType(o, rw::json::constantes::DOUBLE_TYPENAME_SLUG, p); o[rw::json::constantes::VALUE_SLUG] = i; return o; } - nlohmann::json NlohmannJSONWriter::writeString(const std::string& i, const Path&) + nlohmann::json NlohmannJSONWriter::writeString(const std::string& i, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::STRING_TYPENAME_SLUG); + setupAronMetaInformationForType(o, rw::json::constantes::STRING_TYPENAME_SLUG, p); o[rw::json::constantes::VALUE_SLUG] = i; return o; } - nlohmann::json NlohmannJSONWriter::writeBool(const bool i, const Path&) + nlohmann::json NlohmannJSONWriter::writeBool(const bool i, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::BOOL_TYPENAME_SLUG); + setupAronMetaInformationForType(o, rw::json::constantes::BOOL_TYPENAME_SLUG, p); o[rw::json::constantes::VALUE_SLUG] = i; return o; } diff --git a/source/RobotAPI/libraries/aron/core/type/converter/Converter.h b/source/RobotAPI/libraries/aron/core/type/converter/Converter.h index a983de6289bbb221ef350409918505fb6cc9ab8c..cc7ab4a23cad0b36b5410b8e66e0c183e9f4242e 100644 --- a/source/RobotAPI/libraries/aron/core/type/converter/Converter.h +++ b/source/RobotAPI/libraries/aron/core/type/converter/Converter.h @@ -66,36 +66,39 @@ namespace armarx::aron::type std::string name; type::Maybe maybe; std::map<std::string, WriterReturnType> elementsReturn; - r.readObject(o, name, elementsOfInput, maybe); + Path p; + r.readObject(o, name, elementsOfInput, maybe, p); for (const auto& [key, value] : elementsOfInput) { auto converted = readAndWrite<DerivedT>(value); elementsReturn.insert({key, converted}); } - last_returned = w.writeObject(name, maybe, elementsReturn); + last_returned = w.writeObject(name, elementsReturn, std::nullopt, maybe, p); } void visitDict(ReaderInputType& o) final { ReaderInputTypeNonConst acceptedType; type::Maybe maybe; - r.readDict(o, acceptedType, maybe); + Path p; + r.readDict(o, acceptedType, maybe, p); auto converted = readAndWrite<DerivedT>(acceptedType); - last_returned = w.writeDict(maybe, converted); + last_returned = w.writeDict(converted, maybe, p); }; void visitList(ReaderInputType& o) final { ReaderInputTypeNonConst acceptedType; type::Maybe maybe; - r.readList(o, acceptedType, maybe); + Path p; + r.readList(o, acceptedType, maybe, p); auto converted = readAndWrite<DerivedT>(acceptedType); - last_returned = w.writeList(maybe, converted); + last_returned = w.writeList(converted, maybe, p); }; void visitPair(ReaderInputType& o) final @@ -103,12 +106,13 @@ namespace armarx::aron::type ReaderInputTypeNonConst acceptedType1; ReaderInputTypeNonConst acceptedType2; type::Maybe maybe; - r.readPair(o, acceptedType1, acceptedType2, maybe); + Path p; + r.readPair(o, acceptedType1, acceptedType2, maybe, p); auto converted1 = readAndWrite<DerivedT>(acceptedType1); auto converted2 = readAndWrite<DerivedT>(acceptedType2); - last_returned = w.writePair(maybe, converted1, converted2); + last_returned = w.writePair(converted1, converted2, maybe, p); }; void visitTuple(ReaderInputType& o) final @@ -116,7 +120,8 @@ namespace armarx::aron::type std::vector<ReaderInputTypeNonConst> acceptedTypes; std::vector<WriterReturnType> elementsReturn; type::Maybe maybe; - r.readTuple(o, acceptedTypes, maybe); + Path p; + r.readTuple(o, acceptedTypes, maybe, p); for (const auto& el : acceptedTypes) { @@ -124,7 +129,7 @@ namespace armarx::aron::type elementsReturn.push_back(converted); } - last_returned = w.writeTuple(maybe, elementsReturn); + last_returned = w.writeTuple(elementsReturn, maybe, p); }; void visitNDArray(ReaderInputType& o) final @@ -132,8 +137,9 @@ namespace armarx::aron::type type::Maybe maybe; type::ndarray::ElementType type; int ndim; - r.readNDArray(o, ndim, type, maybe); - last_returned = w.writeNDArray(ndim, type, maybe); + Path p; + r.readNDArray(o, ndim, type, maybe, p); + last_returned = w.writeNDArray(ndim, type, maybe, p); }; void visitMatrix(ReaderInputType& o) final @@ -142,53 +148,60 @@ namespace armarx::aron::type type::matrix::ElementType type; int rows; int cols; - r.readMatrix(o, rows, cols, type, maybe); - last_returned = w.writeMatrix(rows, cols, type, maybe); + Path p; + r.readMatrix(o, rows, cols, type, maybe, p); + last_returned = w.writeMatrix(rows, cols, type, maybe, p); }; void visitOrientation(ReaderInputType& o) final { type::Maybe maybe; - r.readOrientation(o, maybe); - last_returned = w.writeOrientation(maybe); + Path p; + r.readOrientation(o, maybe, p); + last_returned = w.writeOrientation(maybe, p); }; void visitQuaternion(ReaderInputType& o) final { type::Maybe maybe; type::quaternion::ElementType type; - r.readQuaternion(o, type, maybe); - last_returned = w.writeQuaternion(type, maybe); + Path p; + r.readQuaternion(o, type, maybe, p); + last_returned = w.writeQuaternion(type, maybe, p); }; void visitPosition(ReaderInputType& o) final { type::Maybe maybe; - r.readPosition(o, maybe); - last_returned = w.writePosition(maybe); + Path p; + r.readPosition(o, maybe, p); + last_returned = w.writePosition(maybe, p); }; void visitPose(ReaderInputType& o) final { type::Maybe maybe; - r.readPose(o, maybe); - last_returned = w.writePose(maybe); + Path p; + r.readPose(o, maybe, p); + last_returned = w.writePose(maybe, p); }; void visitImage(ReaderInputType& o) final { type::Maybe maybe; type::image::PixelType type; - r.readImage(o, type, maybe); - last_returned = w.writeImage(type, maybe); + Path p; + r.readImage(o, type, maybe, p); + last_returned = w.writeImage(type, maybe, p); }; void visitPointCloud(ReaderInputType& o) final { type::Maybe maybe; type::pointcloud::VoxelType type; - r.readPointCloud(o, type, maybe); - last_returned = w.writePointCloud(type, maybe); + Path p; + r.readPointCloud(o, type, maybe, p); + last_returned = w.writePointCloud(type, maybe, p); }; void visitIntEnum(ReaderInputType& o) final @@ -196,57 +209,65 @@ namespace armarx::aron::type type::Maybe maybe; std::string name; std::map<std::string, int> values; - r.readIntEnum(o, name, values, maybe); - last_returned = w.writeIntEnum(name, values, maybe); + Path p; + r.readIntEnum(o, name, values, maybe, p); + last_returned = w.writeIntEnum(name, values, maybe, p); }; void visitInt(ReaderInputType& o) final { type::Maybe maybe; - r.readInt(o, maybe); - last_returned = w.writeInt(maybe); + Path p; + r.readInt(o, maybe, p); + last_returned = w.writeInt(maybe, p); }; void visitLong(ReaderInputType& o) final { type::Maybe maybe; - r.readLong(o, maybe); - last_returned = w.writeLong(maybe); + Path p; + r.readLong(o, maybe, p); + last_returned = w.writeLong(maybe, p); }; void visitFloat(ReaderInputType& o) final { type::Maybe maybe; - r.readFloat(o, maybe); - last_returned = w.writeFloat(maybe); + Path p; + r.readFloat(o, maybe, p); + last_returned = w.writeFloat(maybe, p); }; void visitDouble(ReaderInputType& o) final { type::Maybe maybe; - r.readDouble(o, maybe); - last_returned = w.writeDouble(maybe); + Path p; + r.readDouble(o, maybe, p); + last_returned = w.writeDouble(maybe, p); }; void visitBool(ReaderInputType& o) final { type::Maybe maybe; - r.readBool(o, maybe); - last_returned = w.writeBool(maybe); + Path p; + r.readBool(o, maybe, p); + last_returned = w.writeBool(maybe, p); }; void visitString(ReaderInputType& o) final { type::Maybe maybe; - r.readString(o, maybe); - last_returned = w.writeString(maybe); + Path p; + r.readString(o, maybe, p); + last_returned = w.writeString(maybe, p); }; void visitTime(ReaderInputType& o) final { type::Maybe maybe; - r.readTime(o, maybe); - last_returned = w.writeTime(maybe); + Path p; + r.readTime(o, maybe, p); + last_returned = w.writeTime(maybe, p); }; }; diff --git a/source/RobotAPI/libraries/aron/core/type/rw/Reader.h b/source/RobotAPI/libraries/aron/core/type/rw/Reader.h index 61d457807cc01809fd65d1cbac034b36e3f8a958..53c0ae381098b782fa59c8a801b572f79d6b9eba 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/Reader.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/Reader.h @@ -44,67 +44,67 @@ namespace armarx::aron::type virtual ~ReaderInterface() = default; /// Extract information from an Object type - virtual void readObject(const InputType& input, std::string& name, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe) = 0; + virtual void readObject(const InputType& input, std::string& name, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe, Path& p) = 0; /// Extract information from a list type - virtual void readList(const InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe) = 0; + virtual void readList(const InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) = 0; /// Extract information from a dict type - virtual void readDict(const InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe) = 0; + virtual void readDict(const InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) = 0; /// Extract information from a tuple type - virtual void readTuple(const InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe) = 0; + virtual void readTuple(const InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe, Path& p) = 0; /// Extract information from a pair type - virtual void readPair(const InputType& input, InputTypeNonConst& acceptedTypes1, InputTypeNonConst& acceptedTypes2, type::Maybe& maybe) = 0; + virtual void readPair(const InputType& input, InputTypeNonConst& acceptedTypes1, InputTypeNonConst& acceptedTypes2, type::Maybe& maybe, Path& p) = 0; /// Extract information from a ndarray type - virtual void readNDArray(const InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe) = 0; + virtual void readNDArray(const InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe, Path& p) = 0; /// Extract information from a matrix type - virtual void readMatrix(const InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe) = 0; + virtual void readMatrix(const InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe, Path& p) = 0; /// Extract information from a quaternion type - virtual void readQuaternion(const InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe) = 0; + virtual void readQuaternion(const InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe, Path& p) = 0; /// Extract information from a pointcloud type - virtual void readPointCloud(const InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe) = 0; + virtual void readPointCloud(const InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe, Path& p) = 0; /// Extract information from an image type - virtual void readImage(const InputType& input, type::image::PixelType& type, type::Maybe& maybe) = 0; + virtual void readImage(const InputType& input, type::image::PixelType& type, type::Maybe& maybe, Path& p) = 0; /// Extract information from a position type - virtual void readPosition(const InputType& input, type::Maybe& maybe) = 0; + virtual void readPosition(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Extract information from an orientation type - virtual void readOrientation(const InputType& input, type::Maybe& maybe) = 0; + virtual void readOrientation(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Extract information from a pose type - virtual void readPose(const InputType& input, type::Maybe& maybe) = 0; + virtual void readPose(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Extract information from an int enum type - virtual void readIntEnum(const InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe) = 0; + virtual void readIntEnum(const InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe, Path& p) = 0; /// Extract information from an int type - virtual void readInt(const InputType& input, type::Maybe& maybe) = 0; + virtual void readInt(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Extract information from an long type - virtual void readLong(const InputType& input, type::Maybe& maybe) = 0; + virtual void readLong(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Extract information from an float type - virtual void readFloat(const InputType& input, type::Maybe& maybe) = 0; + virtual void readFloat(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Extract information from an double type - virtual void readDouble(const InputType& input, type::Maybe& maybe) = 0; + virtual void readDouble(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Extract information from an string type - virtual void readString(const InputType& input, type::Maybe& maybe) = 0; + virtual void readString(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Extract information from an bool type - virtual void readBool(const InputType& input, type::Maybe& maybe) = 0; + virtual void readBool(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Extract information from an time type - virtual void readTime(const InputType& input, type::Maybe& maybe) = 0; + virtual void readTime(const InputType& input, type::Maybe& maybe, Path& p) = 0; /// Check if input is null virtual bool readNull(InputType& input) // defaulted implementation @@ -112,6 +112,133 @@ namespace armarx::aron::type InputType nil = {}; return input == nil; } + + // Convenience methods without path + void readObject(const InputType& input, std::string& name, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe) + { + Path p; + return readObject(input, name, memberTypes, maybe, p); + } + + void readList(const InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe) + { + Path p; + return readList(input, acceptedType, maybe, p); + } + + void readDict(const InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe) + { + Path p; + return readDict(input, acceptedType, maybe, p); + } + + void readTuple(const InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe) + { + Path p; + return readTuple(input, acceptedTypes, maybe, p); + } + + void readPair(const InputType& input, InputTypeNonConst& acceptedTypes1, InputTypeNonConst& acceptedTypes2, type::Maybe& maybe) + { + Path p; + return readPair(input, acceptedTypes1, acceptedTypes2, maybe, p); + } + + void readNDArray(const InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe) + { + Path p; + return readNDArray(input, ndim, type, maybe, p); + } + + void readMatrix(const InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe) + { + Path p; + return readMatrix(input, rows, cols, type, maybe, p); + } + + void readQuaternion(const InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe) + { + Path p; + return readQuaternion(input, type, maybe, p); + } + + void readPointCloud(const InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe) + { + Path p; + return readPointCloud(input, type, maybe, p); + } + + void readImage(const InputType& input, type::image::PixelType& type, type::Maybe& maybe) + { + Path p; + return readImage(input, type, maybe, p); + } + + void readPosition(const InputType& input, type::Maybe& maybe) + { + Path p; + return readPosition(input, maybe, p); + } + + void readOrientation(const InputType& input, type::Maybe& maybe) + { + Path p; + return readOrientation(input, maybe, p); + } + + void readPose(const InputType& input, type::Maybe& maybe) + { + Path p; + return readPose(input, maybe, p); + } + + void readIntEnum(const InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe) + { + Path p; + return readIntEnum(input, name, acceptedValues, maybe, p); + } + + void readInt(const InputType& input, type::Maybe& maybe) + { + Path p; + return readInt(input, maybe, p); + } + + void readLong(const InputType& input, type::Maybe& maybe) + { + Path p; + return readLong(input, maybe, p); + } + + void readFloat(const InputType& input, type::Maybe& maybe) + { + Path p; + return readFloat(input, maybe, p); + } + + void readDouble(const InputType& input, type::Maybe& maybe) + { + Path p; + return readDouble(input, maybe, p); + } + + void readString(const InputType& input, type::Maybe& maybe) + { + Path p; + return readString(input, maybe, p); + } + + void readBool(const InputType& input, type::Maybe& maybe) + { + Path p; + return readBool(input, maybe, p); + } + + void readTime(const InputType& input, type::Maybe& maybe) + { + Path p; + return readTime(input, maybe, p); + } }; template <class T> diff --git a/source/RobotAPI/libraries/aron/core/type/rw/Writer.h b/source/RobotAPI/libraries/aron/core/type/rw/Writer.h index 256aba2d3ccb11127783d8134bf64ea166aa834d..ae4796a9f8b6c74ebd0320df322eb4099728c028 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/Writer.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/Writer.h @@ -43,71 +43,72 @@ namespace armarx::aron::type virtual ~WriterInterface() = default; /// Construct an object from the params - virtual ReturnType writeObject(const std::string& name, const type::Maybe maybe, const std::map<std::string, ReturnType>& memberTypes, const std::optional<ReturnType>& extends) = 0; + virtual ReturnType writeObject(const std::string& name, const std::map<std::string, ReturnType>& memberTypes, const std::optional<ReturnType>& extends, const type::Maybe maybe, const Path& p) = 0; /// Construct a list from the params - virtual ReturnType writeList(const type::Maybe maybe, const ReturnType& acceptedType) = 0; + virtual ReturnType writeList(const ReturnType& acceptedType, const type::Maybe maybe, const Path& p) = 0; /// Construct a dict from the params - virtual ReturnType writeDict(const type::Maybe maybe, const ReturnType& acceptedType) = 0; + virtual ReturnType writeDict(const ReturnType& acceptedType, const type::Maybe maybe, const Path& p) = 0; /// Construct a pair from the params - virtual ReturnType writePair(const type::Maybe maybe, const ReturnType& acceptedType1, const ReturnType& acceptedType2) = 0; + virtual ReturnType writePair(const ReturnType& acceptedType1, const ReturnType& acceptedType2, const type::Maybe maybe, const Path& p) = 0; /// Construct a tuple from the params - virtual ReturnType writeTuple(const type::Maybe maybe, const std::vector<ReturnType>& acceptedTypes) = 0; + virtual ReturnType writeTuple(const std::vector<ReturnType>& acceptedTypes, const type::Maybe maybe, const Path& p) = 0; /// Construct a ndarray from the params - virtual ReturnType writeNDArray(const int ndim, const type::ndarray::ElementType, const type::Maybe maybe) = 0; + virtual ReturnType writeNDArray(const int ndim, const type::ndarray::ElementType, const type::Maybe maybe, const Path& p) = 0; /// Construct a matrix from the params - virtual ReturnType writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe) = 0; + virtual ReturnType writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe, const Path& p) = 0; /// Construct a quaternion from the params - virtual ReturnType writeQuaternion(const type::quaternion::ElementType, const type::Maybe maybe) = 0; + virtual ReturnType writeQuaternion(const type::quaternion::ElementType, const type::Maybe maybe, const Path& p) = 0; /// Construct a image from the params - virtual ReturnType writeImage(const type::image::PixelType, const type::Maybe maybe) = 0; + virtual ReturnType writeImage(const type::image::PixelType, const type::Maybe maybe, const Path& p) = 0; /// Construct a pointcloud from the params - virtual ReturnType writePointCloud(const type::pointcloud::VoxelType, const type::Maybe maybe) = 0; + virtual ReturnType writePointCloud(const type::pointcloud::VoxelType, const type::Maybe maybe, const Path& p) = 0; /// Construct a position from the params - virtual ReturnType writePosition(const type::Maybe maybe) = 0; + virtual ReturnType writePosition(const type::Maybe maybe, const Path& p) = 0; /// Construct a orientation from the params - virtual ReturnType writeOrientation(const type::Maybe maybe) = 0; + virtual ReturnType writeOrientation(const type::Maybe maybe, const Path& p) = 0; /// Construct a pose from the params - virtual ReturnType writePose(const type::Maybe maybe) = 0; + virtual ReturnType writePose(const type::Maybe maybe, const Path& p) = 0; /// Construct a int enum from the params - virtual ReturnType writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe) = 0; + virtual ReturnType writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe, const Path& p) = 0; /// Construct a int from the params - virtual ReturnType writeInt(const type::Maybe maybe) = 0; + virtual ReturnType writeInt(const type::Maybe maybe, const Path& p) = 0; /// Construct a long from the params - virtual ReturnType writeLong(const type::Maybe maybe) = 0; + virtual ReturnType writeLong(const type::Maybe maybe, const Path& p) = 0; /// Construct a float from the params - virtual ReturnType writeFloat(const type::Maybe maybe) = 0; + virtual ReturnType writeFloat(const type::Maybe maybe, const Path& p) = 0; /// Construct a double from the params - virtual ReturnType writeDouble(const type::Maybe maybe) = 0; + virtual ReturnType writeDouble(const type::Maybe maybe, const Path& p) = 0; /// Construct a string from the params - virtual ReturnType writeString(const type::Maybe maybe) = 0; + virtual ReturnType writeString(const type::Maybe maybe, const Path& p) = 0; /// Construct a bool from the params - virtual ReturnType writeBool(const type::Maybe maybe) = 0; + virtual ReturnType writeBool(const type::Maybe maybe, const Path& p) = 0; /// Construct a time from the params - virtual ReturnType writeTime(const type::Maybe maybe) = 0; + virtual ReturnType writeTime(const type::Maybe maybe, const Path& p) = 0; /// write a null - virtual ReturnType writeNull() // defaulted implementation + virtual ReturnType writeNull(const Path& p = Path()) // defaulted implementation { + (void) p; return {}; } }; diff --git a/source/RobotAPI/libraries/aron/core/type/rw/json/Data.h b/source/RobotAPI/libraries/aron/core/type/rw/json/Data.h index b4e84415be729077b554d5d26a47734f8d758300..fbaff7c102faa1a636e81fb36d35cafa19fa8a86 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/json/Data.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/json/Data.h @@ -36,6 +36,7 @@ namespace armarx::aron::type::rw::json { const std::string MAYBE_SLUG = "_ARON_MAYBE"; const std::string TYPE_SLUG = "_ARON_TYPE"; + const std::string PATH_SLUG = "_ARON_PATH"; const std::string VERSION_SLUG = "_ARON_VERSION"; const std::string KEY_SLUG = "_ARON_KEY"; diff --git a/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp b/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp index eefe1e62e1ca93ecc6fa5069bb054640a71813e0..2ae071ed8e433076946b37d9d9bd2bdc403d9dbf 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp +++ b/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp @@ -34,51 +34,55 @@ namespace armarx::aron::type::reader namespace { /// Throw an exception if the type is other than expected - void checkInputForCorrectType(const nlohmann::json& input, const std::string& expectedType) + void getAronMetaInformationForType(const nlohmann::json& input, const std::string& expectedType, Path& p) { if (input[rw::json::constantes::TYPE_SLUG] != expectedType) { throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Wrong type in json encountered.", input[rw::json::constantes::TYPE_SLUG], expectedType); } + + // get Path + std::vector<std::string> pathElements = input[rw::json::constantes::PATH_SLUG]; + p = Path(pathElements); } } - void NlohmannJSONReader::readObject(const nlohmann::json& input, std::string& name, std::map<std::string, nlohmann::json>& memberTypes, type::Maybe& maybe) + void NlohmannJSONReader::readObject(const nlohmann::json& input, std::string& name, std::map<std::string, nlohmann::json>& memberTypes, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::OBJECT_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::OBJECT_TYPENAME_SLUG, p); name = input[rw::json::constantes::NAME_SLUG]; maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); memberTypes = input[rw::json::constantes::MEMBERS_SLUG].get<std::map<std::string, nlohmann::json>>(); } - void NlohmannJSONReader::readList(const nlohmann::json& input, nlohmann::json& acceptedType, type::Maybe& maybe) + void NlohmannJSONReader::readList(const nlohmann::json& input, nlohmann::json& acceptedType, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::LIST_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::LIST_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); acceptedType = input[rw::json::constantes::ACCEPTED_TYPE_SLUG]; } - void NlohmannJSONReader::readDict(const nlohmann::json& input, nlohmann::json& acceptedType, type::Maybe& maybe) + void NlohmannJSONReader::readDict(const nlohmann::json& input, nlohmann::json& acceptedType, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::DICT_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::DICT_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); acceptedType = input[rw::json::constantes::ACCEPTED_TYPE_SLUG]; } - void NlohmannJSONReader::readTuple(const nlohmann::json& input, std::vector<nlohmann::json>& acceptedTypes, type::Maybe& maybe) + void NlohmannJSONReader::readTuple(const nlohmann::json& input, std::vector<nlohmann::json>& acceptedTypes, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::TUPLE_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::TUPLE_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); acceptedTypes = input[rw::json::constantes::ACCEPTED_TYPE_SLUG].get<std::vector<nlohmann::json>>(); } - void NlohmannJSONReader::readPair(const nlohmann::json& input, nlohmann::json& acceptedType1, nlohmann::json& acceptedType2, type::Maybe& maybe) + void NlohmannJSONReader::readPair(const nlohmann::json& input, nlohmann::json& acceptedType1, nlohmann::json& acceptedType2, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::PAIR_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::PAIR_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); auto list = input[rw::json::constantes::ACCEPTED_TYPE_SLUG].get<std::vector<nlohmann::json>>(); @@ -86,18 +90,18 @@ namespace armarx::aron::type::reader acceptedType2 = list[1]; } - void NlohmannJSONReader::readNDArray(const nlohmann::json& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe) + void NlohmannJSONReader::readNDArray(const nlohmann::json& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::NDARRAY_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::NDARRAY_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); ndim = input[rw::json::constantes::DIMENSIONS_SLUG]; type = input[rw::json::constantes::USED_TYPE_SLUG]; } - void NlohmannJSONReader::readMatrix(const nlohmann::json& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe) + void NlohmannJSONReader::readMatrix(const nlohmann::json& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::MATRIX_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::MATRIX_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); auto list = input[rw::json::constantes::DIMENSIONS_SLUG].get<std::vector<nlohmann::json>>(); @@ -106,54 +110,54 @@ namespace armarx::aron::type::reader type = input[rw::json::constantes::USED_TYPE_SLUG]; } - void NlohmannJSONReader::readQuaternion(const nlohmann::json& input, type::quaternion::ElementType& type, type::Maybe& maybe) + void NlohmannJSONReader::readQuaternion(const nlohmann::json& input, type::quaternion::ElementType& type, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::QUATERNION_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::QUATERNION_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); type = input[rw::json::constantes::USED_TYPE_SLUG]; } - void NlohmannJSONReader::readPointCloud(const nlohmann::json& input, type::pointcloud::VoxelType& type, type::Maybe& maybe) + void NlohmannJSONReader::readPointCloud(const nlohmann::json& input, type::pointcloud::VoxelType& type, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::POINT_CLOUD_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::POINT_CLOUD_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); type = input[rw::json::constantes::USED_TYPE_SLUG]; } - void NlohmannJSONReader::readImage(const nlohmann::json& input, type::image::PixelType& type, type::Maybe& maybe) + void NlohmannJSONReader::readImage(const nlohmann::json& input, type::image::PixelType& type, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::IMAGE_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::IMAGE_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); type = input[rw::json::constantes::USED_TYPE_SLUG]; } - void NlohmannJSONReader::readPosition(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readPosition(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::POSITION_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::POSITION_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readOrientation(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readOrientation(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::ORIENTATION_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::ORIENTATION_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readPose(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readPose(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::POSE_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::POSE_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readIntEnum(const nlohmann::json& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe) + void NlohmannJSONReader::readIntEnum(const nlohmann::json& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::INT_ENUM_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::INT_ENUM_TYPENAME_SLUG, p); name = input[rw::json::constantes::NAME_SLUG]; maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); @@ -161,51 +165,51 @@ namespace armarx::aron::type::reader acceptedValues = input[rw::json::constantes::ELEMENTS_SLUG].get<std::map<std::string, int>>(); } - void NlohmannJSONReader::readInt(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readInt(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::INT_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::INT_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readLong(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readLong(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::LONG_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::LONG_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readFloat(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readFloat(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::FLOAT_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::FLOAT_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readDouble(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readDouble(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::DOUBLE_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::DOUBLE_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readString(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readString(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::STRING_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::STRING_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readBool(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readBool(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::BOOL_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::BOOL_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readTime(const nlohmann::json& input, type::Maybe& maybe) + void NlohmannJSONReader::readTime(const nlohmann::json& input, type::Maybe& maybe, Path& p) { - checkInputForCorrectType(input, rw::json::constantes::TIME_TYPENAME_SLUG); + getAronMetaInformationForType(input, rw::json::constantes::TIME_TYPENAME_SLUG, p); maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } diff --git a/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.h b/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.h index 555aa43e880d6f5afbdb27252c7388bc61fa0a0b..4666244c26fa6563a8bf2f477e30f260a04b38de 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.h @@ -39,29 +39,29 @@ namespace armarx::aron::type::reader // constructors NlohmannJSONReader() = default; - void readObject(InputType& input, std::string& name, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe) override; - void readList(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe) override; - void readDict(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe) override; - void readTuple(InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe) override; - void readPair(InputType& input, InputTypeNonConst& acceptedType1, InputTypeNonConst& acceptedType2, type::Maybe& maybe) override; + void readObject(InputType& input, std::string& name, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe, Path& p) override; + void readList(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) override; + void readDict(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) override; + void readTuple(InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe, Path& p) override; + void readPair(InputType& input, InputTypeNonConst& acceptedType1, InputTypeNonConst& acceptedType2, type::Maybe& maybe, Path& p) override; - void readNDArray(InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe) override; - void readMatrix(InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe) override; - void readQuaternion(InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe) override; - void readPointCloud(InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe) override; - void readImage(InputType& input, type::image::PixelType& type, type::Maybe& maybe) override; - void readPosition(InputType& input, type::Maybe& maybe) override; - void readOrientation(InputType& input, type::Maybe& maybe) override; - void readPose(InputType& input, type::Maybe& maybe) override; + void readNDArray(InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe, Path& p) override; + void readMatrix(InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe, Path& p) override; + void readQuaternion(InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe, Path& p) override; + void readPointCloud(InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe, Path& p) override; + void readImage(InputType& input, type::image::PixelType& type, type::Maybe& maybe, Path& p) override; + void readPosition(InputType& input, type::Maybe& maybe, Path& p) override; + void readOrientation(InputType& input, type::Maybe& maybe, Path& p) override; + void readPose(InputType& input, type::Maybe& maybe, Path& p) override; - void readIntEnum(InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe) override; + void readIntEnum(InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe, Path& p) override; - void readInt(InputType& input, type::Maybe& maybe) override; - void readLong(InputType& input, type::Maybe& maybe) override; - void readFloat(InputType& input, type::Maybe& maybe) override; - void readDouble(InputType& input, type::Maybe& maybe) override; - void readString(InputType& input, type::Maybe& maybe) override; - void readBool(InputType& input, type::Maybe& maybe) override; - void readTime(InputType& input, type::Maybe& maybe) override; + void readInt(InputType& input, type::Maybe& maybe, Path& p) override; + void readLong(InputType& input, type::Maybe& maybe, Path& p) override; + void readFloat(InputType& input, type::Maybe& maybe, Path& p) override; + void readDouble(InputType& input, type::Maybe& maybe, Path& p) override; + void readString(InputType& input, type::Maybe& maybe, Path& p) override; + void readBool(InputType& input, type::Maybe& maybe, Path& p) override; + void readTime(InputType& input, type::Maybe& maybe, Path& p) override; }; } diff --git a/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.cpp b/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.cpp index 2568a1543c6aae294697226749eba910338a80f8..26c6180abb37a34be93d6f22e06e8127224f0a30 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.cpp +++ b/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.cpp @@ -32,166 +32,208 @@ namespace armarx::aron::type::reader { - void VariantReader::readObject(const aron::type::VariantPtr& input, std::string& name, std::map<std::string, aron::type::VariantPtr>& memberTypes, type::Maybe& maybe) + void VariantReader::readObject(const aron::type::VariantPtr& input, std::string& name, std::map<std::string, aron::type::VariantPtr>& memberTypes, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Object::DynamicCastAndCheck(input); name = o->getObjectName(); maybe = o->getMaybe(); memberTypes = o->getMemberTypes(); + p = o->getPath(); } - void VariantReader::readList(const aron::type::VariantPtr& input, aron::type::VariantPtr& acceptedType, type::Maybe& maybe) + void VariantReader::readList(const aron::type::VariantPtr& input, aron::type::VariantPtr& acceptedType, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::List::DynamicCastAndCheck(input); maybe = o->getMaybe(); acceptedType = o->getAcceptedType(); + p = o->getPath(); } - void VariantReader::readDict(const aron::type::VariantPtr& input, aron::type::VariantPtr& acceptedType, type::Maybe& maybe) + void VariantReader::readDict(const aron::type::VariantPtr& input, aron::type::VariantPtr& acceptedType, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Dict::DynamicCastAndCheck(input); maybe = o->getMaybe(); acceptedType = o->getAcceptedType(); + p = o->getPath(); } - void VariantReader::readTuple(const aron::type::VariantPtr& input, std::vector<aron::type::VariantPtr>& acceptedTypes, type::Maybe& maybe) + void VariantReader::readTuple(const aron::type::VariantPtr& input, std::vector<aron::type::VariantPtr>& acceptedTypes, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Tuple::DynamicCastAndCheck(input); maybe = o->getMaybe(); acceptedTypes = o->getAcceptedTypes(); + p = o->getPath(); } - void VariantReader::readPair(const aron::type::VariantPtr& input, aron::type::VariantPtr& acceptedType1, aron::type::VariantPtr& acceptedType2, type::Maybe& maybe) + void VariantReader::readPair(const aron::type::VariantPtr& input, aron::type::VariantPtr& acceptedType1, aron::type::VariantPtr& acceptedType2, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Pair::DynamicCastAndCheck(input); maybe = o->getMaybe(); acceptedType1 = o->getAcceptedTypes().first; acceptedType2 = o->getAcceptedTypes().second; + p = o->getPath(); } - void VariantReader::readNDArray(const aron::type::VariantPtr& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe) + void VariantReader::readNDArray(const aron::type::VariantPtr& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::NDArray::DynamicCastAndCheck(input); maybe = o->getMaybe(); ndim = o->getNumberDimensions(); type = o->getElementType(); + p = o->getPath(); } - void VariantReader::readMatrix(const aron::type::VariantPtr& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe) + void VariantReader::readMatrix(const aron::type::VariantPtr& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Matrix::DynamicCastAndCheck(input); maybe = o->getMaybe(); rows = o->getRows(); cols = o->getCols(); type = o->getElementType(); + p = o->getPath(); } - void VariantReader::readQuaternion(const aron::type::VariantPtr& input, type::quaternion::ElementType& type, type::Maybe& maybe) + void VariantReader::readQuaternion(const aron::type::VariantPtr& input, type::quaternion::ElementType& type, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Quaternion::DynamicCastAndCheck(input); maybe = o->getMaybe(); type = o->getElementType(); + p = o->getPath(); } - void VariantReader::readPointCloud(const aron::type::VariantPtr& input, type::pointcloud::VoxelType& type, type::Maybe& maybe) + void VariantReader::readPointCloud(const aron::type::VariantPtr& input, type::pointcloud::VoxelType& type, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::PointCloud::DynamicCastAndCheck(input); maybe = o->getMaybe(); type = o->getVoxelType(); + p = o->getPath(); } - void VariantReader::readImage(const aron::type::VariantPtr& input, type::image::PixelType& type, type::Maybe& maybe) + void VariantReader::readImage(const aron::type::VariantPtr& input, type::image::PixelType& type, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Image::DynamicCastAndCheck(input); maybe = o->getMaybe(); type = o->getPixelType(); + p = o->getPath(); } - void VariantReader::readPosition(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readPosition(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Position::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readOrientation(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readOrientation(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Orientation::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readPose(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readPose(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Pose::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readIntEnum(const aron::type::VariantPtr& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe) + void VariantReader::readIntEnum(const aron::type::VariantPtr& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::IntEnum::DynamicCastAndCheck(input); name = o->getEnumName(); acceptedValues = o->getAcceptedValueMap(); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readInt(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readInt(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Int::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readLong(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readLong(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Long::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readFloat(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readFloat(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Float::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readDouble(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readDouble(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Double::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readString(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readString(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::String::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readBool(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readBool(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Bool::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } - void VariantReader::readTime(const aron::type::VariantPtr& input, type::Maybe& maybe) + void VariantReader::readTime(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { + ARMARX_CHECK_NOT_NULL(input); auto o = type::Time::DynamicCastAndCheck(input); maybe = o->getMaybe(); + p = o->getPath(); } } diff --git a/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.h b/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.h index 6ce41ec9609b961c5d0e7404c81401ddb7ddd71d..ec223069810938234ec0be26357dea2423e05569 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.h @@ -40,29 +40,29 @@ namespace armarx::aron::type::reader // constructors VariantReader() = default; - void readObject(InputType& input, std::string& name, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe) override; - void readList(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe) override; - void readDict(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe) override; - void readTuple(InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe) override; - void readPair(InputType& input, InputTypeNonConst& acceptedType1, InputTypeNonConst& acceptedType2, type::Maybe& maybe) override; + void readObject(InputType& input, std::string& name, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe, Path& p) override; + void readList(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) override; + void readDict(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) override; + void readTuple(InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe, Path& p) override; + void readPair(InputType& input, InputTypeNonConst& acceptedType1, InputTypeNonConst& acceptedType2, type::Maybe& maybe, Path& p) override; - void readNDArray(InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe) override; - void readMatrix(InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe) override; - void readQuaternion(InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe) override; - void readPointCloud(InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe) override; - void readImage(InputType& input, type::image::PixelType& type, type::Maybe& maybe) override; - void readPosition(InputType& input, type::Maybe& maybe) override; - void readOrientation(InputType& input, type::Maybe& maybe) override; - void readPose(InputType& input, type::Maybe& maybe) override; + void readNDArray(InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe, Path& p) override; + void readMatrix(InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe, Path& p) override; + void readQuaternion(InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe, Path& p) override; + void readPointCloud(InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe, Path& p) override; + void readImage(InputType& input, type::image::PixelType& type, type::Maybe& maybe, Path& p) override; + void readPosition(InputType& input, type::Maybe& maybe, Path& p) override; + void readOrientation(InputType& input, type::Maybe& maybe, Path& p) override; + void readPose(InputType& input, type::Maybe& maybe, Path& p) override; - void readIntEnum(InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe) override; + void readIntEnum(InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe, Path& p) override; - void readInt(InputType& input, type::Maybe& maybe) override; - void readLong(InputType& input, type::Maybe& maybe) override; - void readFloat(InputType& input, type::Maybe& maybe) override; - void readDouble(InputType& input, type::Maybe& maybe) override; - void readString(InputType& input, type::Maybe& maybe) override; - void readBool(InputType& input, type::Maybe& maybe) override; - void readTime(InputType& input, type::Maybe& maybe) override; + void readInt(InputType& input, type::Maybe& maybe, Path& p) override; + void readLong(InputType& input, type::Maybe& maybe, Path& p) override; + void readFloat(InputType& input, type::Maybe& maybe, Path& p) override; + void readDouble(InputType& input, type::Maybe& maybe, Path& p) override; + void readString(InputType& input, type::Maybe& maybe, Path& p) override; + void readBool(InputType& input, type::Maybe& maybe, Path& p) override; + void readTime(InputType& input, type::Maybe& maybe, Path& p) override; }; } diff --git a/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp b/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp index 5ce67f26c47d70e6e45f447ca36ad7d97b240aa8..303ee55bc8f826ad7896bdc88c3b18e17ce9eeff 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp +++ b/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp @@ -32,17 +32,18 @@ namespace armarx::aron::type::writer namespace { /// Set important members for json object (aron meta information) - void setupAronInformationForType(nlohmann::json& json, const std::string& type, const type::Maybe& maybe) + void setupAronMetaInformationForType(nlohmann::json& json, const std::string& type, const type::Maybe& maybe, const Path& p) { json[rw::json::constantes::TYPE_SLUG] = type; + json[rw::json::constantes::PATH_SLUG] = p.getPath(); json[rw::json::constantes::MAYBE_SLUG] = rw::json::conversion::Maybe2String.at(maybe); } } - nlohmann::json NlohmannJSONWriter::writeObject(const std::string& name, const type::Maybe maybe, const std::map<std::string, nlohmann::json>& memberTypes, const std::optional<nlohmann::json>& extends) + nlohmann::json NlohmannJSONWriter::writeObject(const std::string& name, const std::map<std::string, nlohmann::json>& memberTypes, const std::optional<nlohmann::json>& extends, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::OBJECT_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::OBJECT_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::NAME_SLUG] = name; if (extends.has_value()) { @@ -57,105 +58,105 @@ namespace armarx::aron::type::writer return o; } - nlohmann::json NlohmannJSONWriter::writeList(const type::Maybe maybe, const nlohmann::json& acceptedType) + nlohmann::json NlohmannJSONWriter::writeList(const nlohmann::json& acceptedType, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::LIST_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::LIST_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::ACCEPTED_TYPE_SLUG] = acceptedType; return o; } - nlohmann::json NlohmannJSONWriter::writeDict(const type::Maybe maybe, const nlohmann::json& acceptedType) + nlohmann::json NlohmannJSONWriter::writeDict(const nlohmann::json& acceptedType, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::DICT_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::DICT_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::ACCEPTED_TYPE_SLUG] = acceptedType; return o; } - nlohmann::json NlohmannJSONWriter::writePair(const type::Maybe maybe, const nlohmann::json& acceptedType1, const nlohmann::json& acceptedType2) + nlohmann::json NlohmannJSONWriter::writePair(const nlohmann::json& acceptedType1, const nlohmann::json& acceptedType2, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::PAIR_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::PAIR_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::ACCEPTED_TYPE_SLUG] = {acceptedType1, acceptedType2}; return o; } - nlohmann::json NlohmannJSONWriter::writeTuple(const type::Maybe maybe, const std::vector<nlohmann::json>& acceptedTypes) + nlohmann::json NlohmannJSONWriter::writeTuple(const std::vector<nlohmann::json>& acceptedTypes, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::TUPLE_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::TUPLE_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::ACCEPTED_TYPE_SLUG] = acceptedTypes; return o; } - nlohmann::json NlohmannJSONWriter::writeNDArray(const int ndim, const type::ndarray::ElementType type, const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeNDArray(const int ndim, const type::ndarray::ElementType type, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::NDARRAY_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::NDARRAY_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::USED_TYPE_SLUG] = rw::json::conversion::NDArrayType2String.at(type); o[rw::json::constantes::DIMENSIONS_SLUG] = ndim; return o; } - nlohmann::json NlohmannJSONWriter::writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::MATRIX_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::MATRIX_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::USED_TYPE_SLUG] = rw::json::conversion::MatrixType2String.at(type); o[rw::json::constantes::DIMENSIONS_SLUG] = {rows, cols}; return o; } - nlohmann::json NlohmannJSONWriter::writeQuaternion(const type::quaternion::ElementType type, const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeQuaternion(const type::quaternion::ElementType type, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::QUATERNION_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::QUATERNION_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::USED_TYPE_SLUG] = rw::json::conversion::QuaternionType2String.at(type); return o; } - nlohmann::json NlohmannJSONWriter::writeImage(const type::image::PixelType type, const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeImage(const type::image::PixelType type, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::IMAGE_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::IMAGE_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::USED_TYPE_SLUG] = rw::json::conversion::PixelType2String.at(type); return o; } - nlohmann::json NlohmannJSONWriter::writePointCloud(const type::pointcloud::VoxelType type, const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writePointCloud(const type::pointcloud::VoxelType type, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::POINT_CLOUD_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::POINT_CLOUD_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::USED_TYPE_SLUG] = rw::json::conversion::VoxelType2String.at(type); return o; } - nlohmann::json NlohmannJSONWriter::writePosition(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writePosition(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::POSITION_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::POSITION_TYPENAME_SLUG, maybe, p); return o; } - nlohmann::json NlohmannJSONWriter::writeOrientation(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeOrientation(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::ORIENTATION_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::ORIENTATION_TYPENAME_SLUG, maybe, p); return o; } - nlohmann::json NlohmannJSONWriter::writePose(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writePose(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::POSE_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::POSE_TYPENAME_SLUG, maybe, p); return o; } - nlohmann::json NlohmannJSONWriter::writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::INT_ENUM_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::INT_ENUM_TYPENAME_SLUG, maybe, p); o[rw::json::constantes::NAME_SLUG] = name; o[rw::json::constantes::ELEMENTS_SLUG] = nlohmann::json(nlohmann::json::value_t::object); @@ -166,52 +167,52 @@ namespace armarx::aron::type::writer return o; } - nlohmann::json NlohmannJSONWriter::writeInt(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeInt(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::INT_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::INT_TYPENAME_SLUG, maybe, p); return o; } - nlohmann::json NlohmannJSONWriter::writeLong(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeLong(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::LONG_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::LONG_TYPENAME_SLUG, maybe, p); return o; } - nlohmann::json NlohmannJSONWriter::writeFloat(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeFloat(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::FLOAT_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::FLOAT_TYPENAME_SLUG, maybe, p); return o; } - nlohmann::json NlohmannJSONWriter::writeDouble(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeDouble(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::DOUBLE_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::DOUBLE_TYPENAME_SLUG, maybe, p); return o; } - nlohmann::json NlohmannJSONWriter::writeString(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeString(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::STRING_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::STRING_TYPENAME_SLUG, maybe, p); return o; } - nlohmann::json NlohmannJSONWriter::writeBool(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeBool(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::BOOL_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::BOOL_TYPENAME_SLUG, maybe, p); return o; } - nlohmann::json NlohmannJSONWriter::writeTime(const type::Maybe maybe) + nlohmann::json NlohmannJSONWriter::writeTime(const type::Maybe maybe, const Path& p) { nlohmann::json o; - setupAronInformationForType(o, rw::json::constantes::TIME_TYPENAME_SLUG, maybe); + setupAronMetaInformationForType(o, rw::json::constantes::TIME_TYPENAME_SLUG, maybe, p); return o; } } diff --git a/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.h b/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.h index 0733514e9712080957023c85050597423d0097b3..ce15b29325c9aa22705e6b53f31034a9405e7452 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.h @@ -39,29 +39,29 @@ namespace armarx::aron::type::writer public: NlohmannJSONWriter() = default; - virtual ReturnType writeObject(const std::string& name, const type::Maybe maybe, const std::map<std::string, ReturnType>& memberTypes, const std::optional<ReturnType>& extends = std::nullopt) override; - virtual ReturnType writeList(const type::Maybe maybe, const ReturnType& acceptedType) override; - virtual ReturnType writeDict(const type::Maybe maybe, const ReturnType& acceptedType) override; - virtual ReturnType writePair(const type::Maybe maybe, const ReturnType& acceptedType1, const ReturnType& acceptedType2) override; - virtual ReturnType writeTuple(const type::Maybe maybe, const std::vector<ReturnType>& acceptedTypes) override; + ReturnType writeObject(const std::string& name, const std::map<std::string, ReturnType>& memberTypes, const std::optional<ReturnType>& extends, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeList(const ReturnType& acceptedType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeDict(const ReturnType& acceptedType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writePair(const ReturnType& acceptedType1, const ReturnType& acceptedType2, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeTuple(const std::vector<ReturnType>& acceptedTypes, const type::Maybe maybe, const Path& p = Path()) override; - virtual ReturnType writeNDArray(const int ndim, const type::ndarray::ElementType, const type::Maybe maybe) override; - virtual ReturnType writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe) override; - virtual ReturnType writeQuaternion(const type::quaternion::ElementType, const type::Maybe maybe) override; - virtual ReturnType writeImage(const type::image::PixelType, const type::Maybe maybe) override; - virtual ReturnType writePointCloud(const type::pointcloud::VoxelType, const type::Maybe maybe) override; - virtual ReturnType writePosition(const type::Maybe maybe) override; - virtual ReturnType writeOrientation(const type::Maybe maybe) override; - virtual ReturnType writePose(const type::Maybe maybe) override; + ReturnType writeNDArray(const int ndim, const type::ndarray::ElementType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeQuaternion(const type::quaternion::ElementType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeImage(const type::image::PixelType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writePointCloud(const type::pointcloud::VoxelType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writePosition(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeOrientation(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writePose(const type::Maybe maybe, const Path& p = Path()) override; - virtual ReturnType writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe) override; + ReturnType writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe, const Path& p = Path()) override; - virtual ReturnType writeInt(const type::Maybe maybe) override; - virtual ReturnType writeLong(const type::Maybe maybe) override; - virtual ReturnType writeFloat(const type::Maybe maybe) override; - virtual ReturnType writeDouble(const type::Maybe maybe) override; - virtual ReturnType writeString(const type::Maybe maybe) override; - virtual ReturnType writeBool(const type::Maybe maybe) override; - virtual ReturnType writeTime(const type::Maybe maybe) override; + ReturnType writeInt(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeLong(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeFloat(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeDouble(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeString(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeBool(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeTime(const type::Maybe maybe, const Path& p = Path()) override; }; } diff --git a/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.cpp b/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.cpp index 40d0871bf24f0889d8f5e0687633a2b2dca0a722..8c16a0c860b37a9d1897da6e72ebd74f3baeb1d2 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.cpp +++ b/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.cpp @@ -29,9 +29,9 @@ namespace armarx::aron::type::writer { // interface - aron::type::VariantPtr VariantWriter::writeObject(const std::string& name, const type::Maybe maybe, const std::map<std::string, aron::type::VariantPtr>& memberTypes, const std::optional<aron::type::VariantPtr>& extends) + aron::type::VariantPtr VariantWriter::writeObject(const std::string& name, const std::map<std::string, aron::type::VariantPtr>& memberTypes, const std::optional<aron::type::VariantPtr>& extends, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Object>(name, memberTypes); + auto o = std::make_shared<type::Object>(name, memberTypes, p); o->setMaybe(maybe); if (extends.has_value()) { @@ -41,43 +41,43 @@ namespace armarx::aron::type::writer return o; } - aron::type::VariantPtr VariantWriter::writeList(const type::Maybe maybe, const aron::type::VariantPtr& acceptedType) + aron::type::VariantPtr VariantWriter::writeList(const aron::type::VariantPtr& acceptedType, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::List>(acceptedType); + auto o = std::make_shared<type::List>(acceptedType, p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeDict(const type::Maybe maybe, const aron::type::VariantPtr& acceptedType) + aron::type::VariantPtr VariantWriter::writeDict(const aron::type::VariantPtr& acceptedType, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Dict>(acceptedType); + auto o = std::make_shared<type::Dict>(acceptedType, p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writePair(const type::Maybe maybe, const aron::type::VariantPtr& acceptedType1, const aron::type::VariantPtr& acceptedType2) + aron::type::VariantPtr VariantWriter::writePair(const aron::type::VariantPtr& acceptedType1, const aron::type::VariantPtr& acceptedType2, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Pair>(acceptedType1, acceptedType2); + auto o = std::make_shared<type::Pair>(acceptedType1, acceptedType2, p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeTuple(const type::Maybe maybe, const std::vector<aron::type::VariantPtr>& acceptedTypes) + aron::type::VariantPtr VariantWriter::writeTuple(const std::vector<aron::type::VariantPtr>& acceptedTypes, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Tuple>(acceptedTypes); + auto o = std::make_shared<type::Tuple>(acceptedTypes, p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeNDArray(const int ndim, const type::ndarray::ElementType, const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeNDArray(const int ndim, const type::ndarray::ElementType, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::NDArray>(); + auto o = std::make_shared<type::NDArray>(p); return o; } - aron::type::VariantPtr VariantWriter::writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Matrix>(); + auto o = std::make_shared<type::Matrix>(p); o->setMaybe(maybe); o->setRows(rows); o->setCols(cols); @@ -85,103 +85,103 @@ namespace armarx::aron::type::writer return o; } - aron::type::VariantPtr VariantWriter::writeQuaternion(const type::quaternion::ElementType type, const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeQuaternion(const type::quaternion::ElementType type, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Quaternion>(); + auto o = std::make_shared<type::Quaternion>(p); o->setMaybe(maybe); o->setElementType(type); return o; } - aron::type::VariantPtr VariantWriter::writeImage(const type::image::PixelType type, const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeImage(const type::image::PixelType type, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Image>(); + auto o = std::make_shared<type::Image>(p); o->setMaybe(maybe); o->setPixelType(type); return o; } - aron::type::VariantPtr VariantWriter::writePointCloud(const type::pointcloud::VoxelType type, const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writePointCloud(const type::pointcloud::VoxelType type, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::PointCloud>(); + auto o = std::make_shared<type::PointCloud>(p); o->setMaybe(maybe); o->setVoxelType(type); return o; } - aron::type::VariantPtr VariantWriter::writePosition(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writePosition(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Position>(); + auto o = std::make_shared<type::Position>(p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeOrientation(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeOrientation(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Orientation>(); + auto o = std::make_shared<type::Orientation>(p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writePose(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writePose(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Pose>(); + auto o = std::make_shared<type::Pose>(p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::IntEnum>(name, acceptedValues); + auto o = std::make_shared<type::IntEnum>(name, acceptedValues, p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeInt(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeInt(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Int>(); + auto o = std::make_shared<type::Int>(p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeLong(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeLong(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Long>(); + auto o = std::make_shared<type::Long>(p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeFloat(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeFloat(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Float>(); + auto o = std::make_shared<type::Float>(p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeDouble(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeDouble(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Double>(); + auto o = std::make_shared<type::Double>(p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeString(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeString(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::String>(); + auto o = std::make_shared<type::String>(p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeBool(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeBool(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Bool>(); + auto o = std::make_shared<type::Bool>(p); o->setMaybe(maybe); return o; } - aron::type::VariantPtr VariantWriter::writeTime(const type::Maybe maybe) + aron::type::VariantPtr VariantWriter::writeTime(const type::Maybe maybe, const Path& p) { - auto o = std::make_shared<type::Time>(); + auto o = std::make_shared<type::Time>(p); o->setMaybe(maybe); return o; } diff --git a/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h b/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h index 3a17a435edb1e4b0e4bb1b6b5b8e9ef3763d60fa..daf3b994432e40f3ca65c0eeaaff82fb8ce82503 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h @@ -35,29 +35,29 @@ namespace armarx::aron::type::writer public: VariantWriter() = default; - virtual ReturnType writeObject(const std::string& name, const type::Maybe maybe, const std::map<std::string, ReturnType>& memberTypes, const std::optional<ReturnType>& extends = std::nullopt) override; - virtual ReturnType writeList(const type::Maybe maybe, const ReturnType& acceptedType) override; - virtual ReturnType writeDict(const type::Maybe maybe, const ReturnType& acceptedType) override; - virtual ReturnType writePair(const type::Maybe maybe, const ReturnType& acceptedType1, const ReturnType& acceptedType2) override; - virtual ReturnType writeTuple(const type::Maybe maybe, const std::vector<ReturnType>& acceptedTypes) override; - - virtual ReturnType writeNDArray(const int ndim, const type::ndarray::ElementType, const type::Maybe maybe) override; - virtual ReturnType writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe) override; - virtual ReturnType writeQuaternion(const type::quaternion::ElementType, const type::Maybe maybe) override; - virtual ReturnType writeImage(const type::image::PixelType, const type::Maybe maybe) override; - virtual ReturnType writePointCloud(const type::pointcloud::VoxelType, const type::Maybe maybe) override; - virtual ReturnType writePosition(const type::Maybe maybe) override; - virtual ReturnType writeOrientation(const type::Maybe maybe) override; - virtual ReturnType writePose(const type::Maybe maybe) override; - - virtual ReturnType writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe) override; - - virtual ReturnType writeInt(const type::Maybe maybe) override; - virtual ReturnType writeLong(const type::Maybe maybe) override; - virtual ReturnType writeFloat(const type::Maybe maybe) override; - virtual ReturnType writeDouble(const type::Maybe maybe) override; - virtual ReturnType writeString(const type::Maybe maybe) override; - virtual ReturnType writeBool(const type::Maybe maybe) override; - virtual ReturnType writeTime(const type::Maybe maybe) override; + ReturnType writeObject(const std::string& name, const std::map<std::string, ReturnType>& memberTypes, const std::optional<ReturnType>& extends, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeList(const ReturnType& acceptedType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeDict(const ReturnType& acceptedType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writePair(const ReturnType& acceptedType1, const ReturnType& acceptedType2, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeTuple(const std::vector<ReturnType>& acceptedTypes, const type::Maybe maybe, const Path& p = Path()) override; + + ReturnType writeNDArray(const int ndim, const type::ndarray::ElementType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeMatrix(const int rows, const int cols, const type::matrix::ElementType type, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeQuaternion(const type::quaternion::ElementType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeImage(const type::image::PixelType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writePointCloud(const type::pointcloud::VoxelType, const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writePosition(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeOrientation(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writePose(const type::Maybe maybe, const Path& p = Path()) override; + + ReturnType writeIntEnum(const std::string& name, const std::map<std::string, int>& acceptedValues, const type::Maybe maybe, const Path& p = Path()) override; + + ReturnType writeInt(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeLong(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeFloat(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeDouble(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeString(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeBool(const type::Maybe maybe, const Path& p = Path()) override; + ReturnType writeTime(const type::Maybe maybe, const Path& p = Path()) override; }; }