From aa745c4259a6a8f799922479341b54a924644467 Mon Sep 17 00:00:00 2001 From: Fabian Peller <fabian.peller-konrad@kit.edu> Date: Thu, 9 Feb 2023 11:06:09 +0000 Subject: [PATCH] fix redundant members, add assertions to aron generated file --- .../cpp/generator/ndarray/Matrix.cpp | 19 +++++++++++++++---- .../codewriter/cpp/generator/ndarray/Matrix.h | 3 --- .../cpp/generator/toplevel/ObjectClass.cpp | 6 ++++-- .../codegeneration/cpp/AronGeneratedClass.h | 1 + .../NlohmannJSONReaderWithoutTypeCheck.cpp | 3 ++- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp index 9b84c8204..41efdfdf1 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp @@ -44,7 +44,7 @@ namespace armarx::aron::codegenerator::cpp::generator "Eigen::Matrix<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">", "Eigen::Matrix<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">", simox::meta::get_type_name<data::dto::NDArray>(), - simox::meta::get_type_name<type::dto::Matrix>(), n), matrixType(n) + simox::meta::get_type_name<type::dto::Matrix>(), n) { } @@ -101,14 +101,25 @@ namespace armarx::aron::codegenerator::cpp::generator block_if_data->addLine("std::string " + type + ";"); block_if_data->addLine("std::vector<int> " + dims + ";"); block_if_data->addLine("std::vector<unsigned char> " + data + ";"); + block_if_data->addLine("" + ARON_READER_ACCESSOR + ".readNDArray("+variantAccessor+", "+dims+", "+type+", "+data+"); // of " + cppAccessor); - - if(matrixType.getRows() == Eigen::Dynamic or matrixType.getCols() == Eigen::Dynamic) + + if((this->type.getRows() == -1 or this->type.getRows() == Eigen::Dynamic) and this->type.getCols() != -1) + { + block_if_data->addLine(cppAccessor + nextEl() + "resize(" + dims + ".at(0));"); + } + + if(this->type.getRows() != -1 and (this->type.getCols() == -1 or this->type.getCols() == Eigen::Dynamic)) + { + block_if_data->addLine(cppAccessor + nextEl() + "resize(" + dims + ".at(1));"); + } + + if((this->type.getRows() == -1 or this->type.getRows() == Eigen::Dynamic) and (this->type.getCols() == -1 or this->type.getCols() == Eigen::Dynamic)) { - // TODO assert(aron_variant_kpImpedance_shape.size() == 2); block_if_data->addLine(cppAccessor + nextEl() + "resize(" + dims + ".at(0), " + dims + ".at(1));"); } + block_if_data->addLine("assert(" + cppAccessor + nextEl() + "rows() == " + dims + ".at(0) && " + cppAccessor + nextEl() + "cols() == " + dims + ".at(1) && \"Dimensions of member '"+cppAccessor+"' do not match (simox::alg::to_string(dims, ',')). Got (" + cppAccessor + nextEl() + "rows(), " + cppAccessor + nextEl() + "cols()) instead.\");"); block_if_data->addLine("std::memcpy(reinterpret_cast<unsigned char*>(" + cppAccessor + nextEl() + "data()), "+data+".data(), "+data+".size());"); return resolveMaybeReadBlock(block_if_data, cppAccessor, variantAccessor); } diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h index 8c8c24606..9f56f2b98 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h @@ -47,8 +47,5 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const final; - - private: - const type::Matrix matrixType; }; } diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp index 0d54dc8bf..6fef11afd 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp @@ -213,8 +213,10 @@ namespace armarx::aron::codegenerator::cpp::generator for (const auto& [key, child] : type.getMemberTypes()) { const auto child_s = FromAronType(*child); - const std::string child_variant_accessor = OBJECT_MEMBERS_ACCESSOR + ".at(\"" + key + "\")"; - block_if_data->appendBlock(child_s->getReadBlock(key, child_variant_accessor)); + std::string child_accessor = OBJECT_MEMBERS_ACCESSOR + "_" + key + "_iterator"; + block_if_data->addLine("auto " + child_accessor + " = " + OBJECT_MEMBERS_ACCESSOR + ".find(\"" + key + "\");"); + block_if_data->addLine("assert(" + child_accessor + " != " + OBJECT_MEMBERS_ACCESSOR + ".end() && \"Missing member '" + key + "' in aron object '" + getFullClassCppTypename() + "'.\");"); + block_if_data->appendBlock(child_s->getReadBlock(key, child_accessor + "->second")); } return block_if_data; } diff --git a/source/RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h b/source/RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h index 552c653a9..a076cdc16 100644 --- a/source/RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h +++ b/source/RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h @@ -28,6 +28,7 @@ #include <string> #include <vector> #include <map> +#include <cassert> // ArmarX #include <RobotAPI/libraries/aron/core/Exception.h> diff --git a/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReaderWithoutTypeCheck.cpp b/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReaderWithoutTypeCheck.cpp index adebe0711..994663799 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReaderWithoutTypeCheck.cpp +++ b/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReaderWithoutTypeCheck.cpp @@ -104,8 +104,9 @@ namespace armarx::aron::data::reader { i = input; } + bool - NlohmannJSONReaderWithoutTypeCheck::readNull(InputType& input) // defaulted implementation + NlohmannJSONReaderWithoutTypeCheck::readNull(InputType& input) { try { -- GitLab