From 3083faf5c8944fd1c08504f070051c7acebd0ecf Mon Sep 17 00:00:00 2001 From: "fabian.peller-konrad@kit.edu" <fabian.peller-konrad@kit.edu> Date: Fri, 14 May 2021 19:32:20 +0200 Subject: [PATCH] aron refactoring. Optional and Ptr improvements + auto include cpp filenames from aron include --- source/RobotAPI/interface/aron/Aron.ice | 2 +- .../RobotAPI/libraries/aron/core/Exception.h | 18 +++++ .../RobotAPI/libraries/aron/core/Randomizer.h | 8 +-- .../codeWriter/cpp/AronCppClass.h | 4 +- .../codegenerator/codeWriter/cpp/Writer.cpp | 46 +++++++------ .../cpp/serializer/AllSerializers.h | 8 ++- .../codeWriter/cpp/serializer/Serializer.cpp | 37 +++++++--- .../codeWriter/cpp/serializer/Serializer.h | 6 +- .../cpp/serializer/SerializerFactory.cpp | 37 +++------- .../cpp/serializer/container/Dict.cpp | 13 ++-- .../cpp/serializer/container/Dict.h | 4 +- .../cpp/serializer/container/List.cpp | 13 ++-- .../cpp/serializer/container/List.h | 2 - .../cpp/serializer/container/Object.cpp | 19 +++--- .../cpp/serializer/container/Object.h | 4 +- .../cpp/serializer/container/Pair.cpp | 24 +++---- .../cpp/serializer/container/Pair.h | 5 +- .../cpp/serializer/container/Tuple.cpp | 21 +++--- .../cpp/serializer/container/Tuple.h | 4 +- .../detail/ContainerSerializerBase.h | 7 +- .../serializer/detail/NDArraySerializerBase.h | 6 +- .../detail/PrimitiveSerializerBase.h | 31 +++++++-- .../cpp/serializer/detail/SerializerBase.h | 17 +++-- .../cpp/serializer/enum/IntEnum.cpp | 7 +- .../cpp/serializer/ndarray/EigenMatrix.cpp | 12 ++-- .../serializer/ndarray/EigenQuaternion.cpp | 10 +-- .../cpp/serializer/ndarray/IVTCByteImage.cpp | 17 ++--- .../cpp/serializer/ndarray/IVTCByteImage.h | 1 - .../cpp/serializer/ndarray/NDArray.cpp | 6 +- .../cpp/serializer/ndarray/OpenCVMat.cpp | 10 +-- .../cpp/serializer/ndarray/Orientation.cpp | 10 +-- .../cpp/serializer/ndarray/PCLPointCloud.cpp | 10 +-- .../cpp/serializer/ndarray/PCLPointCloud.h | 1 - .../cpp/serializer/ndarray/Pose.cpp | 10 +-- .../cpp/serializer/ndarray/Position.cpp | 10 +-- .../cpp/serializer/primitive/Bool.cpp | 4 +- .../cpp/serializer/primitive/Double.cpp | 4 +- .../cpp/serializer/primitive/Float.cpp | 4 +- .../cpp/serializer/primitive/Int.cpp | 4 +- .../cpp/serializer/primitive/Long.cpp | 4 +- .../cpp/serializer/primitive/Long.h | 12 ++-- .../cpp/serializer/primitive/String.cpp | 4 +- .../cpp/serializer/primitive/String.h | 12 ++-- .../cpp/serializer/primitive/Time.cpp | 25 ++++++- .../cpp/serializer/primitive/Time.h | 5 ++ .../cpp/serializer/toplevel/IntEnumClass.cpp | 8 +-- .../cpp/serializer/toplevel/IntEnumClass.h | 1 - .../cpp/serializer/toplevel/ObjectClass.cpp | 9 +-- .../codegenerator/typeReader/xml/Data.cpp | 23 +++++++ .../core/codegenerator/typeReader/xml/Data.h | 9 +-- .../codegenerator/typeReader/xml/Reader.cpp | 13 ++-- .../codegenerator/typeReader/xml/Reader.h | 4 +- .../typeReader/xml/ReaderFactory.cpp | 68 ++++++++++--------- .../typeReader/xml/ReaderFactory.h | 1 + .../core/io/typeIO/converter/Converter.cpp | 38 +++++------ .../aron/core/io/typeIO/visitor/Visitor.cpp | 40 +++++------ .../core/navigator/data/primitive/String.h | 3 - .../aron/core/test/xmls/IVTCByteImageTest.xml | 4 +- .../aron/core/test/xmls/OptionalTest.xml | 2 +- 59 files changed, 413 insertions(+), 328 deletions(-) diff --git a/source/RobotAPI/interface/aron/Aron.ice b/source/RobotAPI/interface/aron/Aron.ice index c24e5cc1b..d40861c76 100644 --- a/source/RobotAPI/interface/aron/Aron.ice +++ b/source/RobotAPI/interface/aron/Aron.ice @@ -53,7 +53,7 @@ module armarx }; class AronType { - Maybe maybe; // Every type can be optional or not + Maybe maybe = Maybe::eNone; // Every type can have a maye type flag or not } sequence<AronType> AronTypeList; dictionary<string, AronType> AronTypeDict; diff --git a/source/RobotAPI/libraries/aron/core/Exception.h b/source/RobotAPI/libraries/aron/core/Exception.h index bebe98d2a..5bd308a21 100644 --- a/source/RobotAPI/libraries/aron/core/Exception.h +++ b/source/RobotAPI/libraries/aron/core/Exception.h @@ -124,6 +124,24 @@ namespace armarx::aron::error } }; + class MaybeNotValidException : + public AronException + { + public: + MaybeNotValidException() = delete; + MaybeNotValidException(const std::string& caller, const std::string& method, const std::string& reason, const type::Maybe maybe) : + AronException(caller, method, reason + ". The name of the maybe-type was: " + type::MAYBE_TO_STRING(maybe)) + { + + } + + MaybeNotValidException(const std::string& caller, const std::string& method, const std::string& reason, const type::Maybe maybe, const Path& path) : + AronException(caller, method, reason + ". The name of the maybe-type was: " + type::MAYBE_TO_STRING(maybe), path) + { + + } + }; + class StringNotValidException : public AronException { diff --git a/source/RobotAPI/libraries/aron/core/Randomizer.h b/source/RobotAPI/libraries/aron/core/Randomizer.h index b92bc4497..71b174230 100644 --- a/source/RobotAPI/libraries/aron/core/Randomizer.h +++ b/source/RobotAPI/libraries/aron/core/Randomizer.h @@ -170,9 +170,9 @@ namespace armarx::aron } } - datanavigator::NavigatorPtr generateAronDataFromType(const typenavigator::NavigatorPtr& type, bool ignore_optional = false) const + datanavigator::NavigatorPtr generateAronDataFromType(const typenavigator::NavigatorPtr& type, bool ignore_maybe = false) const { - if (type->isOptional() && !ignore_optional) + if (type->getMaybe() != type::Maybe::eNone && !ignore_maybe) { if (fiftyPercentChance()) { @@ -243,9 +243,9 @@ case type::Descriptor::e##upperType: \ { if (!data) { - if (!type->isOptional()) + if (!type->getMaybe() != type::Maybe::eNone) { - throw error::AronException("Randomizer", "initializeRandomly", "The data is null but the type is not optional. This is not valid."); + throw error::AronException("Randomizer", "initializeRandomly", "The data is null but the type is not a maybe type. This is not valid."); } if (fiftyPercentChance()) // 50% chance diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h index 8325b4d00..d50039b43 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h @@ -47,8 +47,8 @@ namespace armarx::aron::cppserializer public: AronCppClass() = default; - virtual void reset() = 0; - virtual void initialize() = 0; + virtual void resetHard() = 0; + virtual void resetSoft() = 0; virtual void read(armarx::aron::dataIO::ReaderInterface& r, bool skip_first_readStartDict = false) = 0; virtual void write(armarx::aron::dataIO::WriterInterface& w) const = 0; }; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp index 1643b64c7..0cdf58d6d 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp @@ -90,7 +90,7 @@ namespace armarx::aron::cppserializer { const auto& nav = publicGenerateObjectType->correspondingType; - //std::cout << "Generating: " << publicGenerateObjectType->correspondingObjectType->getName() << std::endl; + //std::cout << "Generating: " << nav->getName() << std::endl; // Convert to Object type and create class object if (nav == nullptr) @@ -110,7 +110,7 @@ namespace armarx::aron::cppserializer } else { - c->addInherit("virtual public armarx::aron::cppcodegenerator::AronCppClass"); + c->addInherit("public armarx::aron::cppserializer::AronCppClass"); c->addInclude("<RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h>"); } @@ -132,24 +132,24 @@ namespace armarx::aron::cppserializer } } - //std::cout << "Generate Type classes" << std::endl; + std::cout << "Generate Type classes" << std::endl; generateInnerTypeObjects(c, publicGenerateObjectType->nestedObjects); // ctor c->addCtor(serializer->toCtor(c->getName())); // Generic methods - //std::cout << "Generate equals method" << std::endl; + std::cout << "Generate equals method" << std::endl; CppMethodPtr equals = serializer->toEqualsMethod(); c->addMethod(equals); - //std::cout << "Generate reset method" << std::endl; - CppMethodPtr reset = serializer->toResetMethod(); - c->addMethod(reset); + std::cout << "Generate reset method" << std::endl; + CppMethodPtr resetHard = serializer->toResetHardMethod(); + c->addMethod(resetHard); - //std::cout << "Generate init method" << std::endl; - CppMethodPtr setup = serializer->toInitializeMethod(); - c->addMethod(setup); + std::cout << "Generate init method" << std::endl; + CppMethodPtr resetSoft = serializer->toResetSoftMethod(); + c->addMethod(resetSoft); //std::cout << "Generate writeInit method" << std::endl; CppMethodPtr writeType = serializer->toWriteTypeMethod(); @@ -174,6 +174,8 @@ namespace armarx::aron::cppserializer c->addMethod(convert); } + //std::cout << "set member vars" << std::endl; + // Add methods to set the member variables for (const codegeneratorhelper::ReaderInfoPtr& info : dataReaders) { @@ -185,6 +187,8 @@ namespace armarx::aron::cppserializer c->addMethod(convert); } + //std::cout << "type writer methods" << std::endl; + // Typewritermethods for (const codegeneratorhelper::WriterInfoPtr& info : initialTypeWriters) { @@ -196,6 +200,8 @@ namespace armarx::aron::cppserializer c->addMethod(convert); } + //std::cout << "push back" << std::endl; + typeClasses.push_back(c); } } @@ -226,7 +232,7 @@ namespace armarx::aron::cppserializer c->addInclude("<map>"); c->addInclude("<RobotAPI/interface/aron.h>"); - c->addInherit("virtual public armarx::aron::cppcodegenerator::AronCppClass"); + c->addInherit("virtual public armarx::aron::cppserializer::AronCppClass"); c->addInclude("<RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h>"); // ctor @@ -262,12 +268,12 @@ namespace armarx::aron::cppserializer c->addMethod(equals); //std::cout << "Generate reset method" << std::endl; - CppMethodPtr reset = serializer->toResetMethod(); - c->addMethod(reset); + CppMethodPtr resetHard = serializer->toResetHardMethod(); + c->addMethod(resetHard); //std::cout << "Generate init method" << std::endl; - CppMethodPtr setup = serializer->toInitializeMethod(); - c->addMethod(setup); + CppMethodPtr resetSoft = serializer->toResetSoftMethod(); + c->addMethod(resetSoft); //std::cout << "Generate writeInit method" << std::endl; CppMethodPtr writeInitialType = serializer->toWriteTypeMethod(); @@ -304,17 +310,17 @@ namespace armarx::aron::cppserializer } else { - c->addInherit("virtual public armarx::aron::cppcodegenerator::AronCppClass"); + c->addInherit("virtual public armarx::aron::cppserializer::AronCppClass"); } CppMethodPtr equals = serializer->toEqualsMethod(); c->addMethod(equals); - CppMethodPtr reset = serializer->toResetMethod(); - c->addMethod(reset); + CppMethodPtr resetHard = serializer->toResetHardMethod(); + c->addMethod(resetHard); - CppMethodPtr setup = serializer->toInitializeMethod(); - c->addMethod(setup); + CppMethodPtr resetSoft = serializer->toResetSoftMethod(); + c->addMethod(resetSoft); CppMethodPtr writeInitialType = serializer->toWriteTypeMethod(); c->addMethod(writeInitialType); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/AllSerializers.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/AllSerializers.h index 20c5ab2be..dd01bd127 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/AllSerializers.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/AllSerializers.h @@ -15,4 +15,10 @@ #include "ndarray/Orientation.h" #include "ndarray/Pose.h" #include "enum/IntEnum.h" -#include "primitive/Primitive.h" +#include "primitive/Int.h" +#include "primitive/Long.h" +#include "primitive/Float.h" +#include "primitive/Double.h" +#include "primitive/String.h" +#include "primitive/Bool.h" +#include "primitive/Time.h" diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.cpp index d574ed3d2..4265939ef 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.cpp @@ -63,22 +63,40 @@ namespace armarx::aron::cppserializer } // static methods - std::string Serializer::ResolveOptionalAccessor(const std::string& s, const typenavigator::NavigatorPtr& t) + std::string Serializer::ResolveMaybeAccessor(const std::string& s, const typenavigator::NavigatorPtr& t) { if (t->getMaybe() == type::Maybe::eOptional) { return s + ".value()"; } + if (t->getMaybe() == type::Maybe::eRawPointer || t->getMaybe() == type::Maybe::eSharedPointer || t->getMaybe() == type::Maybe::eUniquePointer) + { + return "*" + s; + } return s; } - CppBlockPtr Serializer::ResolveOptionalWriteBlock(const std::string& accessor, const CppBlockPtr& block_if_data, const typenavigator::NavigatorPtr& typenavigator) + CppBlockPtr Serializer::ResolveMaybeWriteBlock(const std::string& accessor, const CppBlockPtr& block_if_data, const typenavigator::NavigatorPtr& typenavigator) { - if (typenavigator->getMaybe() == type::Maybe::eOptional) + if (typenavigator->getMaybe() != type::Maybe::eNone) { CppBlockPtr b = std::make_shared<CppBlock>(); - b->addLine("if (" + accessor + ".has_value())"); - b->addBlock(block_if_data); + if (typenavigator->getMaybe() == type::Maybe::eOptional) + { + b->addLine("if (" + accessor + ".has_value())"); + b->addBlock(block_if_data); + } + if (typenavigator->getMaybe() == type::Maybe::eRawPointer) + { + b->addLine("if (" + accessor + " == NULL)"); + b->addBlock(block_if_data); + } + if (typenavigator->getMaybe() == type::Maybe::eSharedPointer || typenavigator->getMaybe() == type::Maybe::eUniquePointer) + { + b->addLine("if (" + accessor + " == nullptr)"); + b->addBlock(block_if_data); + } + b->addLine("else"); CppBlockPtr block_if_no_data = std::make_shared<CppBlock>(); block_if_no_data->addLine("w.writeNull();"); @@ -91,7 +109,7 @@ namespace armarx::aron::cppserializer } } - CppBlockPtr Serializer::ResolveOptionalReadBlock(const std::string& accessor, const std::string& readElement, const CppBlockPtr& block_if_data, const typenavigator::NavigatorPtr& typenavigator) + CppBlockPtr Serializer::ResolveMaybeReadBlock(const std::string& accessor, const std::string& readElement, const CppBlockPtr& block_if_data, const typenavigator::NavigatorPtr& typenavigator) { std::string escaped_accessor = EscapeAccessor(accessor); std::string read_start_result_accessor = escaped_accessor + READ_START_RETURN_TYPE_ACCESSOR; @@ -153,6 +171,7 @@ namespace armarx::aron::cppserializer SerializerPtr Serializer::FromAronTypeNaviagtorPtr(const typenavigator::NavigatorPtr& n) { + ARMARX_CHECK_NOT_NULL(n); return FACTORY->create(n, n->getPath()); } @@ -187,7 +206,7 @@ namespace armarx::aron::cppserializer CppCtorPtr c = CppCtorPtr(new CppCtor(name + "()")); std::vector<std::pair<std::string, std::string>> initList = this->getCtorInitializers(""); CppBlockPtr b = CppBlockPtr(new CppBlock()); - b->addLine("initialize();"); + b->addLine("resetHard();"); b->appendBlock(this->getCtorBlock("")); c->addInitListEntries(initList); c->setBlock(b); @@ -225,7 +244,7 @@ namespace armarx::aron::cppserializer doc << "@brief writeType() - This method returns a new type from the class structure using a type writer implementation. This function is static. \n"; doc << "@return - the result of the writer implementation"; - CppMethodPtr m = CppMethodPtr(new CppMethod("static void writeType(armarx::aron::typeIO::WriterInterface& w, bool type_is_optional = false)", doc.str())); + CppMethodPtr m = CppMethodPtr(new CppMethod("static void writeType(armarx::aron::typeIO::WriterInterface& w, armarx::aron::type::Maybe __aronMaybeType = armarx::aron::type::Maybe::eNone)", doc.str())); CppBlockPtr b = this->getWriteTypeBlock(""); m->setBlock(b); return m; @@ -253,7 +272,7 @@ namespace armarx::aron::cppserializer CppMethodPtr m = CppMethodPtr(new CppMethod("virtual void read(armarx::aron::dataIO::ReaderInterface& r, bool skip_first_readStartDict = false) override", doc.str())); CppBlockPtr b = std::make_shared<CppBlock>(); - b->addLine("this->reset();"); + b->addLine("this->resetSoft();"); b->appendBlock(this->getReadBlock("")); m->setBlock(b); return m; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.h index ad74b45c4..1914c0e7c 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.h @@ -113,9 +113,9 @@ namespace armarx::aron::cppserializer static SerializerPtr FromAronTypeNaviagtorPtr(const typenavigator::NavigatorPtr&); - static std::string ResolveOptionalAccessor(const std::string&, const typenavigator::NavigatorPtr&); - static CppBlockPtr ResolveOptionalWriteBlock(const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&); - static CppBlockPtr ResolveOptionalReadBlock(const std::string&, const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&); + static std::string ResolveMaybeAccessor(const std::string&, const typenavigator::NavigatorPtr&); + static CppBlockPtr ResolveMaybeWriteBlock(const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&); + static CppBlockPtr ResolveMaybeReadBlock(const std::string&, const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&); protected: static const std::string READ_START_RETURN_TYPE_ACCESSOR; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/SerializerFactory.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/SerializerFactory.cpp index 34820852e..080176c57 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/SerializerFactory.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/SerializerFactory.cpp @@ -34,38 +34,19 @@ namespace armarx::aron::cppserializer // Access method SerializerPtr SerializerFactory::create(const typenavigator::NavigatorPtr& n, const Path& path) const { +#define RUN_ARON_MACRO(upperType, lowerType, capsType) \ + {type::Descriptor::e##upperType, SerializerFactoryPtr(new upperType##SerializerFactory())}, static const std::map<type::Descriptor, SerializerFactoryPtr> Factories = { - {type::Descriptor::eObject, SerializerFactoryPtr(new ObjectSerializerFactory())}, - {type::Descriptor::eDict, SerializerFactoryPtr(new DictSerializerFactory())}, - {type::Descriptor::eList, SerializerFactoryPtr(new ListSerializerFactory())}, - {type::Descriptor::eTuple, SerializerFactoryPtr(new TupleSerializerFactory())}, - {type::Descriptor::ePair, SerializerFactoryPtr(new PairSerializerFactory())}, - {type::Descriptor::eNDArray, SerializerFactoryPtr(new NDArraySerializerFactory())}, - {type::Descriptor::eEigenMatrix, SerializerFactoryPtr(new EigenMatrixSerializerFactory())}, - {type::Descriptor::eEigenQuaternion, SerializerFactoryPtr(new EigenQuaternionSerializerFactory())}, - {type::Descriptor::eIVTCByteImage, SerializerFactoryPtr(new IVTCByteImageSerializerFactory())}, - {type::Descriptor::eOpenCVMat, SerializerFactoryPtr(new OpenCVMatSerializerFactory())}, - {type::Descriptor::ePCLPointCloud, SerializerFactoryPtr(new PCLPointCloudSerializerFactory())}, - {type::Descriptor::ePosition, SerializerFactoryPtr(new PositionSerializerFactory())}, - {type::Descriptor::eOrientation, SerializerFactoryPtr(new OrientationSerializerFactory())}, - {type::Descriptor::ePose, SerializerFactoryPtr(new PoseSerializerFactory())}, - {type::Descriptor::eIntEnum, SerializerFactoryPtr(new IntEnumSerializerFactory())}, - {type::Descriptor::eInt, SerializerFactoryPtr(new IntSerializerFactory())}, - {type::Descriptor::eLong, SerializerFactoryPtr(new LongSerializerFactory())}, - {type::Descriptor::eFloat, SerializerFactoryPtr(new FloatSerializerFactory())}, - {type::Descriptor::eDouble, SerializerFactoryPtr(new DoubleSerializerFactory())}, - {type::Descriptor::eString, SerializerFactoryPtr(new StringSerializerFactory())}, - {type::Descriptor::eBool, SerializerFactoryPtr(new BoolSerializerFactory())}, - {type::Descriptor::eTime, SerializerFactoryPtr(new TimeSerializerFactory())} + HANDLE_ALL_ARON_TYPES }; +#undef RUN_ARON_MACRO //CheckIfPtrIsNull("NavigatorFactory", "create", path, n); - auto res = n->toAronPtr(); - auto factory_iterator = Factories.find(Resolver::GetDescriptor(res)); + auto factory_iterator = Factories.find(n->getDescriptor()); if (factory_iterator == Factories.end()) { - throw error::AronException("NavigatorFactory", "create", "Cannot find the desired factory for input (ice_id): " + res->ice_id() + ". Cannot create navigator", path); + throw error::AronException("NavigatorFactory", "create", "Cannot find the desired factory for input (ice_id): " + n->toAronPtr()->ice_id() + ". Cannot create navigator", path); } return factory_iterator->second->createSpecific(n, path); } @@ -77,11 +58,9 @@ namespace armarx::aron::cppserializer // Factories #define RUN_ARON_MACRO(upperType, lowerType, capsType) \ - SerializerPtr upperType##SerializerFactory::createSpecific(const typenavigator::NavigatorPtr& n, const Path& path) const \ + SerializerPtr upperType##SerializerFactory::createSpecific(const typenavigator::NavigatorPtr& n, const Path&) const \ { \ - /*CheckIfInputIsNull("Aron"+std::string(#upperType)+"TypeCppSerializerFactory", "createSpecific[BeforeCast]", path, n); */\ - typenavigator::upperType##NavigatorPtr casted = typenavigator::upperType##Navigator::DynamicCast(n); \ - /*CheckIfInputIsNull("Aron"+std::string(#upperType)+"TypeCppSerializerFactory", "createSpecific[AfterCast]", path, casted); */\ + typenavigator::upperType##NavigatorPtr casted = typenavigator::upperType##Navigator::DynamicCastAndCheck(n); \ return SerializerPtr(new serializer::upperType##Serializer(casted)); \ } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.cpp index cec291fd1..d5ee832a5 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.cpp @@ -29,10 +29,9 @@ namespace armarx::aron::cppserializer::serializer { // constructors DictSerializer::DictSerializer(const typenavigator::DictNavigatorPtr& e) : - Serializer("std::map<std::string, " + FromAronTypeNaviagtorPtr(e->getAcceptedType())->getFullCppTypename() + ">", + detail::ContainerSerializerBase<typenavigator::DictNavigator, DictSerializer>("std::map<std::string, " + FromAronTypeNaviagtorPtr(e->getAcceptedType())->getFullCppTypename() + ">", simox::meta::get_type_name(typeid(data::AronDict)), - simox::meta::get_type_name(typeid(type::AronDict))), - detail::SerializerBase<typenavigator::DictNavigator, DictSerializer>(e) + simox::meta::get_type_name(typeid(type::AronDict)), e) { } @@ -54,7 +53,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr DictSerializer::getWriteTypeBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - b->addLine("w.writeStartDict({" + std::string(typenavigator->isOptional() ? "true" : "false") + "});"); + b->addLine("w.writeStartDict({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "});"); std::string escaped_accessor = EscapeAccessor(accessor); std::string accessor_iterator = escaped_accessor + DICT_ITERATOR_ACCESSOR; @@ -75,7 +74,7 @@ namespace armarx::aron::cppserializer::serializer std::string accessor_iterator_key = escaped_accessor + DICT_KEY_ACCESSOR; std::string accessor_iterator_val = escaped_accessor + DICT_VALUE_ACCESSOR; - std::string resolved_accessor = ResolveOptionalAccessor(accessor, typenavigator); + std::string resolved_accessor = ResolveMaybeAccessor(accessor, typenavigator); block_if_data->addLine("for (const auto& [" + accessor_iterator_key + ", " + accessor_iterator_val + "] : " + resolved_accessor + ") "); @@ -86,7 +85,7 @@ namespace armarx::aron::cppserializer::serializer block_if_data->addBlock(b2); block_if_data->addLine("w.writeEndDict();"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr DictSerializer::getReadBlock(const std::string& accessor) const @@ -108,7 +107,7 @@ namespace armarx::aron::cppserializer::serializer b2->addLine(accessor + nextEl() + "insert({" + accessor_iterator_key + ", " + accessor_iterator + "});"); block_if_data->addBlock(b2); - return ResolveOptionalReadBlock(accessor, "r.readStartDict()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartDict()", block_if_data, typenavigator); } CppBlockPtr DictSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.h index 287585d2d..9bd48144a 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.h @@ -40,7 +40,7 @@ namespace armarx::aron::cppserializer::serializer typedef std::shared_ptr<DictSerializer> DictSerializerPtr; class DictSerializer : - virtual public detail::ContainerSerializerBase<typenavigator::DictNavigator, DictSerializer> + public detail::ContainerSerializerBase<typenavigator::DictNavigator, DictSerializer> { public: using PointerType = DictSerializerPtr; @@ -63,7 +63,5 @@ namespace armarx::aron::cppserializer::serializer static constexpr const char* DICT_ITERATOR_ACCESSOR = "_iterator"; static constexpr const char* DICT_KEY_ACCESSOR = "_key"; static constexpr const char* DICT_VALUE_ACCESSOR = "_value"; - - typenavigator::DictNavigatorPtr typenavigator; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.cpp index 7d1e67b70..1aa21fe91 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.cpp @@ -28,12 +28,10 @@ namespace armarx::aron::cppserializer::serializer { // constructors ListSerializer::ListSerializer(const typenavigator::ListNavigatorPtr& e) : - Serializer("std::vector<" + FromAronTypeNaviagtorPtr(e->getAcceptedType())->getFullCppTypename() + ">", + detail::ContainerSerializerBase<typenavigator::ListNavigator, ListSerializer>("std::vector<" + FromAronTypeNaviagtorPtr(e->getAcceptedType())->getFullCppTypename() + ">", simox::meta::get_type_name(typeid(data::AronList)), - simox::meta::get_type_name(typeid(type::AronList))), - detail::SerializerBase<typenavigator::ListNavigator, ListSerializer>(e) + simox::meta::get_type_name(typeid(type::AronList)), e) { - } CppBlockPtr ListSerializer::getResetSoftBlock(const std::string& accessor) const @@ -53,7 +51,8 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr ListSerializer::getWriteTypeBlock(const std::string&) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - b->addLine("w.writeStartList({" + std::string(typenavigator->isOptional() ? "true" : "false") + "});"); + + b->addLine("w.writeStartList({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "});"); auto type_s = FromAronTypeNaviagtorPtr(typenavigator->getAcceptedType()); CppBlockPtr b2 = type_s->getWriteTypeBlock(type_s->getFullCppTypename()); @@ -76,7 +75,7 @@ namespace armarx::aron::cppserializer::serializer block_if_data->addBlock(type_s->getWriteBlock(accessor + nextEl() + "at(" + accessor_iterator + ")")); block_if_data->addLine("w.writeEndList();"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr ListSerializer::getReadBlock(const std::string& accessor) const @@ -95,7 +94,7 @@ namespace armarx::aron::cppserializer::serializer b2->addLine(accessor + nextEl() + "push_back(" + accessor_iterator + ");"); block_if_data->addBlock(b2); - return ResolveOptionalReadBlock(accessor, "r.readStartList()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartList()", block_if_data, typenavigator); } CppBlockPtr ListSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.h index 7073196ab..6b8afaabe 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.h @@ -59,7 +59,5 @@ namespace armarx::aron::cppserializer::serializer private: // members static constexpr const char* LIST_ITERATOR_ACCESSOR = "_iterator"; - - typenavigator::ListNavigatorPtr typenavigator; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.cpp index 61f952777..c5dd78ce3 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.cpp @@ -29,23 +29,22 @@ namespace armarx::aron::cppserializer::serializer { // constructors ObjectSerializer::ObjectSerializer(const typenavigator::ObjectNavigatorPtr& e) : - Serializer(e->getObjectName(), + detail::ContainerSerializerBase<typenavigator::ObjectNavigator, ObjectSerializer>(e->getObjectName(), simox::meta::get_type_name(typeid(data::AronDict)), - simox::meta::get_type_name(typeid(type::AronObject))), - detail::SerializerBase<typenavigator::DictNavigator, DictSerializer>(e) + simox::meta::get_type_name(typeid(type::AronObject)), e) { } CppBlockPtr ObjectSerializer::getResetSoftBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - if (typenavigator->isOptional()) + if (typenavigator->getMaybe() != type::Maybe::eNone) { b->addLine(accessor + " = {};"); } else { - b->addLine(accessor + nextEl() + "reset();"); + b->addLine(accessor + nextEl() + "resetSoft();"); } return b; } @@ -53,13 +52,13 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr ObjectSerializer::getResetHardBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - if (typenavigator->isOptional()) + if (typenavigator->getMaybe() != type::Maybe::eNone) { b->addLine(accessor + " = {};"); } else { - b->addLine(accessor + nextEl() + "initialize();"); + b->addLine(accessor + nextEl() + "resetHard();"); } return b; } @@ -67,7 +66,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr ObjectSerializer::getWriteTypeBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - b->addLine(accessor + "::writeType(w, " + std::string(typenavigator->isOptional() ? "true" : "false") + ");"); + b->addLine(accessor + "::writeType(w, " + MAYBE_TO_STRING(typenavigator->getMaybe()) + ");"); return b; } @@ -76,14 +75,14 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine(accessor + nextEl() + "write(w);"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr ObjectSerializer::getReadBlock(const std::string& accessor) const { CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine(accessor + nextEl() + "read(r, true);"); - return ResolveOptionalReadBlock(accessor, "r.readStartDict()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartDict()", block_if_data, typenavigator); } CppBlockPtr ObjectSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.h index 071abc6a0..d04a44557 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.h @@ -41,7 +41,7 @@ namespace armarx::aron::cppserializer::serializer typedef std::shared_ptr<ObjectSerializer> ObjectSerializerPtr; class ObjectSerializer : - virtual public detail::ContainerSerializerBase<typenavigator::ObjectNavigator, ObjectSerializer> + public detail::ContainerSerializerBase<typenavigator::ObjectNavigator, ObjectSerializer> { public: using PointerType = ObjectSerializerPtr; @@ -61,7 +61,5 @@ namespace armarx::aron::cppserializer::serializer private: // members static constexpr const char* EXTENDS_ITERATOR_ACCESSOR = "_extends"; - - typenavigator::ObjectNavigatorPtr typenavigator; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.cpp index 75cc12ead..5b7fac538 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.cpp @@ -28,29 +28,27 @@ namespace armarx::aron::cppserializer::serializer { PairSerializer::PairSerializer(const typenavigator::PairNavigatorPtr& e) : - Serializer("std::pair<" + ExtractCppTypename(e->getFirstAcceptedType()) + ", " + ExtractCppTypename(e->getSecondAcceptedType()) + ">", + detail::ContainerSerializerBase<typenavigator::PairNavigator, PairSerializer>("std::pair<" + ExtractCppTypename(e->getFirstAcceptedType()) + ", " + ExtractCppTypename(e->getSecondAcceptedType()) + ">", simox::meta::get_type_name(typeid(data::AronList)), - simox::meta::get_type_name(typeid(type::AronPair))), - detail::SerializerBase<typenavigator::PairNavigator, PairSerializer>(e) + simox::meta::get_type_name(typeid(type::AronPair)), e) { - } CppBlockPtr PairSerializer::getResetHardBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - if (typenavigator->isOptional()) + if (typenavigator->getMaybe() != type::Maybe::eNone) { b->addLine(accessor + " = {};"); } else { auto child_s1 = FromAronTypeNaviagtorPtr(typenavigator->getFirstAcceptedType()); - CppBlockPtr b21 = child_s1->getInitializeBlock(accessor + nextEl() + "first"); + CppBlockPtr b21 = child_s1->getResetHardBlock(accessor + nextEl() + "first"); b->appendBlock(b21); auto child_s2 = FromAronTypeNaviagtorPtr(typenavigator->getSecondAcceptedType()); - CppBlockPtr b22 = child_s2->getInitializeBlock(accessor + nextEl() + "second"); + CppBlockPtr b22 = child_s2->getResetHardBlock(accessor + nextEl() + "second"); b->appendBlock(b22); } return b; @@ -59,18 +57,18 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr PairSerializer::getResetSoftBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - if (typenavigator->isOptional()) + if (typenavigator->getMaybe() != type::Maybe::eNone) { b->addLine(accessor + " = {};"); } else { auto child_s1 = FromAronTypeNaviagtorPtr(typenavigator->getFirstAcceptedType()); - CppBlockPtr b21 = child_s1->getResetBlock(accessor + nextEl() + "first"); + CppBlockPtr b21 = child_s1->getResetSoftBlock(accessor + nextEl() + "first"); b->appendBlock(b21); auto child_s2 = FromAronTypeNaviagtorPtr(typenavigator->getSecondAcceptedType()); - CppBlockPtr b22 = child_s2->getResetBlock(accessor + nextEl() + "second"); + CppBlockPtr b22 = child_s2->getResetSoftBlock(accessor + nextEl() + "second"); b->appendBlock(b22); } return b; @@ -79,7 +77,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr PairSerializer::getWriteTypeBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - b->addLine("w.writeStartPair({" + std::string(typenavigator->isOptional() ? "true" : "false") + "});"); + b->addLine("w.writeStartPair({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "});"); std::string escaped_accessor = EscapeAccessor(accessor); @@ -114,7 +112,7 @@ namespace armarx::aron::cppserializer::serializer block_if_data->addLine("w.writeEndList();"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr PairSerializer::getReadBlock(const std::string& accessor) const @@ -130,7 +128,7 @@ namespace armarx::aron::cppserializer::serializer block_if_data->appendBlock(b22); block_if_data->addLine("r.readEndList();"); - return ResolveOptionalReadBlock(accessor, "r.readStartList()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartList()", block_if_data, typenavigator); } CppBlockPtr PairSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.h index fb9a71970..a7ef2495b 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.h @@ -40,7 +40,7 @@ namespace armarx::aron::cppserializer::serializer typedef std::shared_ptr<PairSerializer> PairSerializerPtr; class PairSerializer : - virtual public detail::ContainerSerializerBase<typenavigator::PairNavigator, PairSerializer> + public detail::ContainerSerializerBase<typenavigator::PairNavigator, PairSerializer> { public: using PointerType = PairSerializerPtr; @@ -61,8 +61,5 @@ namespace armarx::aron::cppserializer::serializer // members static constexpr const char* PAIR_FIRST_ACCESSOR = "_first"; static constexpr const char* PAIR_SECOND_ACCESSOR = "_second"; - - - typenavigator::PairNavigatorPtr typenavigator; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.cpp index abe891a15..643f16570 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.cpp @@ -28,10 +28,9 @@ namespace armarx::aron::cppserializer::serializer { TupleSerializer::TupleSerializer(const typenavigator::TupleNavigatorPtr& e) : - Serializer("std::tuple<" + simox::alg::join(ExtractCppTypenames(e->getAcceptedTypes()), ", ") + ">", + detail::ContainerSerializerBase<typenavigator::TupleNavigator, TupleSerializer>("std::tuple<" + simox::alg::join(ExtractCppTypenames(e->getAcceptedTypes()), ", ") + ">", simox::meta::get_type_name(typeid(data::AronList)), - simox::meta::get_type_name(typeid(type::AronTuple))), - detail::SerializerBase<typenavigator::TupleNavigator, TupleSerializer>(e) + simox::meta::get_type_name(typeid(type::AronTuple)), e) { } @@ -48,7 +47,7 @@ namespace armarx::aron::cppserializer::serializer for (const auto& child : typenavigator->getAcceptedTypes()) { auto child_s = FromAronTypeNaviagtorPtr(child); - CppBlockPtr b2 = child_s->getInitializeBlock("std::get<" + std::to_string(i++) + ">(" + accessor + ")"); + CppBlockPtr b2 = child_s->getResetHardBlock("std::get<" + std::to_string(i++) + ">(" + accessor + ")"); b->appendBlock(b2); } } @@ -58,7 +57,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr TupleSerializer::getResetSoftBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - if (typenavigator->isOptional()) + if (typenavigator->getMaybe() != type::Maybe::eNone) { b->addLine(accessor + " = {};"); } @@ -68,7 +67,7 @@ namespace armarx::aron::cppserializer::serializer for (const auto& type : typenavigator->getAcceptedTypes()) { auto type_s = FromAronTypeNaviagtorPtr(type); - CppBlockPtr b2 = type_s->getResetBlock("std::get<" + std::to_string(i++) + ">(" + accessor + ")"); + CppBlockPtr b2 = type_s->getResetSoftBlock("std::get<" + std::to_string(i++) + ">(" + accessor + ")"); b->appendBlock(b2); } } @@ -78,7 +77,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr TupleSerializer::getWriteTypeBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - b->addLine("w.writeStartTuple({" + std::string(typenavigator->isOptional() ? "true" : "false") + "});"); + b->addLine("w.writeStartTuple({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "});"); std::string escaped_accessor = EscapeAccessor(accessor); unsigned int i = 0; @@ -99,7 +98,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("w.writeStartList();"); - std::string resolved_accessor = ResolveOptionalAccessor(accessor, typenavigator); + std::string resolved_accessor = ResolveMaybeAccessor(accessor, typenavigator); unsigned int i = 0; for (const auto& type : typenavigator->getAcceptedTypes()) @@ -110,14 +109,14 @@ namespace armarx::aron::cppserializer::serializer } block_if_data->addLine("w.writeEndList();"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr TupleSerializer::getReadBlock(const std::string& accessor) const { CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); - std::string resolved_accessor = ResolveOptionalAccessor(accessor, typenavigator); + std::string resolved_accessor = ResolveMaybeAccessor(accessor, typenavigator); unsigned int i = 0; for (const auto& type : typenavigator->getAcceptedTypes()) @@ -127,7 +126,7 @@ namespace armarx::aron::cppserializer::serializer block_if_data->appendBlock(b2); } block_if_data->addLine("r.readEndList();"); - return ResolveOptionalReadBlock(accessor, "r.readStartList()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartList()", block_if_data, typenavigator); } CppBlockPtr TupleSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.h index 3cb5cc67c..d8ec0bf42 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.h @@ -40,7 +40,7 @@ namespace armarx::aron::cppserializer::serializer typedef std::shared_ptr<TupleSerializer> TupleSerializerPtr; class TupleSerializer : - virtual public detail::ContainerSerializerBase<typenavigator::TupleNavigator, TupleSerializer> + public detail::ContainerSerializerBase<typenavigator::TupleNavigator, TupleSerializer> { public: using PointerType = TupleSerializerPtr; @@ -60,7 +60,5 @@ namespace armarx::aron::cppserializer::serializer private: // members static constexpr const char* TUPLE_ITERATOR_ACCESSOR = "_iterator"; - - typenavigator::TupleNavigatorPtr typenavigator; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/ContainerSerializerBase.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/ContainerSerializerBase.h index 6275e328b..d2ca8f77e 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/ContainerSerializerBase.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/ContainerSerializerBase.h @@ -37,9 +37,12 @@ namespace armarx::aron::cppserializer::detail { template<typename TypenavigatorT, typename DerivedT> class ContainerSerializerBase : - virtual public SerializerBase<TypenavigatorT, DerivedT> + public SerializerBase<TypenavigatorT, DerivedT> { - public: + ContainerSerializerBase(const std::string& cppName, const std::string& aronDataTypename, const std::string& aronTypeTypename, const typename TypenavigatorT::PointerType& t) : + SerializerBase<TypenavigatorT, DerivedT>(cppName, aronDataTypename, aronTypeTypename, t) + { + } }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/NDArraySerializerBase.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/NDArraySerializerBase.h index 7025af0ec..67b6c0435 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/NDArraySerializerBase.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/NDArraySerializerBase.h @@ -37,9 +37,11 @@ namespace armarx::aron::cppserializer::detail { template<typename TypenavigatorT, typename DerivedT> class NDArraySerializerBase : - virtual public SerializerBase<TypenavigatorT, DerivedT> + public SerializerBase<TypenavigatorT, DerivedT> { - public: + NDArraySerializerBase(const std::string& cppName, const std::string& aronDataTypename, const std::string& aronTypeTypename, const typename TypenavigatorT::PointerType& t) : + SerializerBase<TypenavigatorT, DerivedT>(cppName, aronDataTypename, aronTypeTypename, t) + {} }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/PrimitiveSerializerBase.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/PrimitiveSerializerBase.h index 2747635d9..ef187424d 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/PrimitiveSerializerBase.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/PrimitiveSerializerBase.h @@ -37,32 +37,49 @@ namespace armarx::aron::cppserializer::detail { template<typename TypenavigatorT, typename DerivedT> class PrimitiveSerializerBase : - virtual public SerializerBase<TypenavigatorT, DerivedT> + public SerializerBase<TypenavigatorT, DerivedT> { - public: + PrimitiveSerializerBase(const std::string& cppName, const std::string& aronDataTypename, const std::string& aronTypeTypename, const typename TypenavigatorT::PointerType& t) : + SerializerBase<TypenavigatorT, DerivedT>(cppName, aronDataTypename, aronTypeTypename, t) + {} + + virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const + { + CppBlockPtr b = CppBlockPtr(new CppBlock()); + b->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();"); + return b; + } + + virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const + { + CppBlockPtr b = CppBlockPtr(new CppBlock()); + b->addLine(accessor + " = " + this->getFullCppTypename() + "();"); + return b; + } + virtual CppBlockPtr getWriteBlock(const std::string& accessor) const override { CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); - std::string resolved_accessor = ResolveOptionalAccessor(accessor, this->typenavigator); + std::string resolved_accessor = this->ResolveMaybeAccessor(accessor, this->typenavigator); block_if_data->addLine("w.writePrimitive(" + resolved_accessor + ");"); - return ResolveOptionalWriteBlock(accessor, block_if_data, this->typenavigator); + return this->ResolveMaybeWriteBlock(accessor, block_if_data, this->typenavigator); } virtual CppBlockPtr getReadBlock(const std::string& accessor) const override { CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); - std::string resolved_accessor = ResolveOptionalAccessor(accessor, this->typenavigator); + std::string resolved_accessor = this->ResolveMaybeAccessor(accessor, this->typenavigator); block_if_data->addLine("r.readEndPrimitive(" + resolved_accessor + ");"); - return ResolveOptionalReadBlock(accessor, "r.readStartPrimitive()", block_if_data, this->typenavigator); + return this->ResolveMaybeReadBlock(accessor, "r.readStartPrimitive()", block_if_data, this->typenavigator); } virtual CppBlockPtr getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const override { CppBlockPtr b = CppBlockPtr(new CppBlock()); b->addLine("if (not (" + accessor + " == " + otherInstanceAccessor + "))"); - b->addLine("t return false;"); + b->addLine("\t return false;"); return b; } }; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/SerializerBase.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/SerializerBase.h index 637c5de5e..06370ed75 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/SerializerBase.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/SerializerBase.h @@ -37,15 +37,15 @@ namespace armarx::aron::cppserializer::detail { template<typename TypenavigatorT, typename DerivedT> class SerializerBase : - virtual public cppserializer::Serializer + public cppserializer::Serializer { public: using PointerType = std::shared_ptr<DerivedT>; using TypenavigatorType = TypenavigatorT; public: - SerializerBase() = default; - SerializerBase(const typename TypenavigatorType::PointerType& t) : + SerializerBase(const std::string& cppName, const std::string& aronDataTypename, const std::string& aronTypeTypename, const typename TypenavigatorType::PointerType& t) : + Serializer(cppName, aronDataTypename, aronTypeTypename), typenavigator(t) { ARMARX_CHECK_NOT_NULL(typenavigator); @@ -57,6 +57,8 @@ namespace armarx::aron::cppserializer::detail { case type::Maybe::eNone: return getCoreCppTypename(); + case type::Maybe::eOptional: + return "std::optional<" + getCoreCppTypename() + ">"; case type::Maybe::eRawPointer: return "*" + getCoreCppTypename(); case type::Maybe::eSharedPointer: @@ -64,7 +66,7 @@ namespace armarx::aron::cppserializer::detail case type::Maybe::eUniquePointer: return "std::unique_ptr<" + getCoreCppTypename() + ">"; default: - throw error::AronException("Serializer", "getFullCppTypename", "Received unknown maybe enum"); + throw error::MaybeNotValidException("SerializerBase", "getFullCppTypename", "Received unknown maybe enum", typenavigator->getMaybe(), typenavigator->getPath()); } } @@ -74,6 +76,8 @@ namespace armarx::aron::cppserializer::detail { case type::Maybe::eNone: return getCoreCppTypename(); + case type::Maybe::eOptional: + return "std::make_optional<" + getCoreCppTypename() + ">"; case type::Maybe::eRawPointer: return "new " + getCoreCppTypename(); case type::Maybe::eSharedPointer: @@ -81,7 +85,7 @@ namespace armarx::aron::cppserializer::detail case type::Maybe::eUniquePointer: return "std::make_unique<" + getCoreCppTypename() + ">"; default: - throw error::AronException("Serializer", "getFullTypenameGenerator", "Received unknown maybe enum"); + throw error::MaybeNotValidException("SerializerBase", "getFullTypenameGenerator", "Received unknown maybe enum", typenavigator->getMaybe(), typenavigator->getPath()); } } @@ -110,12 +114,13 @@ namespace armarx::aron::cppserializer::detail { case type::Maybe::eNone: return "."; + case type::Maybe::eOptional: case type::Maybe::eRawPointer: case type::Maybe::eSharedPointer: case type::Maybe::eUniquePointer: return "->"; default: - throw error::AronException("Serializer", "nextEl", "Received unknown maybe enum"); + throw error::MaybeNotValidException("SerializerBase", "nextEl", "Received unknown maybe enum", typenavigator->getMaybe(), typenavigator->getPath()); } } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/enum/IntEnum.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/enum/IntEnum.cpp index 70deabc17..73b9cfa58 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/enum/IntEnum.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/enum/IntEnum.cpp @@ -28,10 +28,9 @@ namespace armarx::aron::cppserializer::serializer { // constructors IntEnumSerializer::IntEnumSerializer(const typenavigator::IntEnumNavigatorPtr& e) : - Serializer(e->getEnumName(), + detail::SerializerBase<typenavigator::IntEnumNavigator, IntEnumSerializer>(e->getEnumName(), simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronIntEnum))), - detail::SerializerBase<typenavigator::IntEnumNavigator, IntEnumSerializer>(e) + simox::meta::get_type_name(typeid(type::AronIntEnum)), e) { } @@ -75,7 +74,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine(accessor + nextEl() + "write(w);"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr IntEnumSerializer::getReadBlock(const std::string& accessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.cpp index b4c02b76e..34c90f38a 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.cpp @@ -40,11 +40,11 @@ namespace armarx::aron::cppserializer::serializer // constructors EigenMatrixSerializer::EigenMatrixSerializer(const typenavigator::EigenMatrixNavigatorPtr& n) : - Serializer("Eigen::Matrix<" + ACCEPTED_TYPES.at(n->getTypename()).first + ", " + std::to_string(n->getRows()) + ", " + std::to_string(n->getCols()) + ">", + detail::NDArraySerializerBase<typenavigator::EigenMatrixNavigator, EigenMatrixSerializer>("Eigen::Matrix<" + ACCEPTED_TYPES.at(n->getTypename()).first + ", " + std::to_string(n->getRows()) + ", " + std::to_string(n->getCols()) + ">", simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronEigenMatrix))), - detail::SerializerBase<typenavigator::EigenMatrixNavigator, EigenMatrixSerializer>(n) + simox::meta::get_type_name(typeid(type::AronEigenMatrix)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); } CppBlockPtr EigenMatrixSerializer::getResetHardBlock(const std::string& accessor) const @@ -73,20 +73,20 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("w.writeNDArray({" + accessor + nextEl() + "rows(), " + accessor + nextEl() + "cols(), " + std::to_string(ACCEPTED_TYPES.at(typenavigator->getTypename()).second) + "}, \"" + typenavigator->getTypename() + "\", reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "data()));"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr EigenMatrixSerializer::getReadBlock(const std::string& accessor) const { CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "data()));"); - return ResolveOptionalReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr EigenMatrixSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - b->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))"); + b->addLine("if (not (" + accessor + nextEl() + "isApprox(" + ResolveMaybeAccessor(otherInstanceAccessor, typenavigator) + ")))"); b->addLine("\t return false;"); return b; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.cpp index fe619bd29..17eca9bd2 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.cpp @@ -35,11 +35,11 @@ namespace armarx::aron::cppserializer::serializer // constructors EigenQuaternionSerializer::EigenQuaternionSerializer(const typenavigator::EigenQuaternionNavigatorPtr& n) : - Serializer("Eigen::Quaternion<" + ACCEPTED_TYPES.at(n->getTypename()).first + ">", + detail::NDArraySerializerBase<typenavigator::EigenQuaternionNavigator, EigenQuaternionSerializer>("Eigen::Quaternion<" + ACCEPTED_TYPES.at(n->getTypename()).first + ">", simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronEigenQuaternion))), - detail::SerializerBase<typenavigator::EigenQuaternionNavigator, EigenQuaternionSerializer>(n) + simox::meta::get_type_name(typeid(type::AronEigenQuaternion)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); } CppBlockPtr EigenQuaternionSerializer::getResetHardBlock(const std::string& accessor) const @@ -68,14 +68,14 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("w.writeNDArray({" + simox::alg::to_string(typenavigator->ACCEPTED_DIMENSION, ", ") + ", " + std::to_string(ACCEPTED_TYPES.at(typenavigator->getTypename()).second) + "}, \"" + typenavigator->getTypename() + "\", reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "coeffs().data()));"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr EigenQuaternionSerializer::getReadBlock(const std::string& accessor) const { CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "coeffs().data()));"); - return ResolveOptionalReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr EigenQuaternionSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.cpp index 88b4fed73..f7f4a1d03 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.cpp @@ -36,11 +36,11 @@ namespace armarx::aron::cppserializer::serializer // constructors IVTCByteImageSerializer::IVTCByteImageSerializer(const typenavigator::IVTCByteImageNavigatorPtr& n) : - Serializer("CByteImage", + detail::NDArraySerializerBase<typenavigator::IVTCByteImageNavigator, IVTCByteImageSerializer>("CByteImage", simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronIVTCByteImage))), - detail::SerializerBase<typenavigator::IVTCByteImageNavigator, IVTCByteImageSerializer>(n) + simox::meta::get_type_name(typeid(type::AronIVTCByteImage)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); } CppBlockPtr IVTCByteImageSerializer::getResetHardBlock(const std::string& accessor) const @@ -50,13 +50,6 @@ namespace armarx::aron::cppserializer::serializer return b; } - CppBlockPtr IVTCByteImageSerializer::getResetSoftBlock(const std::string& accessor) const - { - CppBlockPtr b = CppBlockPtr(new CppBlock()); - b->addLine(accessor + " = " + this->getFullCppTypename() + "();"); - return b; - } - CppBlockPtr IVTCByteImageSerializer::getResetSoftBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); @@ -76,7 +69,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("w.writeNDArray({" + accessor + nextEl() + "width, " + accessor + nextEl() + "height, " + accessor + nextEl() + "bytesPerPixel}, std::to_string(" + accessor + nextEl() + "type), reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "pixels));"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr IVTCByteImageSerializer::getReadBlock(const std::string& accessor) const @@ -87,7 +80,7 @@ namespace armarx::aron::cppserializer::serializer block_if_data->addLine(accessor + nextEl() + "Set(" + read_start_result_accessor + ".dims[0], " + read_start_result_accessor + ".dims[1], static_cast<CByteImage::ImageType>(std::stoi(" + read_start_result_accessor + ".type)));"); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "pixels));"); - return ResolveOptionalReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr IVTCByteImageSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.h index 98383381a..07e618429 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.h @@ -53,7 +53,6 @@ namespace armarx::aron::cppserializer::serializer virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override; virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override; virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override; - virtual CppBlockPtr getResetSoftBlock(const std::string&) const override; virtual CppBlockPtr getWriteBlock(const std::string&) const override; virtual CppBlockPtr getReadBlock(const std::string&) const override; virtual CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.cpp index 1c2623320..43e7f183f 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.cpp @@ -28,11 +28,11 @@ namespace armarx::aron::cppserializer::serializer { // constructors NDArraySerializer::NDArraySerializer(const typenavigator::NDArrayNavigatorPtr& n) : - Serializer("NDArray", + detail::NDArraySerializerBase<typenavigator::NDArrayNavigator, NDArraySerializer>("NDArray", simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronNDArray))), - detail::SerializerBase<typenavigator::NDArrayNavigator, NDArraySerializer>(n) + simox::meta::get_type_name(typeid(type::AronNDArray)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); } CppBlockPtr NDArraySerializer::getResetHardBlock(const std::string& accessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.cpp index 83e4c4689..3631eb1ff 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.cpp @@ -40,11 +40,11 @@ namespace armarx::aron::cppserializer::serializer // constructors OpenCVMatSerializer::OpenCVMatSerializer(const typenavigator::OpenCVMatNavigatorPtr& n) : - Serializer("cv::Mat", + detail::NDArraySerializerBase<typenavigator::OpenCVMatNavigator, OpenCVMatSerializer>("cv::Mat", simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronOpenCVMat))), - detail::SerializerBase<typenavigator::OpenCVMatNavigator, OpenCVMatSerializer>(n) + simox::meta::get_type_name(typeid(type::AronOpenCVMat)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); } CppBlockPtr OpenCVMatSerializer::getResetHardBlock(const std::string& accessor) const @@ -94,7 +94,7 @@ namespace armarx::aron::cppserializer::serializer block_if_data->addLine(accessor_dimensions + ".push_back(" + accessor + nextEl() + "elemSize());"); block_if_data->addLine("w.writeNDArray(" + accessor_dimensions + ", std::to_string(" + accessor + nextEl() + "type()), reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "data));"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr OpenCVMatSerializer::getReadBlock(const std::string& accessor) const @@ -105,7 +105,7 @@ namespace armarx::aron::cppserializer::serializer block_if_data->addLine(accessor + " = " + getCoreCppTypename() + "(std::vector<int>({" + read_start_result_accessor + ".dims.begin(), std::prev(" + read_start_result_accessor + ".dims.end())}), std::stoi(" + read_start_result_accessor + ".type));"); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "data));"); - return ResolveOptionalReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr OpenCVMatSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.cpp index 428fd4553..13023745e 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.cpp @@ -28,11 +28,11 @@ namespace armarx::aron::cppserializer::serializer { // constructors OrientationSerializer::OrientationSerializer(const typenavigator::OrientationNavigatorPtr& n) : - Serializer("Eigen::Quaternion<" + n->ACCEPTED_TYPE + ">", + detail::NDArraySerializerBase<typenavigator::OrientationNavigator, OrientationSerializer>("Eigen::Quaternion<" + n->ACCEPTED_TYPE + ">", simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronOrientation))), - detail::SerializerBase<typenavigator::OrientationNavigator, OrientationSerializer>(n) + simox::meta::get_type_name(typeid(type::AronOrientation)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); } CppBlockPtr OrientationSerializer::getResetHardBlock(const std::string& accessor) const @@ -61,14 +61,14 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("w.writeNDArray({" + simox::alg::to_string(typenavigator->ACCEPTED_DIMENSION, ", ") + ", 4}, \"" + typenavigator->ACCEPTED_TYPE + "\", reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "coeffs().data()));"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr OrientationSerializer::getReadBlock(const std::string& accessor) const { CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "coeffs().data()));"); - return ResolveOptionalReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr OrientationSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.cpp index e86b8ec3f..09196a8b6 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.cpp @@ -41,11 +41,11 @@ namespace armarx::aron::cppserializer::serializer // constructors PCLPointCloudSerializer::PCLPointCloudSerializer(const typenavigator::PCLPointCloudNavigatorPtr& n) : - Serializer("pcl::PointCloud<" + ACCEPTED_TYPES.at(n->getTypename()).first + ">", + detail::NDArraySerializerBase<typenavigator::PCLPointCloudNavigator, PCLPointCloudSerializer>("pcl::PointCloud<" + ACCEPTED_TYPES.at(n->getTypename()).first + ">", simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronPCLPointCloud))), - detail::SerializerBase<typenavigator::PCLPointCloudNavigator, PCLPointCloudSerializer>(n) + simox::meta::get_type_name(typeid(type::AronPCLPointCloud)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); } CppBlockPtr PCLPointCloudSerializer::getResetHardBlock(const std::string& accessor) const @@ -81,7 +81,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("w.writeNDArray({" + accessor + nextEl() + "width, " + accessor + nextEl() + "height, " + std::to_string(ACCEPTED_TYPES.at(typenavigator->getTypename()).second) + "}, \"" + typenavigator->getTypename() + "\", reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "points.data()));"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr PCLPointCloudSerializer::getReadBlock(const std::string& accessor) const @@ -92,7 +92,7 @@ namespace armarx::aron::cppserializer::serializer block_if_data->addLine(accessor + " = " + getCoreCppTypename() + "(" + read_start_result_accessor + ".dims[0], " + read_start_result_accessor + ".dims[1]);"); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "points.data()));"); - return ResolveOptionalReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr PCLPointCloudSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.h index 9c6ee7f80..88d9b337b 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.h @@ -52,7 +52,6 @@ namespace armarx::aron::cppserializer::serializer virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override; virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override; virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override; - virtual CppBlockPtr getResetSoftBlock(const std::string&) const override; virtual CppBlockPtr getWriteBlock(const std::string&) const override; virtual CppBlockPtr getReadBlock(const std::string&) const override; virtual CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.cpp index 4583bf988..f755e5442 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.cpp @@ -28,11 +28,11 @@ namespace armarx::aron::cppserializer::serializer { // constructors PoseSerializer::PoseSerializer(const typenavigator::PoseNavigatorPtr& n) : - Serializer("Eigen::Matrix<" + n->ACCEPTED_TYPE + ", " + simox::alg::to_string(n->ACCEPTED_DIMENSION, ", ") + ">", + detail::NDArraySerializerBase<typenavigator::PoseNavigator, PoseSerializer>("Eigen::Matrix<" + n->ACCEPTED_TYPE + ", " + simox::alg::to_string(n->ACCEPTED_DIMENSION, ", ") + ">", simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronPose))), - detail::SerializerBase<typenavigator::PoseNavigator, PoseSerializer>(n) + simox::meta::get_type_name(typeid(type::AronPose)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); } CppBlockPtr PoseSerializer::getResetHardBlock(const std::string& accessor) const @@ -61,14 +61,14 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("w.writeNDArray({" + simox::alg::to_string(typenavigator->ACCEPTED_DIMENSION, ", ") + ", 4}, \"" + typenavigator->ACCEPTED_TYPE + "\", reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "data()));"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr PoseSerializer::getReadBlock(const std::string& accessor) const { CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "data()));"); - return ResolveOptionalReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr PoseSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.cpp index d14b7f593..109294d85 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.cpp @@ -28,11 +28,11 @@ namespace armarx::aron::cppserializer::serializer { // constructors PositionSerializer::PositionSerializer(const typenavigator::PositionNavigatorPtr& n) : - Serializer("Eigen::Matrix<" + n->ACCEPTED_TYPE + ", " + simox::alg::to_string(n->ACCEPTED_DIMENSION, ", ") + ">", + detail::NDArraySerializerBase<typenavigator::PositionNavigator, PositionSerializer>("Eigen::Matrix<" + n->ACCEPTED_TYPE + ", " + simox::alg::to_string(n->ACCEPTED_DIMENSION, ", ") + ">", simox::meta::get_type_name(typeid(data::AronNDArray)), - simox::meta::get_type_name(typeid(type::AronPosition))), - detail::SerializerBase<typenavigator::PositionNavigator, PositionSerializer>(n) + simox::meta::get_type_name(typeid(type::AronPosition)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); } CppBlockPtr PositionSerializer::getResetHardBlock(const std::string& accessor) const @@ -61,14 +61,14 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("w.writeNDArray({" + simox::alg::to_string(typenavigator->ACCEPTED_DIMENSION, ", ") + ", 4}, \"" + typenavigator->ACCEPTED_TYPE + "\", reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "data()));"); - return ResolveOptionalWriteBlock(accessor, block_if_data, typenavigator); + return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); } CppBlockPtr PositionSerializer::getReadBlock(const std::string& accessor) const { CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "data()));"); - return ResolveOptionalReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); + return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr PositionSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Bool.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Bool.cpp index dfe9fe835..cb0dcfdbb 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Bool.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Bool.cpp @@ -33,9 +33,9 @@ namespace armarx::aron::cppserializer::serializer { /* constructors */ BoolSerializer::BoolSerializer(const typenavigator::BoolNavigatorPtr& e) : - Serializer("bool", simox::meta::get_type_name(typeid(data::AronBool)), simox::meta::get_type_name(typeid(type::AronBool))), - detail::SerializerBase<typenavigator::BoolNavigator, BoolSerializer>(e) + detail::PrimitiveSerializerBase<typenavigator::BoolNavigator, BoolSerializer>("bool", simox::meta::get_type_name(typeid(data::AronBool)), simox::meta::get_type_name(typeid(type::AronBool)), e) { + ARMARX_CHECK_NOT_NULL(typenavigator); } /* virtual implementations */ diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Double.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Double.cpp index 04605d022..aa1b6deb2 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Double.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Double.cpp @@ -33,9 +33,9 @@ namespace armarx::aron::cppserializer::serializer { /* constructors */ DoubleSerializer::DoubleSerializer(const typenavigator::DoubleNavigatorPtr& e) : - Serializer("double", simox::meta::get_type_name(typeid(data::AronDouble)), simox::meta::get_type_name(typeid(type::AronDouble))), - detail::SerializerBase<typenavigator::DoubleNavigator, DoubleSerializer>(e) + detail::PrimitiveSerializerBase<typenavigator::DoubleNavigator, DoubleSerializer>("double", simox::meta::get_type_name(typeid(data::AronDouble)), simox::meta::get_type_name(typeid(type::AronDouble)), e) { + ARMARX_CHECK_NOT_NULL(typenavigator); } /* virtual implementations */ diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Float.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Float.cpp index 4092ae79f..b48272103 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Float.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Float.cpp @@ -33,9 +33,9 @@ namespace armarx::aron::cppserializer::serializer { /* constructors */ FloatSerializer::FloatSerializer(const typenavigator::FloatNavigatorPtr& e) : - Serializer("float", simox::meta::get_type_name(typeid(data::AronFloat)), simox::meta::get_type_name(typeid(type::AronFloat))), - detail::SerializerBase<typenavigator::FloatNavigator, FloatSerializer>(e) + detail::PrimitiveSerializerBase<typenavigator::FloatNavigator, FloatSerializer>("float", simox::meta::get_type_name(typeid(data::AronFloat)), simox::meta::get_type_name(typeid(type::AronFloat)), e) { + ARMARX_CHECK_NOT_NULL(typenavigator); } /* virtual implementations */ diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Int.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Int.cpp index fb1f6a3df..fb460dffb 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Int.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Int.cpp @@ -33,9 +33,9 @@ namespace armarx::aron::cppserializer::serializer { /* constructors */ IntSerializer::IntSerializer(const typenavigator::IntNavigatorPtr& e) : - Serializer("int", simox::meta::get_type_name(typeid(data::AronInt)), simox::meta::get_type_name(typeid(type::AronInt))), - detail::SerializerBase<typenavigator::IntNavigator, IntSerializer>(e) + detail::PrimitiveSerializerBase<typenavigator::IntNavigator, IntSerializer>("int", simox::meta::get_type_name(typeid(data::AronInt)), simox::meta::get_type_name(typeid(type::AronInt)), e) { + ARMARX_CHECK_NOT_NULL(typenavigator); } /* virtual implementations */ diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Long.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Long.cpp index 9fe388f6e..90f03a5f5 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Long.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Long.cpp @@ -33,9 +33,9 @@ namespace armarx::aron::cppserializer::serializer { /* constructors */ LongSerializer::LongSerializer(const typenavigator::LongNavigatorPtr& e) : - Serializer("long", simox::meta::get_type_name(typeid(data::AronLong)), simox::meta::get_type_name(typeid(type::AronLong))), - detail::SerializerBase<typenavigator::LongNavigator, LongSerializer>(e) + detail::PrimitiveSerializerBase<typenavigator::LongNavigator, LongSerializer>("long", simox::meta::get_type_name(typeid(data::AronLong)), simox::meta::get_type_name(typeid(type::AronLong)), e) { + ARMARX_CHECK_NOT_NULL(typenavigator); } /* virtual implementations */ diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Long.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Long.h index 7bb6311bd..5d0d0948e 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Long.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Long.h @@ -30,19 +30,19 @@ #include "../detail/PrimitiveSerializerBase.h" // ArmarX -#include "../../../../../navigator/type/primitive/Int.h" +#include "../../../../../navigator/type/primitive/Long.h" namespace armarx::aron::cppserializer::serializer { - class IntSerializer; - typedef std::shared_ptr<IntSerializer> IntSerializerPtr; + class LongSerializer; + typedef std::shared_ptr<LongSerializer> LongSerializerPtr; - class IntSerializer : - virtual public detail::PrimitiveSerializerBase<typenavigator::IntNavigator, IntSerializer> + class LongSerializer : + virtual public detail::PrimitiveSerializerBase<typenavigator::LongNavigator, LongSerializer> { public: /* constructors */ - IntSerializer(const typenavigator::IntNavigatorPtr& e); + LongSerializer(const typenavigator::LongNavigatorPtr& e); /* virtual implementations */ virtual CppBlockPtr getWriteTypeBlock(const std::string& accessor) const override; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/String.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/String.cpp index 6d8284087..f815628ff 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/String.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/String.cpp @@ -33,9 +33,9 @@ namespace armarx::aron::cppserializer::serializer { /* constructors */ StringSerializer::StringSerializer(const typenavigator::StringNavigatorPtr& e) : - Serializer("std::string", simox::meta::get_type_name(typeid(data::AronString)), simox::meta::get_type_name(typeid(type::AronString))), - detail::SerializerBase<typenavigator::StringNavigator, StringSerializer>(e) + detail::PrimitiveSerializerBase<typenavigator::StringNavigator, StringSerializer>("std::string", simox::meta::get_type_name(typeid(data::AronString)), simox::meta::get_type_name(typeid(type::AronString)), e) { + ARMARX_CHECK_NOT_NULL(typenavigator); } /* virtual implementations */ diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/String.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/String.h index 7bb6311bd..d6bc43272 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/String.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/String.h @@ -30,19 +30,19 @@ #include "../detail/PrimitiveSerializerBase.h" // ArmarX -#include "../../../../../navigator/type/primitive/Int.h" +#include "../../../../../navigator/type/primitive/String.h" namespace armarx::aron::cppserializer::serializer { - class IntSerializer; - typedef std::shared_ptr<IntSerializer> IntSerializerPtr; + class StringSerializer; + typedef std::shared_ptr<StringSerializer> StringSerializerPtr; - class IntSerializer : - virtual public detail::PrimitiveSerializerBase<typenavigator::IntNavigator, IntSerializer> + class StringSerializer : + virtual public detail::PrimitiveSerializerBase<typenavigator::StringNavigator, StringSerializer> { public: /* constructors */ - IntSerializer(const typenavigator::IntNavigatorPtr& e); + StringSerializer(const typenavigator::StringNavigatorPtr& e); /* virtual implementations */ virtual CppBlockPtr getWriteTypeBlock(const std::string& accessor) const override; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Time.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Time.cpp index ec8d94b14..39e5c6717 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Time.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Time.cpp @@ -33,9 +33,9 @@ namespace armarx::aron::cppserializer::serializer { /* constructors */ TimeSerializer::TimeSerializer(const typenavigator::TimeNavigatorPtr& e) : - Serializer("Time", simox::meta::get_type_name(typeid(data::AronLong)), simox::meta::get_type_name(typeid(type::AronTime))), - detail::SerializerBase<typenavigator::TimeNavigator, TimeSerializer>(e) + detail::PrimitiveSerializerBase<typenavigator::TimeNavigator, TimeSerializer>("IceUtil::Time", simox::meta::get_type_name(typeid(data::AronLong)), simox::meta::get_type_name(typeid(type::AronTime)), e) { + ARMARX_CHECK_NOT_NULL(typenavigator); } /* virtual implementations */ @@ -45,4 +45,25 @@ namespace armarx::aron::cppserializer::serializer b->addLine("w.writeTime({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "});"); return b; } + + CppBlockPtr TimeSerializer::getWriteBlock(const std::string& accessor) const + { + CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + std::string resolved_accessor = this->ResolveMaybeAccessor(accessor, this->typenavigator); + block_if_data->addLine("w.writePrimitive(" + resolved_accessor + nextEl() + "toMicroSeconds());"); + + return this->ResolveMaybeWriteBlock(accessor, block_if_data, this->typenavigator); + } + + CppBlockPtr TimeSerializer::getReadBlock(const std::string& accessor) const + { + CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + std::string escaped_accessor = this->EscapeAccessor(accessor); + std::string resolved_accessor = this->ResolveMaybeAccessor(accessor, this->typenavigator); + block_if_data->addLine("long " + escaped_accessor + TIME_SETTER_ACCESSOR_SUFFIX + ";"); + block_if_data->addLine("r.readEndPrimitive(" + escaped_accessor + TIME_SETTER_ACCESSOR_SUFFIX + ");"); + block_if_data->addLine(accessor + nextEl() + "microSeconds(" + escaped_accessor + TIME_SETTER_ACCESSOR_SUFFIX + ");"); + return this->ResolveMaybeReadBlock(accessor, "r.readStartPrimitive()", block_if_data, this->typenavigator); + } + } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Time.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Time.h index 6a0b1929b..ff06aff3e 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Time.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/primitive/Time.h @@ -46,5 +46,10 @@ namespace armarx::aron::cppserializer::serializer /* virtual implementations */ virtual CppBlockPtr getWriteTypeBlock(const std::string& accessor) const override; + virtual CppBlockPtr getWriteBlock(const std::string& accessor) const override; + virtual CppBlockPtr getReadBlock(const std::string& accessor) const override; + + private: + static const constexpr char* TIME_SETTER_ACCESSOR_SUFFIX = "__time_setter"; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp index a1922e0b3..6f1fa5a13 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp @@ -28,12 +28,12 @@ namespace armarx::aron::cppserializer::serializer { // constructors IntEnumClassSerializer::IntEnumClassSerializer(const typenavigator::IntEnumNavigatorPtr& n) : - Serializer(n->getEnumName(), simox::meta::get_type_name(typeid(data::AronNDArray)), simox::meta::get_type_name(typeid(type::AronIntEnum))), - detail::SerializerBase<typenavigator::IntEnumNavigator, IntEnumClassSerializer>(n) + detail::SerializerBase<typenavigator::IntEnumNavigator, IntEnumClassSerializer>(n->getEnumName(), simox::meta::get_type_name(typeid(data::AronNDArray)), simox::meta::get_type_name(typeid(type::AronIntEnum)), n) { + ARMARX_CHECK_NOT_NULL(typenavigator); if (typenavigator->getMaybe() != type::Maybe::eNone) { - throw error::AronException("IntEnumClassSerializer", "IntEnumClassSerializer", "Somehow the optional flag of a top level int enum declaration is set. This is not valid!"); + throw error::MaybeNotValidException("IntEnumClassSerializer", "IntEnumClassSerializer", "Somehow the maybe flag of a top level int enum declaration is set. This is not valid!", typenavigator->getMaybe(), typenavigator->getPath()); } } @@ -93,7 +93,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr IntEnumClassSerializer::getWriteTypeBlock(const std::string&) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); - b->addLine("w.writeInt({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "});"); + b->addLine("w.writeInt({__aronMaybeType});"); return b; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h index 96a933957..8bc3ce9e2 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h @@ -48,7 +48,6 @@ namespace armarx::aron::cppserializer::serializer // virtual implementations std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const; - virtual std::vector<std::pair<std::string, std::string>> getCtorInitializers(const std::string&) const override; virtual CppBlockPtr getResetHardBlock(const std::string&) const override; virtual CppBlockPtr getResetSoftBlock(const std::string&) const override; virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/ObjectClass.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/ObjectClass.cpp index 2884e62a9..f4d2f4fe9 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/ObjectClass.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/ObjectClass.cpp @@ -29,12 +29,12 @@ namespace armarx::aron::cppserializer::serializer { // constructors ObjectClassSerializer::ObjectClassSerializer(const typenavigator::ObjectNavigatorPtr& e) : - Serializer(e->getObjectName(), simox::meta::get_type_name(typeid(data::AronDict)), simox::meta::get_type_name(typeid(type::AronObject))), - detail::SerializerBase<typenavigator::ObjectNavigator, ObjectClassSerializer>(e) + detail::SerializerBase<typenavigator::ObjectNavigator, ObjectClassSerializer>(e->getObjectName(), simox::meta::get_type_name(typeid(data::AronDict)), simox::meta::get_type_name(typeid(type::AronObject)), e) { + ARMARX_CHECK_NOT_NULL(typenavigator); if (typenavigator->getMaybe() != type::Maybe::eNone) { - throw error::AronException("ObjectClassSerializer", "ObjectClassSerializer", "Somehow the optional flag of a top level object declaration is set. This is not valid!"); + throw error::MaybeNotValidException("ObjectClassSerializer", "ObjectClassSerializer", "Somehow the maybe flag of a top level object declaration is set. This is not valid!", typenavigator->getMaybe(), typenavigator->getPath()); } } @@ -106,7 +106,7 @@ namespace armarx::aron::cppserializer::serializer b->addLine(extends_s->getFullCppTypename() + "::writeType(w);"); } - b->addLine("w.writeStartObject({\"" + typenavigator->getObjectName() + "\", type_is_optional});"); + b->addLine("w.writeStartObject({\"" + typenavigator->getObjectName() + "\", __aronMaybeType});"); for (const auto& [key, child] : typenavigator->getMemberTypes()) { const auto child_s = FromAronTypeNaviagtorPtr(child); @@ -114,6 +114,7 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr b2 = child_s->getWriteTypeBlock(child_s->getCoreCppTypename()); b->appendBlock(b2); } + b->addLine("w.writeEndObject();"); return b; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.cpp index 8b1378917..9a2b8a18a 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.cpp @@ -1 +1,24 @@ +/* + * This file is part of ArmarX. + * + * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), + * Karlsruhe Institute of Technology (KIT), all rights reserved. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ +#include "Data.h" diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h index b0aee6f1e..f4c1f26e2 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h @@ -32,10 +32,7 @@ #include <RobotAPI/libraries/aron/core/Concepts.h> -#include <RobotAPI/libraries/aron/core/navigator/type/Navigator.h> -#include <RobotAPI/libraries/aron/core/navigator/type/container/Object.h> -#include <RobotAPI/libraries/aron/core/navigator/type/container/List.h> -#include <RobotAPI/libraries/aron/core/navigator/type/primitive/Primitive.h> +#include <RobotAPI/libraries/aron/core/navigator/type/AllNavigators.h> namespace armarx::aron::xmltypereader @@ -52,6 +49,7 @@ namespace armarx::aron::xmltypereader static constexpr const char* CODE_INCLUDES_TAG = "codeincludes"; static constexpr const char* INCLUDES_TAG = "aronincludes"; static constexpr const char* GENERATE_TYPES_TAG = "generatetypes"; + static constexpr const char* AUTO_CODE_INCLUDE = "autoinclude"; static constexpr const char* INCLUDE_TAG = "include"; static constexpr const char* GENERATE_OBJECT_TAG = "object"; @@ -76,6 +74,9 @@ namespace armarx::aron::xmltypereader static constexpr const char* COLS_ATTRIBUTE_NAME = "cols"; static constexpr const char* DIMENSIONS_ATTRIBUTE_NAME = "dimensions"; static constexpr const char* OPTIONAL_NAME = "optional"; + static constexpr const char* RAW_PTR_NAME = "rawptr"; + static constexpr const char* SHARED_PTR_NAME = "sharedptr"; + static constexpr const char* UNIQUE_PTR_NAME = "uniqueptr"; // Second level tags. Only important if in specific top level tag static constexpr const char* OBJECT_CHILD_TAG = "objectchild"; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.cpp index bc2cc0b58..944f755f4 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.cpp @@ -129,7 +129,7 @@ namespace armarx::aron::xmltypereader std::vector<RapidXmlReaderNode> includes = children[cpp_includes_index].nodes(); for (const auto& include : includes) { - this->codeIncludes.push_back(readCppInclude(include)); + this->codeIncludes.push_back(readCodeInclude(include)); } } @@ -169,7 +169,7 @@ namespace armarx::aron::xmltypereader } } - std::string Reader::readCppInclude(const RapidXmlReaderNode& node) const + std::string Reader::readCodeInclude(const RapidXmlReaderNode& node) { Data::EnforceTagName(node, Data::INCLUDE_TAG); Data::EnforceAttribute(node, Data::INCLUDE_ATTRIBUTE_NAME); @@ -177,16 +177,21 @@ namespace armarx::aron::xmltypereader return include; } - std::string Reader::readAronInclude(const RapidXmlReaderNode& node) const + std::string Reader::readAronInclude(const RapidXmlReaderNode& node) { Data::EnforceTagName(node, Data::INCLUDE_TAG); - const std::string xmlinclude = Data::GetAttribute(node, Data::INCLUDE_ATTRIBUTE_NAME); // parse parent xml file and add objects to alreday known Reader anotherReader; anotherReader.parseFile(xmlinclude); + if (Data::HasAttribute(node, Data::AUTO_CODE_INCLUDE)) + { + std::string codeinclude = simox::alg::replace_last(xmlinclude, ".xml", ".aron.generated.h"); + this->codeIncludes.push_back(codeinclude); + } + return xmlinclude; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.h b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.h index e19083a9a..387b2888d 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.h @@ -56,8 +56,8 @@ namespace armarx::aron::xmltypereader private: void parse(const RapidXmlReaderPtr& node); - std::string readCppInclude(const RapidXmlReaderNode& node) const; - std::string readAronInclude(const RapidXmlReaderNode& node) const; + std::string readCodeInclude(const RapidXmlReaderNode& node); + std::string readAronInclude(const RapidXmlReaderNode& node); typenavigator::ObjectNavigatorPtr readGenerateObject(const RapidXmlReaderNode& node) const; typenavigator::IntEnumNavigatorPtr readGenerateIntEnum(const RapidXmlReaderNode& node) const; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.cpp index fb6ef9bae..2a7310d54 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.cpp @@ -78,19 +78,40 @@ namespace armarx::aron::xmltypereader if (public_intenum_it != AllPublicIntEnums.end()) { // copy the navigator - return typenavigator::Navigator::FromAronType(public_intenum_it->second->correspondingType->getResult()); + return typenavigator::Navigator::FromAronType(public_intenum_it->second->correspondingType->toAronTypePtr()); } const auto public_obj_it = AllPublicObjects.find(name); if (public_obj_it != AllPublicObjects.end()) { // copy the navigator - return typenavigator::Navigator::FromAronType(public_obj_it->second->correspondingType->getResult()); + return typenavigator::Navigator::FromAronType(public_obj_it->second->correspondingType->toAronTypePtr()); } throw error::StringNotValidException("XMLReaderFactory", "ResolveTypename", "Could not find a tag. You can only access already finished public objects.", name); } + type::Maybe ReaderFactory::GetMaybe(const RapidXmlReaderNode& n) + { + if (Data::AttributeIsTrue(n, Data::OPTIONAL_NAME)) + { + return type::Maybe::eOptional; + } + if (Data::AttributeIsTrue(n, Data::RAW_PTR_NAME)) + { + return type::Maybe::eRawPointer; + } + if (Data::AttributeIsTrue(n, Data::SHARED_PTR_NAME)) + { + return type::Maybe::eSharedPointer; + } + if (Data::AttributeIsTrue(n, Data::UNIQUE_PTR_NAME)) + { + return type::Maybe::eUniquePointer; + } + return type::Maybe::eNone; + } + // Object type typenavigator::NavigatorPtr ObjectReaderFactory::createSpecific(const RapidXmlReaderNode& node, const Path& path) const { @@ -132,10 +153,10 @@ namespace armarx::aron::xmltypereader std::vector<RapidXmlReaderNode> children = objectChild.nodes(); - bool isOptional = Data::AttributeIsTrue(children[0], Data::OPTIONAL_NAME); + auto maybe = GetMaybe(children[0]); typenavigator::NavigatorPtr childNavigator = create(children[0], Path(path, key)); - childNavigator->setOptional(isOptional); + childNavigator->setMaybe(maybe); aronObjectType->addMemberType(key, childNavigator); } ObjectGenerationStack.pop(); @@ -153,6 +174,7 @@ namespace armarx::aron::xmltypereader aronObjectType = typenavigator::ObjectNavigator::DynamicCastAndCheck(ResolveTypename(simox::alg::to_lower(newObject->typeName))); // make a copy } + ARMARX_CHECK_NOT_NULL(aronObjectType); return aronObjectType; } @@ -165,9 +187,9 @@ namespace armarx::aron::xmltypereader Data::EnforceChildSize(node, 1); std::vector<RapidXmlReaderNode> listTypeNodeChildren = node.nodes(); const RapidXmlReaderNode typeNode = listTypeNodeChildren[0]; - bool isOptional = Data::AttributeIsTrue(typeNode, Data::OPTIONAL_NAME); + auto maybe = GetMaybe(typeNode); typenavigator::NavigatorPtr type = create(typeNode, Path(path, "type")); - type->setOptional(isOptional); + type->setMaybe(maybe); list->setAcceptedType(type); return list; @@ -182,9 +204,9 @@ namespace armarx::aron::xmltypereader Data::EnforceChildSize(node, 1); std::vector<RapidXmlReaderNode> dictTypeNodeChildren = node.nodes(); const RapidXmlReaderNode typeNode = dictTypeNodeChildren[0]; - bool isOptional = Data::AttributeIsTrue(typeNode, Data::OPTIONAL_NAME); + auto maybe = GetMaybe(typeNode); typenavigator::NavigatorPtr type = create(typeNode, Path(path, "type")); - type->setOptional(isOptional); + type->setMaybe(maybe); dict->setAcceptedType(type); return dict; @@ -209,10 +231,10 @@ namespace armarx::aron::xmltypereader std::vector<RapidXmlReaderNode> typeNodeChildren = tupleTypeDeclarationNode.nodes(); const RapidXmlReaderNode typeNode = typeNodeChildren[0]; - bool isOptional = Data::AttributeIsTrue(typeNode, Data::OPTIONAL_NAME); + auto maybe = GetMaybe(typeNode); typenavigator::NavigatorPtr type = create(typeNode, Path(path, "<" + std::to_string(i++) + ">")); - type->setOptional(isOptional); + type->setMaybe(maybe); tuple->addAcceptedType(type); } @@ -236,20 +258,20 @@ namespace armarx::aron::xmltypereader std::vector<RapidXmlReaderNode> type1NodeChildren = nodeChildren[0].nodes(); const RapidXmlReaderNode type1Node = type1NodeChildren[0]; - bool isOptional1 = Data::AttributeIsTrue(type1Node, Data::OPTIONAL_NAME); + auto maybe1 = GetMaybe(type1Node); typenavigator::NavigatorPtr type1 = create(type1Node, Path(path, std::to_string(0))); - type1->setOptional(isOptional1); + type1->setMaybe(maybe1); pair->setFirstAcceptedType(type1); Data::EnforceChildSize(nodeChildren[1], 1); std::vector<RapidXmlReaderNode> type2NodeChildren = nodeChildren[1].nodes(); const RapidXmlReaderNode type2Node = type2NodeChildren[0]; - bool isOptional2 = Data::AttributeIsTrue(type2Node, Data::OPTIONAL_NAME); + auto maybe2 = GetMaybe(type2Node); typenavigator::NavigatorPtr type2 = create(type2Node, Path(path, std::to_string(1))); - type2->setOptional(isOptional2); + type2->setMaybe(maybe2); pair->setSecondAcceptedType(type2); return pair; @@ -265,12 +287,6 @@ namespace armarx::aron::xmltypereader typenavigator::NavigatorPtr IVTCByteImageReaderFactory::createSpecific(const RapidXmlReaderNode& node, const Path& path) const { Data::EnforceTagName(node, Data::GENERATE_IVT_CBYTE_IMAGE_MEMBER_TAG); - //Data::EnforceAttribute(node, Data::TYPE_ATTRIBUTE_NAME); - - //int width = std::stoi(Data::GetAttributeWithDefault(node, Data::WIDTH_ATTRIBUTE_NAME, "1")); - //int height = std::stoi(Data::GetAttributeWithDefault(node, Data::HEIGHT_ATTRIBUTE_NAME, "1")); - //std::string type = node.attribute_value(Data::TYPE_ATTRIBUTE_NAME);; - typenavigator::IVTCByteImageNavigatorPtr complex(new typenavigator::IVTCByteImageNavigator(path)); return complex; } @@ -309,15 +325,8 @@ namespace armarx::aron::xmltypereader typenavigator::NavigatorPtr OpenCVMatReaderFactory::createSpecific(const RapidXmlReaderNode& node, const Path& path) const { Data::EnforceTagName(node, Data::GENERATE_OPENCV_MAT_MEMBER_TAG); - //Data::EnforceAttribute(node, Data::TYPE_ATTRIBUTE_NAME); - - //std::vector<std::string> dimensions_as_strings = simox::alg::split(Data::GetAttributeWithDefault(node, Data::DIMENSIONS_ATTRIBUTE_NAME, "1"), ","); - //std::vector<int> dimensions = simox::alg::to_vec<int>(dimensions_as_strings); - //std::string type = node.attribute_value(Data::TYPE_ATTRIBUTE_NAME); typenavigator::OpenCVMatNavigatorPtr complex(new typenavigator::OpenCVMatNavigator(path)); - //complex->setDimensions(dimensions); - //complex->setTypename(type); return complex; } @@ -326,14 +335,9 @@ namespace armarx::aron::xmltypereader { Data::EnforceTagName(node, Data::GENERATE_PCL_POINTCLOUD_MEMBER_TAG); Data::EnforceAttribute(node, Data::TYPE_ATTRIBUTE_NAME); - - //int width = std::stoi(Data::GetAttributeWithDefault(node, Data::WIDTH_ATTRIBUTE_NAME, "1")); - //int height = std::stoi(Data::GetAttributeWithDefault(node, Data::HEIGHT_ATTRIBUTE_NAME, "1")); std::string type = node.attribute_value(Data::TYPE_ATTRIBUTE_NAME);; typenavigator::PCLPointCloudNavigatorPtr complex(new typenavigator::PCLPointCloudNavigator(path)); - //complex->setWidth(width); - //complex->setHeight(height); complex->setTypename(type); return complex; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.h b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.h index 88e7ad01d..f94ed41ec 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.h @@ -55,6 +55,7 @@ namespace armarx::aron::xmltypereader protected: static typenavigator::NavigatorPtr ResolveTypename(const std::string&); + static type::Maybe GetMaybe(const RapidXmlReaderNode&); public: static std::map<std::string, codegeneratorhelper::GenerateObjectInfoPtr> AllPublicObjects; diff --git a/source/RobotAPI/libraries/aron/core/io/typeIO/converter/Converter.cpp b/source/RobotAPI/libraries/aron/core/io/typeIO/converter/Converter.cpp index fe1f4eb36..f5df053b9 100644 --- a/source/RobotAPI/libraries/aron/core/io/typeIO/converter/Converter.cpp +++ b/source/RobotAPI/libraries/aron/core/io/typeIO/converter/Converter.cpp @@ -35,7 +35,7 @@ namespace armarx::aron::typeIO case type::Descriptor::eObject: { const auto readStartObject = reader.readStartObject(); - writer.writeStartObject({readStartObject.name, readStartObject.isOptional}); + writer.writeStartObject({readStartObject.name, readStartObject.maybe}); for (unsigned int i = 0; i < readStartObject.elements; ++i) { @@ -51,7 +51,7 @@ namespace armarx::aron::typeIO case type::Descriptor::eDict: { const auto readStartDict = reader.readStartDict(); - writer.writeStartDict({readStartDict.isOptional}); + writer.writeStartDict({readStartDict.maybe}); Converter::ReadAndConvert(reader, writer); @@ -62,7 +62,7 @@ namespace armarx::aron::typeIO case type::Descriptor::eTuple: { const auto readStartTuple = reader.readStartTuple(); - writer.writeStartTuple({readStartTuple.isOptional}); + writer.writeStartTuple({readStartTuple.maybe}); for (unsigned int i = 0; i < readStartTuple.elements; ++i) { @@ -76,7 +76,7 @@ namespace armarx::aron::typeIO case type::Descriptor::eList: { const auto readStartList = reader.readStartList(); - writer.writeStartList({readStartList.isOptional}); + writer.writeStartList({readStartList.maybe}); Converter::ReadAndConvert(reader, writer); @@ -87,91 +87,91 @@ namespace armarx::aron::typeIO case type::Descriptor::eEigenMatrix: { const auto readEigenMatrix = reader.readEigenMatrix(); - writer.writeEigenMatrix({readEigenMatrix.rows, readEigenMatrix.cols, readEigenMatrix.type, readEigenMatrix.isOptional}); + writer.writeEigenMatrix({readEigenMatrix.rows, readEigenMatrix.cols, readEigenMatrix.type, readEigenMatrix.maybe}); break; } case type::Descriptor::eEigenQuaternion: { const auto readEigenQuaternion = reader.readEigenQuaternion(); - writer.writeEigenQuaternion({readEigenQuaternion.type, readEigenQuaternion.isOptional}); + writer.writeEigenQuaternion({readEigenQuaternion.type, readEigenQuaternion.maybe}); break; } case type::Descriptor::eIVTCByteImage: { const auto readIVTCByteImage = reader.readIVTCByteImage(); - writer.writeIVTCByteImage({readIVTCByteImage.isOptional}); + writer.writeIVTCByteImage({readIVTCByteImage.maybe}); break; } case type::Descriptor::eOpenCVMat: { const auto readOpenCVMat = reader.readOpenCVMat(); - writer.writeOpenCVMat({readOpenCVMat.isOptional}); + writer.writeOpenCVMat({readOpenCVMat.maybe}); break; } case type::Descriptor::ePCLPointCloud: { const auto readPCLPointCloud = reader.readPCLPointCloud(); - writer.writePCLPointCloud({readPCLPointCloud.type, readPCLPointCloud.isOptional}); + writer.writePCLPointCloud({readPCLPointCloud.type, readPCLPointCloud.maybe}); break; } case type::Descriptor::ePosition: { const auto readPosition = reader.readPosition(); - writer.writePosition({readPosition.isOptional}); + writer.writePosition({readPosition.maybe}); break; } case type::Descriptor::eOrientation: { const auto readOrientation = reader.readOrientation(); - writer.writeOrientation({readOrientation.isOptional}); + writer.writeOrientation({readOrientation.maybe}); break; } case type::Descriptor::ePose: { const auto readPose = reader.readPose(); - writer.writePose({readPose.isOptional}); + writer.writePose({readPose.maybe}); break; } case type::Descriptor::eInt: { const auto readInt = reader.readInt(); - writer.writeInt({readInt.isOptional}); + writer.writeInt({readInt.maybe}); break; } case type::Descriptor::eLong: { const auto readLong = reader.readLong(); - writer.writeLong({readLong.isOptional}); + writer.writeLong({readLong.maybe}); break; } case type::Descriptor::eFloat: { const auto readFloat = reader.readFloat(); - writer.writeFloat({readFloat.isOptional}); + writer.writeFloat({readFloat.maybe}); break; } case type::Descriptor::eDouble: { const auto readDouble = reader.readDouble(); - writer.writeDouble({readDouble.isOptional}); + writer.writeDouble({readDouble.maybe}); break; } case type::Descriptor::eString: { const auto readString = reader.readString(); - writer.writeString({readString.isOptional}); + writer.writeString({readString.maybe}); break; } case type::Descriptor::eBool: { const auto readBool = reader.readBool(); - writer.writeBool({readBool.isOptional}); + writer.writeBool({readBool.maybe}); break; } case type::Descriptor::eTime: { const auto readTime = reader.readTime(); - writer.writeTime({readTime.isOptional}); + writer.writeTime({readTime.maybe}); break; } default: diff --git a/source/RobotAPI/libraries/aron/core/io/typeIO/visitor/Visitor.cpp b/source/RobotAPI/libraries/aron/core/io/typeIO/visitor/Visitor.cpp index 655bba4e0..0e87ee0e4 100644 --- a/source/RobotAPI/libraries/aron/core/io/typeIO/visitor/Visitor.cpp +++ b/source/RobotAPI/libraries/aron/core/io/typeIO/visitor/Visitor.cpp @@ -49,7 +49,7 @@ namespace armarx::aron::typeIO case type::Descriptor::eObject: { auto casted = type::AronObjectPtr::dynamicCast(aron); - writer.writeStartObject({casted->objectName, casted->isOptional}); + writer.writeStartObject({casted->objectName, casted->maybe}); for (const auto& [key, value] : casted->elementTypes) { writer.writeKey(key); @@ -61,7 +61,7 @@ namespace armarx::aron::typeIO case type::Descriptor::eDict: { auto casted = type::AronDictPtr::dynamicCast(aron); - writer.writeStartDict({casted->isOptional}); + writer.writeStartDict({casted->maybe}); Visitor::VisitAndSetup(writer, casted->acceptedType); writer.writeEndDict(); break; @@ -69,7 +69,7 @@ namespace armarx::aron::typeIO case type::Descriptor::eTuple: { auto casted = type::AronTuplePtr::dynamicCast(aron); - writer.writeStartTuple({casted->isOptional}); + writer.writeStartTuple({casted->maybe}); for (const auto& value : casted->elementTypes) { Visitor::VisitAndSetup(writer, value); @@ -80,7 +80,7 @@ namespace armarx::aron::typeIO case type::Descriptor::eList: { auto casted = type::AronListPtr::dynamicCast(aron); - writer.writeStartList({casted->isOptional}); + writer.writeStartList({casted->maybe}); Visitor::VisitAndSetup(writer, casted->acceptedType); writer.writeEndList(); break; @@ -88,96 +88,96 @@ namespace armarx::aron::typeIO case type::Descriptor::eEigenMatrix: { auto casted = type::AronEigenMatrixPtr::dynamicCast(aron); - writer.writeEigenMatrix({(unsigned int) casted->rows, (unsigned int) casted->cols, casted->typeName, casted->isOptional}); + writer.writeEigenMatrix({(unsigned int) casted->rows, (unsigned int) casted->cols, casted->typeName, casted->maybe}); break; } case type::Descriptor::eEigenQuaternion: { auto casted = type::AronEigenQuaternionPtr::dynamicCast(aron); - writer.writeEigenQuaternion({casted->typeName, casted->isOptional}); + writer.writeEigenQuaternion({casted->typeName, casted->maybe}); break; } case type::Descriptor::eIVTCByteImage: { auto casted = type::AronIVTCByteImagePtr::dynamicCast(aron); - writer.writeIVTCByteImage({casted->isOptional}); + writer.writeIVTCByteImage({casted->maybe}); break; } case type::Descriptor::eOpenCVMat: { auto casted = type::AronOpenCVMatPtr::dynamicCast(aron); - writer.writeOpenCVMat({casted->isOptional}); + writer.writeOpenCVMat({casted->maybe}); break; } case type::Descriptor::ePCLPointCloud: { auto casted = type::AronPCLPointCloudPtr::dynamicCast(aron); - writer.writePCLPointCloud({casted->typeName, casted->isOptional}); + writer.writePCLPointCloud({casted->typeName, casted->maybe}); break; } case type::Descriptor::ePosition: { auto casted = type::AronPositionPtr::dynamicCast(aron); - writer.writePosition({casted->isOptional}); + writer.writePosition({casted->maybe}); break; } case type::Descriptor::eOrientation: { auto casted = type::AronOrientationPtr::dynamicCast(aron); - writer.writeOrientation({casted->isOptional}); + writer.writeOrientation({casted->maybe}); break; } case type::Descriptor::ePose: { auto casted = type::AronPosePtr::dynamicCast(aron); - writer.writePose({casted->isOptional}); + writer.writePose({casted->maybe}); break; } case type::Descriptor::eInt: { auto casted = type::AronIntPtr::dynamicCast(aron); - writer.writeInt({casted->isOptional}); + writer.writeInt({casted->maybe}); break; } case type::Descriptor::eLong: { auto casted = type::AronLongPtr::dynamicCast(aron); - writer.writeLong({casted->isOptional}); + writer.writeLong({casted->maybe}); break; } case type::Descriptor::eFloat: { auto casted = type::AronFloatPtr::dynamicCast(aron); - writer.writeFloat({casted->isOptional}); + writer.writeFloat({casted->maybe}); break; } case type::Descriptor::eDouble: { auto casted = type::AronDoublePtr::dynamicCast(aron); - writer.writeDouble({casted->isOptional}); + writer.writeDouble({casted->maybe}); break; } case type::Descriptor::eString: { auto casted = type::AronStringPtr::dynamicCast(aron); - writer.writeString({casted->isOptional}); + writer.writeString({casted->maybe}); break; } case type::Descriptor::eBool: { auto casted = type::AronBoolPtr::dynamicCast(aron); - writer.writeBool({casted->isOptional}); + writer.writeBool({casted->maybe}); break; } case type::Descriptor::eTime: { auto casted = type::AronTimePtr::dynamicCast(aron); - writer.writeTime({casted->isOptional}); + writer.writeTime({casted->maybe}); break; } default: { - throw error::DescriptorNotValidException("Visitor", "SetupWriterFromAronTypePtr", "Type-Type could not be resolved. The ice_id of the input was: " + aron->ice_id(), desc); + throw error::DescriptorNotValidException("Visitor", "VisitAndSetup", "Type could not be resolved. The ice_id of the input was: " + aron->ice_id(), desc); } } } diff --git a/source/RobotAPI/libraries/aron/core/navigator/data/primitive/String.h b/source/RobotAPI/libraries/aron/core/navigator/data/primitive/String.h index dbe79c3c9..cbf828629 100644 --- a/source/RobotAPI/libraries/aron/core/navigator/data/primitive/String.h +++ b/source/RobotAPI/libraries/aron/core/navigator/data/primitive/String.h @@ -57,9 +57,6 @@ namespace armarx::aron::datanavigator static data::AronStringPtr ToAronStringPtr(const StringNavigatorPtr& navigator); /* public member functions */ - void setValue(const std::string& x); - std::string getValue() const; - data::AronStringPtr toAronStringPtr() const; /* virtual implementations */ diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/IVTCByteImageTest.xml b/source/RobotAPI/libraries/aron/core/test/xmls/IVTCByteImageTest.xml index 5abc5d5a1..cd1dfccc4 100644 --- a/source/RobotAPI/libraries/aron/core/test/xmls/IVTCByteImageTest.xml +++ b/source/RobotAPI/libraries/aron/core/test/xmls/IVTCByteImageTest.xml @@ -7,11 +7,11 @@ <Object name='armarx::IVTCByteImageTest'> <ObjectChild key='the_grayscale_image'> - <IVTCByteImage width="25" height="25" type="GrayScale" /> + <IVTCByteImage width="25" height="25" type="GrayScale" sharedptr="ja" /> </ObjectChild> <ObjectChild key='the_rgb_image'> - <IVTCByteImage width="1920" height="1080" type="RGB24" /> + <IVTCByteImage width="1920" height="1080" type="RGB24" sharedptr="ja" /> </ObjectChild> </Object> diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/OptionalTest.xml b/source/RobotAPI/libraries/aron/core/test/xmls/OptionalTest.xml index 48cc19e61..7b402cb38 100644 --- a/source/RobotAPI/libraries/aron/core/test/xmls/OptionalTest.xml +++ b/source/RobotAPI/libraries/aron/core/test/xmls/OptionalTest.xml @@ -43,7 +43,7 @@ </List> </ObjectChild> - <ObjectChild key='some_obj'> + <ObjectChild key='some_eigen_matrix'> <EigenMatrix rows="25" cols="10" type="long" optional="ja"/> </ObjectChild> -- GitLab