diff --git a/src/language/utils/IUnaryOperatorProcessorBuilder.hpp b/src/language/utils/IUnaryOperatorProcessorBuilder.hpp index 19b36e2feb42b9efc558ff5e554532c0f3d32824..6868036e88ce63addcce46f16b1639af96fd21b0 100644 --- a/src/language/utils/IUnaryOperatorProcessorBuilder.hpp +++ b/src/language/utils/IUnaryOperatorProcessorBuilder.hpp @@ -13,6 +13,7 @@ class IUnaryOperatorProcessorBuilder public: [[nodiscard]] virtual std::unique_ptr<INodeProcessor> getNodeProcessor(ASTNode& node) const = 0; + [[nodiscard]] virtual ASTNodeDataType getOperandDataType() const = 0; [[nodiscard]] virtual ASTNodeDataType getReturnValueType() const = 0; virtual ~IUnaryOperatorProcessorBuilder() = default; diff --git a/src/language/utils/OperatorRepository.hpp b/src/language/utils/OperatorRepository.hpp index cf4b322e7f9da12311a0e1b1dcd47ee0c25e7936..4ce6ee83c7652a7e3cd93f5658b716a10b4e4b15 100644 --- a/src/language/utils/OperatorRepository.hpp +++ b/src/language/utils/OperatorRepository.hpp @@ -68,10 +68,11 @@ class OperatorRepository const std::string binary_operator_type_name = binaryOperatorMangler<BinaryOperatorTypeT>(processor_builder->getDataTypeOfA(), processor_builder->getDataTypeOfB()); - if (not m_binary_operator_builder_list - .try_emplace(binary_operator_type_name, - Descriptor{processor_builder->getReturnValueType(), processor_builder}) - .second) { + if (auto [i_descriptor, success] = + m_binary_operator_builder_list.try_emplace(binary_operator_type_name, + Descriptor{processor_builder->getReturnValueType(), + processor_builder}); + not success) { // LCOV_EXCL_START throw UnexpectedError(binary_operator_type_name + " has already an entry"); // LCOV_EXCL_STOP @@ -85,10 +86,11 @@ class OperatorRepository const std::shared_ptr<const IAffectationProcessorBuilder>& processor_builder) { const std::string affectation_type_name = affectationMangler<OperatorTypeT>(lhs_type, rhs_type); - if (not m_affectation_builder_list - .try_emplace(affectation_type_name, - Descriptor{ASTNodeDataType::build<ASTNodeDataType::void_t>(), processor_builder}) - .second) { + if (auto [i_descriptor, success] = + m_affectation_builder_list.try_emplace(affectation_type_name, + Descriptor{ASTNodeDataType::build<ASTNodeDataType::void_t>(), + processor_builder}); + not success) { // LCOV_EXCL_START throw UnexpectedError(affectation_type_name + " has already an entry"); // LCOV_EXCL_STOP @@ -114,10 +116,10 @@ class OperatorRepository template <typename OperatorTypeT> void - addUnaryOperator(const ASTNodeDataType& operand_type, - const std::shared_ptr<const IUnaryOperatorProcessorBuilder>& processor_builder) + addUnaryOperator(const std::shared_ptr<const IUnaryOperatorProcessorBuilder>& processor_builder) { - const std::string unary_operator_type_name = unaryOperatorMangler<OperatorTypeT>(operand_type); + const std::string unary_operator_type_name = + unaryOperatorMangler<OperatorTypeT>(processor_builder->getOperandDataType()); if (auto [i_descriptor, success] = m_unary_operator_builder_list.try_emplace(unary_operator_type_name, Descriptor{processor_builder->getReturnValueType(), diff --git a/src/language/utils/UnaryOperatorProcessorBuilder.hpp b/src/language/utils/UnaryOperatorProcessorBuilder.hpp index d99d2e17536de2b31a3ac2c48f39800a2461f17d..8dd4b283cf3c628db8cb98aba6b36147990c279d 100644 --- a/src/language/utils/UnaryOperatorProcessorBuilder.hpp +++ b/src/language/utils/UnaryOperatorProcessorBuilder.hpp @@ -15,6 +15,12 @@ class UnaryOperatorProcessorBuilder final : public IUnaryOperatorProcessorBuilde public: UnaryOperatorProcessorBuilder() = default; + ASTNodeDataType + getOperandDataType() const + { + return ast_node_data_type_from<DataT>; + } + ASTNodeDataType getReturnValueType() const { diff --git a/src/language/utils/UnaryOperatorRegisterForB.cpp b/src/language/utils/UnaryOperatorRegisterForB.cpp index 33173e82b896e8d013f125a3b47ce42682ac132d..9eabfbe255691c7cbe2601cfd86a7ef9d449e87d 100644 --- a/src/language/utils/UnaryOperatorRegisterForB.cpp +++ b/src/language/utils/UnaryOperatorRegisterForB.cpp @@ -8,10 +8,8 @@ UnaryOperatorRegisterForB::_register_unary_minus() { OperatorRepository& repository = OperatorRepository::instance(); - auto B = ASTNodeDataType::build<ASTNodeDataType::bool_t>(); - - repository.addUnaryOperator< - language::unary_minus>(B, std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, bool>>()); + repository.addUnaryOperator<language::unary_minus>( + std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, bool>>()); } void @@ -19,10 +17,8 @@ UnaryOperatorRegisterForB::_register_unary_not() { OperatorRepository& repository = OperatorRepository::instance(); - auto B = ASTNodeDataType::build<ASTNodeDataType::bool_t>(); - - repository.addUnaryOperator< - language::unary_not>(B, std::make_shared<UnaryOperatorProcessorBuilder<language::unary_not, bool, bool>>()); + repository.addUnaryOperator<language::unary_not>( + std::make_shared<UnaryOperatorProcessorBuilder<language::unary_not, bool, bool>>()); } UnaryOperatorRegisterForB::UnaryOperatorRegisterForB() diff --git a/src/language/utils/UnaryOperatorRegisterForN.cpp b/src/language/utils/UnaryOperatorRegisterForN.cpp index baed0e43eef169229cfbff58fb0592f894b83163..26af42be06cbf05ac070bc563af02a821dd526fa 100644 --- a/src/language/utils/UnaryOperatorRegisterForN.cpp +++ b/src/language/utils/UnaryOperatorRegisterForN.cpp @@ -8,11 +8,8 @@ UnaryOperatorRegisterForN::_register_unary_minus() { OperatorRepository& repository = OperatorRepository::instance(); - auto N = ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>(); - - repository.addUnaryOperator< - language::unary_minus>(N, - std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, uint64_t>>()); + repository.addUnaryOperator<language::unary_minus>( + std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, uint64_t>>()); } UnaryOperatorRegisterForN::UnaryOperatorRegisterForN() diff --git a/src/language/utils/UnaryOperatorRegisterForR.cpp b/src/language/utils/UnaryOperatorRegisterForR.cpp index c0c60a31f5f6c222232999c3b392a18f30a767c1..cc1f637fa839d54cf8a8b612f7abe9147f79b61c 100644 --- a/src/language/utils/UnaryOperatorRegisterForR.cpp +++ b/src/language/utils/UnaryOperatorRegisterForR.cpp @@ -8,10 +8,8 @@ UnaryOperatorRegisterForR::_register_unary_minus() { OperatorRepository& repository = OperatorRepository::instance(); - auto R = ASTNodeDataType::build<ASTNodeDataType::double_t>(); - - repository.addUnaryOperator< - language::unary_minus>(R, std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, double, double>>()); + repository.addUnaryOperator<language::unary_minus>( + std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, double, double>>()); } UnaryOperatorRegisterForR::UnaryOperatorRegisterForR() diff --git a/src/language/utils/UnaryOperatorRegisterForRn.cpp b/src/language/utils/UnaryOperatorRegisterForRn.cpp index 85cc03fa476a34a6bec65f2c7f88f1d76fbad809..a35b92d8a2e53d5850c18aa4e4891a1d4c27f822 100644 --- a/src/language/utils/UnaryOperatorRegisterForRn.cpp +++ b/src/language/utils/UnaryOperatorRegisterForRn.cpp @@ -9,12 +9,9 @@ UnaryOperatorRegisterForRn<Dimension>::_register_unary_minus() { OperatorRepository& repository = OperatorRepository::instance(); - auto Rn = ASTNodeDataType::build<ASTNodeDataType::vector_t>(Dimension); - - repository - .addUnaryOperator<language::unary_minus>(Rn, - std::make_shared<UnaryOperatorProcessorBuilder< - language::unary_minus, TinyVector<Dimension>, TinyVector<Dimension>>>()); + repository.addUnaryOperator<language::unary_minus>( + std::make_shared< + UnaryOperatorProcessorBuilder<language::unary_minus, TinyVector<Dimension>, TinyVector<Dimension>>>()); } template <size_t Dimension> diff --git a/src/language/utils/UnaryOperatorRegisterForRnxn.cpp b/src/language/utils/UnaryOperatorRegisterForRnxn.cpp index 798a60086b30d008901f0d9b5fa2502e745d6fe9..01a53c096b8bc13481deb774fefa1d34b343338a 100644 --- a/src/language/utils/UnaryOperatorRegisterForRnxn.cpp +++ b/src/language/utils/UnaryOperatorRegisterForRnxn.cpp @@ -9,12 +9,9 @@ UnaryOperatorRegisterForRnxn<Dimension>::_register_unary_minus() { OperatorRepository& repository = OperatorRepository::instance(); - auto Rnxn = ASTNodeDataType::build<ASTNodeDataType::matrix_t>(Dimension, Dimension); - - repository - .addUnaryOperator<language::unary_minus>(Rnxn, - std::make_shared<UnaryOperatorProcessorBuilder< - language::unary_minus, TinyMatrix<Dimension>, TinyMatrix<Dimension>>>()); + repository.addUnaryOperator<language::unary_minus>( + std::make_shared< + UnaryOperatorProcessorBuilder<language::unary_minus, TinyMatrix<Dimension>, TinyMatrix<Dimension>>>()); } template <size_t Dimension> diff --git a/src/language/utils/UnaryOperatorRegisterForZ.cpp b/src/language/utils/UnaryOperatorRegisterForZ.cpp index 89e0b4972a0a1e2a2556d2210ab4658b35f7b976..5326157d43d621b30a238a758fe4a1feb0308204 100644 --- a/src/language/utils/UnaryOperatorRegisterForZ.cpp +++ b/src/language/utils/UnaryOperatorRegisterForZ.cpp @@ -8,11 +8,8 @@ UnaryOperatorRegisterForZ::_register_unary_minus() { OperatorRepository& repository = OperatorRepository::instance(); - auto Z = ASTNodeDataType::build<ASTNodeDataType::int_t>(); - - repository.addUnaryOperator< - language::unary_minus>(Z, - std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, int64_t>>()); + repository.addUnaryOperator<language::unary_minus>( + std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, int64_t>>()); } UnaryOperatorRegisterForZ::UnaryOperatorRegisterForZ()