From 7e216a3965a940f9f5f6739bf36c7fd76cc4c63c Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Thu, 2 Sep 2021 09:08:35 +0200 Subject: [PATCH] Improve resets of eigen stuff --- .../cpp/serializer/ndarray/EigenMatrix.cpp | 12 +++++++++++ .../cpp/serializer/ndarray/EigenMatrix.h | 4 ++-- .../serializer/ndarray/EigenQuaternion.cpp | 12 +++++++++++ .../cpp/serializer/ndarray/EigenQuaternion.h | 7 +++---- .../cpp/serializer/ndarray/Orientation.cpp | 20 +++++++++++++++---- .../cpp/serializer/ndarray/Orientation.h | 7 ++++--- .../cpp/serializer/ndarray/Pose.cpp | 20 +++++++++++++++---- .../codeWriter/cpp/serializer/ndarray/Pose.h | 7 +++---- .../cpp/serializer/ndarray/Position.cpp | 20 +++++++++++++++---- .../cpp/serializer/ndarray/Position.h | 6 +++--- 10 files changed, 87 insertions(+), 28 deletions(-) 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 32576d212..54a466881 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 @@ -52,6 +52,18 @@ namespace armarx::aron::cppserializer::serializer ARMARX_CHECK_NOT_NULL(typenavigator); } + CppBlockPtr EigenMatrixSerializer::getResetHardBlock(const std::string& accessor) const + { + CppBlockPtr block = std::make_shared<CppBlock>(); + block->addLine(accessor + ".setZero();"); + return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator); + } + + CppBlockPtr EigenMatrixSerializer::getResetSoftBlock(const std::string& accessor) const + { + return getResetHardBlock(accessor); + } + CppBlockPtr EigenMatrixSerializer::getWriteTypeBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.h index 51b74e651..1885efb76 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.h @@ -31,8 +31,6 @@ namespace armarx::aron::cppserializer::serializer { - class EigenMatrixSerializer; - typedef std::shared_ptr<EigenMatrixSerializer> EigenMatrixSerializerPtr; class EigenMatrixSerializer : virtual public detail::NDArraySerializerBase<typenavigator::EigenMatrixNavigator, EigenMatrixSerializer> @@ -42,6 +40,8 @@ namespace armarx::aron::cppserializer::serializer EigenMatrixSerializer(const typenavigator::EigenMatrixNavigatorPtr&); // virtual implementations + virtual CppBlockPtr getResetHardBlock(const std::string&) const override; + virtual CppBlockPtr getResetSoftBlock(const std::string&) const override; virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override; virtual CppBlockPtr getWriteBlock(const std::string&) const override; virtual CppBlockPtr getReadBlock(const std::string&) const override; 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 e8457f0aa..41e3faf1b 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 @@ -47,6 +47,18 @@ namespace armarx::aron::cppserializer::serializer ARMARX_CHECK_NOT_NULL(typenavigator); } + CppBlockPtr EigenQuaternionSerializer::getResetHardBlock(const std::string& accessor) const + { + CppBlockPtr block = std::make_shared<CppBlock>(); + block->addLine(accessor + ".setIdentity();"); + return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator); + } + + CppBlockPtr EigenQuaternionSerializer::getResetSoftBlock(const std::string& accessor) const + { + return getResetHardBlock(accessor); + } + CppBlockPtr EigenQuaternionSerializer::getWriteTypeBlock(const std::string& accessor) const { CppBlockPtr b = CppBlockPtr(new CppBlock()); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.h index 039d20fac..8f471d8f3 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.h @@ -33,20 +33,19 @@ namespace armarx::aron::cppserializer::serializer { - class EigenQuaternionSerializer; - typedef std::shared_ptr<EigenQuaternionSerializer> EigenQuaternionSerializerPtr; - class EigenQuaternionSerializer : virtual public detail::NDArraySerializerBase<typenavigator::EigenQuaternionNavigator, EigenQuaternionSerializer> { public: - using PointerType = EigenQuaternionSerializerPtr; + using PointerType = std::shared_ptr<EigenQuaternionSerializer>; public: // constructors EigenQuaternionSerializer(const typenavigator::EigenQuaternionNavigatorPtr&); // virtual implementations + virtual CppBlockPtr getResetHardBlock(const std::string&) const override; + virtual CppBlockPtr getResetSoftBlock(const std::string&) const override; virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override; virtual CppBlockPtr getWriteBlock(const std::string&) const override; virtual CppBlockPtr getReadBlock(const std::string&) const override; 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 c2c1a5aaa..1bd39c73c 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 @@ -40,16 +40,28 @@ namespace armarx::aron::cppserializer::serializer ARMARX_CHECK_NOT_NULL(typenavigator); } + CppBlockPtr OrientationSerializer::getResetHardBlock(const std::string& accessor) const + { + CppBlockPtr block = std::make_shared<CppBlock>(); + block->addLine(accessor + ".setIdentity();"); + return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator); + } + + CppBlockPtr OrientationSerializer::getResetSoftBlock(const std::string& accessor) const + { + return getResetHardBlock(accessor); + } + CppBlockPtr OrientationSerializer::getWriteTypeBlock(const std::string& accessor) const { - CppBlockPtr b = CppBlockPtr(new CppBlock()); + CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine("w.writeOrientation({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "}); // of " + accessor); return b; } CppBlockPtr OrientationSerializer::getWriteBlock(const std::string& accessor) const { - CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + CppBlockPtr block_if_data = std::make_shared<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())); // of " + accessor); return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); @@ -57,14 +69,14 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr OrientationSerializer::getReadBlock(const std::string& accessor) const { - CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "coeffs().data())); // of " + accessor); return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr OrientationSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const { - CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))"); block_if_data->addLineAsBlock("return false;"); return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.h index 088b4d1c4..b4851e4bc 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.h @@ -29,14 +29,12 @@ namespace armarx::aron::cppserializer::serializer { - class OrientationSerializer; - typedef std::shared_ptr<OrientationSerializer> AronOrientationTypeCppSerializerPtr; class OrientationSerializer : virtual public detail::NDArraySerializerBase<typenavigator::OrientationNavigator, OrientationSerializer> { public: - using PointerType = AronOrientationTypeCppSerializerPtr; + using PointerType = std::shared_ptr<class OrientationSerializer>; public: @@ -44,10 +42,13 @@ namespace armarx::aron::cppserializer::serializer OrientationSerializer(const typenavigator::OrientationNavigatorPtr&); // virtual implementations + virtual CppBlockPtr getResetHardBlock(const std::string&) const override; + virtual CppBlockPtr getResetSoftBlock(const std::string&) const override; virtual CppBlockPtr getWriteTypeBlock(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 9bf5f3074..b6be09e9f 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 @@ -40,16 +40,28 @@ namespace armarx::aron::cppserializer::serializer ARMARX_CHECK_NOT_NULL(typenavigator); } + CppBlockPtr PoseSerializer::getResetHardBlock(const std::string& accessor) const + { + CppBlockPtr block = std::make_shared<CppBlock>(); + block->addLine(accessor + ".setIdentity();"); + return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator); + } + + CppBlockPtr PoseSerializer::getResetSoftBlock(const std::string& accessor) const + { + return getResetHardBlock(accessor); + } + CppBlockPtr PoseSerializer::getWriteTypeBlock(const std::string& accessor) const { - CppBlockPtr b = CppBlockPtr(new CppBlock()); + CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine("w.writePose({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "}); // of " + accessor); return b; } CppBlockPtr PoseSerializer::getWriteBlock(const std::string& accessor) const { - CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + CppBlockPtr block_if_data = std::make_shared<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())); // of " + accessor); return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); @@ -57,14 +69,14 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr PoseSerializer::getReadBlock(const std::string& accessor) const { - CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "data())); // of " + accessor); return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr PoseSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const { - CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))"); block_if_data->addLineAsBlock("return false;"); return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.h index 131a73e72..195a04015 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.h @@ -29,20 +29,19 @@ namespace armarx::aron::cppserializer::serializer { - class PoseSerializer; - typedef std::shared_ptr<PoseSerializer> AronPoseTypeCppSerializerPtr; - class PoseSerializer : virtual public detail::NDArraySerializerBase<typenavigator::PoseNavigator, PoseSerializer> { public: - using PointerType = AronPoseTypeCppSerializerPtr; + using PointerType = std::shared_ptr<PoseSerializer>; public: // constructors PoseSerializer(const typenavigator::PoseNavigatorPtr&); // virtual implementations + virtual CppBlockPtr getResetHardBlock(const std::string&) const override; + virtual CppBlockPtr getResetSoftBlock(const std::string&) const override; virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override; virtual CppBlockPtr getWriteBlock(const std::string&) const override; virtual CppBlockPtr getReadBlock(const std::string&) const override; 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 60089f7c7..6c9e54ecd 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 @@ -40,16 +40,28 @@ namespace armarx::aron::cppserializer::serializer ARMARX_CHECK_NOT_NULL(typenavigator); } + CppBlockPtr PositionSerializer::getResetHardBlock(const std::string& accessor) const + { + CppBlockPtr block = std::make_shared<CppBlock>(); + block->addLine(accessor + ".setZero();"); + return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator); + } + + CppBlockPtr PositionSerializer::getResetSoftBlock(const std::string& accessor) const + { + return getResetHardBlock(accessor); + } + CppBlockPtr PositionSerializer::getWriteTypeBlock(const std::string& accessor) const { - CppBlockPtr b = CppBlockPtr(new CppBlock()); + CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine("w.writePosition({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "}); // of " + accessor); return b; } CppBlockPtr PositionSerializer::getWriteBlock(const std::string& accessor) const { - CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + CppBlockPtr block_if_data = std::make_shared<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())); // of " + accessor); return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator); @@ -57,14 +69,14 @@ namespace armarx::aron::cppserializer::serializer CppBlockPtr PositionSerializer::getReadBlock(const std::string& accessor) const { - CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "data())); // of " + accessor); return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator); } CppBlockPtr PositionSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const { - CppBlockPtr block_if_data = CppBlockPtr(new CppBlock()); + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))"); block_if_data->addLineAsBlock("return false;"); return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.h index 7a234106d..61026f461 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.h @@ -29,20 +29,20 @@ namespace armarx::aron::cppserializer::serializer { - class PositionSerializer; - typedef std::shared_ptr<PositionSerializer> AronPositionTypeCppSerializerPtr; class PositionSerializer : virtual public detail::NDArraySerializerBase<typenavigator::PositionNavigator, PositionSerializer> { public: - using PointerType = AronPositionTypeCppSerializerPtr; + using PointerType = std::shared_ptr<PositionSerializer>; public: // constructors PositionSerializer(const typenavigator::PositionNavigatorPtr&); // virtual implementations + virtual CppBlockPtr getResetHardBlock(const std::string&) const override; + virtual CppBlockPtr getResetSoftBlock(const std::string&) const override; virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override; virtual CppBlockPtr getWriteBlock(const std::string&) const override; virtual CppBlockPtr getReadBlock(const std::string&) const override; -- GitLab