From 7e5bff269f96805e604735af9c1dfcd994627cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Tue, 24 Nov 2020 10:11:20 +0100 Subject: [PATCH] Refactor AffectationRegisterForR* and UnaryOperatorRegisterForR* Use single template infrastructures according to dimensions - AffectationRegisterForR - UnaryOperatorRegisterForRn --- .../utils/AffectationRegisterForR1.cpp | 102 ------------- .../utils/AffectationRegisterForR1.hpp | 16 -- .../utils/AffectationRegisterForR2.cpp | 84 ---------- .../utils/AffectationRegisterForR2.hpp | 16 -- .../utils/AffectationRegisterForR3.cpp | 84 ---------- .../utils/AffectationRegisterForR3.hpp | 16 -- .../utils/AffectationRegisterForRn.cpp | 143 ++++++++++++++++++ .../utils/AffectationRegisterForRn.hpp | 19 +++ src/language/utils/CMakeLists.txt | 8 +- src/language/utils/OperatorRepository.cpp | 20 +-- .../utils/UnaryOperatorRegisterForR1.cpp | 20 --- .../utils/UnaryOperatorRegisterForR1.hpp | 13 -- .../utils/UnaryOperatorRegisterForR2.cpp | 20 --- .../utils/UnaryOperatorRegisterForR2.hpp | 13 -- .../utils/UnaryOperatorRegisterForR3.cpp | 20 --- .../utils/UnaryOperatorRegisterForR3.hpp | 13 -- .../utils/UnaryOperatorRegisterForRn.cpp | 28 ++++ .../utils/UnaryOperatorRegisterForRn.hpp | 16 ++ 18 files changed, 216 insertions(+), 435 deletions(-) delete mode 100644 src/language/utils/AffectationRegisterForR1.cpp delete mode 100644 src/language/utils/AffectationRegisterForR1.hpp delete mode 100644 src/language/utils/AffectationRegisterForR2.cpp delete mode 100644 src/language/utils/AffectationRegisterForR2.hpp delete mode 100644 src/language/utils/AffectationRegisterForR3.cpp delete mode 100644 src/language/utils/AffectationRegisterForR3.hpp create mode 100644 src/language/utils/AffectationRegisterForRn.cpp create mode 100644 src/language/utils/AffectationRegisterForRn.hpp delete mode 100644 src/language/utils/UnaryOperatorRegisterForR1.cpp delete mode 100644 src/language/utils/UnaryOperatorRegisterForR1.hpp delete mode 100644 src/language/utils/UnaryOperatorRegisterForR2.cpp delete mode 100644 src/language/utils/UnaryOperatorRegisterForR2.hpp delete mode 100644 src/language/utils/UnaryOperatorRegisterForR3.cpp delete mode 100644 src/language/utils/UnaryOperatorRegisterForR3.hpp create mode 100644 src/language/utils/UnaryOperatorRegisterForRn.cpp create mode 100644 src/language/utils/UnaryOperatorRegisterForRn.hpp diff --git a/src/language/utils/AffectationRegisterForR1.cpp b/src/language/utils/AffectationRegisterForR1.cpp deleted file mode 100644 index 20873d6fd..000000000 --- a/src/language/utils/AffectationRegisterForR1.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include <language/utils/AffectationRegisterForR1.hpp> - -#include <language/utils/AffectationProcessorBuilder.hpp> -#include <language/utils/BasicAffectationRegistrerFor.hpp> -#include <language/utils/OperatorRepository.hpp> - -void -AffectationRegisterForR1::_register_eq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R1 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(1); - - repository.addAffectation< - language::eq_op>(R1, ASTNodeDataType::build<ASTNodeDataType::bool_t>(), - std::make_shared<AffectationProcessorBuilder<language::eq_op, TinyVector<1>, bool>>()); - - repository.addAffectation< - language::eq_op>(R1, ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>(), - std::make_shared<AffectationProcessorBuilder<language::eq_op, TinyVector<1>, uint64_t>>()); - - repository.addAffectation< - language::eq_op>(R1, ASTNodeDataType::build<ASTNodeDataType::int_t>(), - std::make_shared<AffectationProcessorBuilder<language::eq_op, TinyVector<1>, int64_t>>()); - - repository.addAffectation< - language::eq_op>(R1, ASTNodeDataType::build<ASTNodeDataType::double_t>(), - std::make_shared<AffectationProcessorBuilder<language::eq_op, TinyVector<1>, double>>()); - - repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(R1), - ASTNodeDataType::build<ASTNodeDataType::bool_t>(), - std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<1>>>()); - - repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(R1), - ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>(), - std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<1>>>()); - - repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(R1), - ASTNodeDataType::build<ASTNodeDataType::int_t>(), - std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<1>>>()); - - repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(R1), - ASTNodeDataType::build<ASTNodeDataType::double_t>(), - std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<1>>>()); -} - -void -AffectationRegisterForR1::_register_pluseq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R1 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(1); - - repository.addAffectation<language::pluseq_op>(R1, R1, - std::make_shared<AffectationProcessorBuilder< - language::pluseq_op, TinyVector<1>, TinyVector<1>>>()); -} - -void -AffectationRegisterForR1::_register_minuseq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R1 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(1); - - repository.addAffectation<language::minuseq_op>(R1, R1, - std::make_shared<AffectationProcessorBuilder< - language::minuseq_op, TinyVector<1>, TinyVector<1>>>()); -} - -void -AffectationRegisterForR1::_register_multiplyeq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R1 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(1); - - repository.addAffectation<language::multiplyeq_op>(R1, ASTNodeDataType::build<ASTNodeDataType::bool_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<1>, bool>>()); - - repository.addAffectation<language::multiplyeq_op>(R1, ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<1>, uint64_t>>()); - - repository.addAffectation<language::multiplyeq_op>(R1, ASTNodeDataType::build<ASTNodeDataType::int_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<1>, int64_t>>()); - - repository.addAffectation<language::multiplyeq_op>(R1, ASTNodeDataType::build<ASTNodeDataType::double_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<1>, double>>()); -} - -AffectationRegisterForR1::AffectationRegisterForR1() -{ - BasicAffectationRegisterFor<TinyVector<1>>{}; - this->_register_eq_op(); - this->_register_pluseq_op(); - this->_register_minuseq_op(); - this->_register_multiplyeq_op(); -} diff --git a/src/language/utils/AffectationRegisterForR1.hpp b/src/language/utils/AffectationRegisterForR1.hpp deleted file mode 100644 index 27f263f74..000000000 --- a/src/language/utils/AffectationRegisterForR1.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef AFFECTATION_REGISTER_FOR_R1_HPP -#define AFFECTATION_REGISTER_FOR_R1_HPP - -class AffectationRegisterForR1 -{ - private: - void _register_eq_op(); - void _register_pluseq_op(); - void _register_minuseq_op(); - void _register_multiplyeq_op(); - - public: - AffectationRegisterForR1(); -}; - -#endif // AFFECTATION_REGISTER_FOR_R1_HPP diff --git a/src/language/utils/AffectationRegisterForR2.cpp b/src/language/utils/AffectationRegisterForR2.cpp deleted file mode 100644 index 0fca199a9..000000000 --- a/src/language/utils/AffectationRegisterForR2.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include <language/utils/AffectationRegisterForR2.hpp> - -#include <language/utils/AffectationProcessorBuilder.hpp> -#include <language/utils/BasicAffectationRegistrerFor.hpp> -#include <language/utils/OperatorRepository.hpp> - -void -AffectationRegisterForR2::_register_eq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R2 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(2); - - repository.addAffectation< - language::eq_op>(R2, ASTNodeDataType::build<ASTNodeDataType::int_t>(), - std::make_shared<AffectationFromZeroProcessorBuilder<language::eq_op, TinyVector<2>>>()); - - repository.addAffectation<language::eq_op>(R2, - ASTNodeDataType::build<ASTNodeDataType::list_t>( - std::vector<std::shared_ptr<const ASTNodeDataType>>{}), - std::make_shared<AffectationToTinyVectorFromListProcessorBuilder< - language::eq_op, TinyVector<2>>>()); - - repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(R2), - ASTNodeDataType::build<ASTNodeDataType::int_t>(), - std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<2>>>()); -} - -void -AffectationRegisterForR2::_register_pluseq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R2 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(2); - - repository.addAffectation<language::pluseq_op>(R2, R2, - std::make_shared<AffectationProcessorBuilder< - language::pluseq_op, TinyVector<2>, TinyVector<2>>>()); -} - -void -AffectationRegisterForR2::_register_minuseq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R2 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(2); - - repository.addAffectation<language::minuseq_op>(R2, R2, - std::make_shared<AffectationProcessorBuilder< - language::minuseq_op, TinyVector<2>, TinyVector<2>>>()); -} - -void -AffectationRegisterForR2::_register_multiplyeq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R2 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(2); - - repository.addAffectation<language::multiplyeq_op>(R2, ASTNodeDataType::build<ASTNodeDataType::bool_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<2>, bool>>()); - - repository.addAffectation<language::multiplyeq_op>(R2, ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<2>, uint64_t>>()); - - repository.addAffectation<language::multiplyeq_op>(R2, ASTNodeDataType::build<ASTNodeDataType::int_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<2>, int64_t>>()); - - repository.addAffectation<language::multiplyeq_op>(R2, ASTNodeDataType::build<ASTNodeDataType::double_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<2>, double>>()); -} - -AffectationRegisterForR2::AffectationRegisterForR2() -{ - BasicAffectationRegisterFor<TinyVector<2>>{}; - this->_register_eq_op(); - this->_register_pluseq_op(); - this->_register_minuseq_op(); - this->_register_multiplyeq_op(); -} diff --git a/src/language/utils/AffectationRegisterForR2.hpp b/src/language/utils/AffectationRegisterForR2.hpp deleted file mode 100644 index cc1fcc9ef..000000000 --- a/src/language/utils/AffectationRegisterForR2.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef AFFECTATION_REGISTER_FOR_R2_HPP -#define AFFECTATION_REGISTER_FOR_R2_HPP - -class AffectationRegisterForR2 -{ - private: - void _register_eq_op(); - void _register_pluseq_op(); - void _register_minuseq_op(); - void _register_multiplyeq_op(); - - public: - AffectationRegisterForR2(); -}; - -#endif // AFFECTATION_REGISTER_FOR_R2_HPP diff --git a/src/language/utils/AffectationRegisterForR3.cpp b/src/language/utils/AffectationRegisterForR3.cpp deleted file mode 100644 index d5925d7bc..000000000 --- a/src/language/utils/AffectationRegisterForR3.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include <language/utils/AffectationRegisterForR3.hpp> - -#include <language/utils/AffectationProcessorBuilder.hpp> -#include <language/utils/BasicAffectationRegistrerFor.hpp> -#include <language/utils/OperatorRepository.hpp> - -void -AffectationRegisterForR3::_register_eq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R3 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(3); - - repository.addAffectation< - language::eq_op>(R3, ASTNodeDataType::build<ASTNodeDataType::int_t>(), - std::make_shared<AffectationFromZeroProcessorBuilder<language::eq_op, TinyVector<3>>>()); - - repository.addAffectation<language::eq_op>(R3, - ASTNodeDataType::build<ASTNodeDataType::list_t>( - std::vector<std::shared_ptr<const ASTNodeDataType>>{}), - std::make_shared<AffectationToTinyVectorFromListProcessorBuilder< - language::eq_op, TinyVector<3>>>()); - - repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(R3), - ASTNodeDataType::build<ASTNodeDataType::int_t>(), - std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<3>>>()); -} - -void -AffectationRegisterForR3::_register_pluseq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R3 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(3); - - repository.addAffectation<language::pluseq_op>(R3, R3, - std::make_shared<AffectationProcessorBuilder< - language::pluseq_op, TinyVector<3>, TinyVector<3>>>()); -} - -void -AffectationRegisterForR3::_register_minuseq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R3 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(3); - - repository.addAffectation<language::minuseq_op>(R3, R3, - std::make_shared<AffectationProcessorBuilder< - language::minuseq_op, TinyVector<3>, TinyVector<3>>>()); -} - -void -AffectationRegisterForR3::_register_multiplyeq_op() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R3 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(3); - - repository.addAffectation<language::multiplyeq_op>(R3, ASTNodeDataType::build<ASTNodeDataType::bool_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<3>, bool>>()); - - repository.addAffectation<language::multiplyeq_op>(R3, ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<3>, uint64_t>>()); - - repository.addAffectation<language::multiplyeq_op>(R3, ASTNodeDataType::build<ASTNodeDataType::int_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<3>, int64_t>>()); - - repository.addAffectation<language::multiplyeq_op>(R3, ASTNodeDataType::build<ASTNodeDataType::double_t>(), - std::make_shared<AffectationProcessorBuilder< - language::multiplyeq_op, TinyVector<3>, double>>()); -} - -AffectationRegisterForR3::AffectationRegisterForR3() -{ - BasicAffectationRegisterFor<TinyVector<3>>{}; - this->_register_eq_op(); - this->_register_pluseq_op(); - this->_register_minuseq_op(); - this->_register_multiplyeq_op(); -} diff --git a/src/language/utils/AffectationRegisterForR3.hpp b/src/language/utils/AffectationRegisterForR3.hpp deleted file mode 100644 index 7eb551cdd..000000000 --- a/src/language/utils/AffectationRegisterForR3.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef AFFECTATION_REGISTER_FOR_R3_HPP -#define AFFECTATION_REGISTER_FOR_R3_HPP - -class AffectationRegisterForR3 -{ - private: - void _register_eq_op(); - void _register_pluseq_op(); - void _register_minuseq_op(); - void _register_multiplyeq_op(); - - public: - AffectationRegisterForR3(); -}; - -#endif // AFFECTATION_REGISTER_FOR_R3_HPP diff --git a/src/language/utils/AffectationRegisterForRn.cpp b/src/language/utils/AffectationRegisterForRn.cpp new file mode 100644 index 000000000..7d38dc64c --- /dev/null +++ b/src/language/utils/AffectationRegisterForRn.cpp @@ -0,0 +1,143 @@ +#include <language/utils/AffectationRegisterForRn.hpp> + +#include <language/utils/AffectationProcessorBuilder.hpp> +#include <language/utils/BasicAffectationRegistrerFor.hpp> +#include <language/utils/OperatorRepository.hpp> + +template <size_t Dimension> +void +AffectationRegisterForRn<Dimension>::_register_eq_op() +{ + OperatorRepository& repository = OperatorRepository::instance(); + + auto Rn = ASTNodeDataType::build<ASTNodeDataType::vector_t>(Dimension); + + repository.addAffectation< + language::eq_op>(Rn, ASTNodeDataType::build<ASTNodeDataType::int_t>(), + std::make_shared<AffectationFromZeroProcessorBuilder<language::eq_op, TinyVector<Dimension>>>()); + + repository.addAffectation<language::eq_op>(Rn, + ASTNodeDataType::build<ASTNodeDataType::list_t>( + std::vector<std::shared_ptr<const ASTNodeDataType>>{}), + std::make_shared<AffectationToTinyVectorFromListProcessorBuilder< + language::eq_op, TinyVector<Dimension>>>()); + + repository + .addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(Rn), + ASTNodeDataType::build<ASTNodeDataType::int_t>(), + std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<Dimension>>>()); +} + +template <> +void +AffectationRegisterForRn<1>::_register_eq_op() +{ + constexpr size_t Dimension = 1; + + OperatorRepository& repository = OperatorRepository::instance(); + + auto Rn = ASTNodeDataType::build<ASTNodeDataType::vector_t>(Dimension); + + repository.addAffectation< + language::eq_op>(Rn, ASTNodeDataType::build<ASTNodeDataType::bool_t>(), + std::make_shared<AffectationProcessorBuilder<language::eq_op, TinyVector<Dimension>, bool>>()); + + repository.addAffectation< + language::eq_op>(Rn, ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>(), + std::make_shared<AffectationProcessorBuilder<language::eq_op, TinyVector<Dimension>, uint64_t>>()); + + repository.addAffectation< + language::eq_op>(Rn, ASTNodeDataType::build<ASTNodeDataType::int_t>(), + std::make_shared<AffectationProcessorBuilder<language::eq_op, TinyVector<Dimension>, int64_t>>()); + + repository.addAffectation< + language::eq_op>(Rn, ASTNodeDataType::build<ASTNodeDataType::double_t>(), + std::make_shared<AffectationProcessorBuilder<language::eq_op, TinyVector<Dimension>, double>>()); + + repository + .addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(Rn), + ASTNodeDataType::build<ASTNodeDataType::bool_t>(), + std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<Dimension>>>()); + + repository + .addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(Rn), + ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>(), + std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<Dimension>>>()); + + repository + .addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(Rn), + ASTNodeDataType::build<ASTNodeDataType::int_t>(), + std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<Dimension>>>()); + + repository + .addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(Rn), + ASTNodeDataType::build<ASTNodeDataType::double_t>(), + std::make_shared<AffectationToTupleProcessorBuilder<TinyVector<Dimension>>>()); +} + +template <size_t Dimension> +void +AffectationRegisterForRn<Dimension>::_register_pluseq_op() +{ + OperatorRepository& repository = OperatorRepository::instance(); + + auto Rn = ASTNodeDataType::build<ASTNodeDataType::vector_t>(Dimension); + + repository + .addAffectation<language::pluseq_op>(Rn, Rn, + std::make_shared<AffectationProcessorBuilder< + language::pluseq_op, TinyVector<Dimension>, TinyVector<Dimension>>>()); +} + +template <size_t Dimension> +void +AffectationRegisterForRn<Dimension>::_register_minuseq_op() +{ + OperatorRepository& repository = OperatorRepository::instance(); + + auto Rn = ASTNodeDataType::build<ASTNodeDataType::vector_t>(Dimension); + + repository + .addAffectation<language::minuseq_op>(Rn, Rn, + std::make_shared<AffectationProcessorBuilder< + language::minuseq_op, TinyVector<Dimension>, TinyVector<Dimension>>>()); +} + +template <size_t Dimension> +void +AffectationRegisterForRn<Dimension>::_register_multiplyeq_op() +{ + OperatorRepository& repository = OperatorRepository::instance(); + + auto Rn = ASTNodeDataType::build<ASTNodeDataType::vector_t>(Dimension); + + repository.addAffectation<language::multiplyeq_op>(Rn, ASTNodeDataType::build<ASTNodeDataType::bool_t>(), + std::make_shared<AffectationProcessorBuilder< + language::multiplyeq_op, TinyVector<Dimension>, bool>>()); + + repository.addAffectation<language::multiplyeq_op>(Rn, ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>(), + std::make_shared<AffectationProcessorBuilder< + language::multiplyeq_op, TinyVector<Dimension>, uint64_t>>()); + + repository.addAffectation<language::multiplyeq_op>(Rn, ASTNodeDataType::build<ASTNodeDataType::int_t>(), + std::make_shared<AffectationProcessorBuilder< + language::multiplyeq_op, TinyVector<Dimension>, int64_t>>()); + + repository.addAffectation<language::multiplyeq_op>(Rn, ASTNodeDataType::build<ASTNodeDataType::double_t>(), + std::make_shared<AffectationProcessorBuilder< + language::multiplyeq_op, TinyVector<Dimension>, double>>()); +} + +template <size_t Dimension> +AffectationRegisterForRn<Dimension>::AffectationRegisterForRn() +{ + BasicAffectationRegisterFor<TinyVector<Dimension>>{}; + this->_register_eq_op(); + this->_register_pluseq_op(); + this->_register_minuseq_op(); + this->_register_multiplyeq_op(); +} + +template class AffectationRegisterForRn<1>; +template class AffectationRegisterForRn<2>; +template class AffectationRegisterForRn<3>; diff --git a/src/language/utils/AffectationRegisterForRn.hpp b/src/language/utils/AffectationRegisterForRn.hpp new file mode 100644 index 000000000..337a340b8 --- /dev/null +++ b/src/language/utils/AffectationRegisterForRn.hpp @@ -0,0 +1,19 @@ +#ifndef AFFECTATION_REGISTER_FOR_RN_HPP +#define AFFECTATION_REGISTER_FOR_RN_HPP + +#include <cstdlib> + +template <size_t Dimension> +class AffectationRegisterForRn +{ + private: + void _register_eq_op(); + void _register_pluseq_op(); + void _register_minuseq_op(); + void _register_multiplyeq_op(); + + public: + AffectationRegisterForRn(); +}; + +#endif // AFFECTATION_REGISTER_FOR_RN_HPP diff --git a/src/language/utils/CMakeLists.txt b/src/language/utils/CMakeLists.txt index 0e456e4d1..ed105ca47 100644 --- a/src/language/utils/CMakeLists.txt +++ b/src/language/utils/CMakeLists.txt @@ -4,9 +4,7 @@ add_library(PugsLanguageUtils AffectationRegisterForB.cpp AffectationRegisterForN.cpp AffectationRegisterForR.cpp - AffectationRegisterForR1.cpp - AffectationRegisterForR2.cpp - AffectationRegisterForR3.cpp + AffectationRegisterForRn.cpp AffectationRegisterForString.cpp AffectationRegisterForZ.cpp ASTDotPrinter.cpp @@ -28,9 +26,7 @@ add_library(PugsLanguageUtils UnaryOperatorRegisterForB.cpp UnaryOperatorRegisterForN.cpp UnaryOperatorRegisterForR.cpp - UnaryOperatorRegisterForR1.cpp - UnaryOperatorRegisterForR2.cpp - UnaryOperatorRegisterForR3.cpp + UnaryOperatorRegisterForRn.cpp UnaryOperatorRegisterForZ.cpp ) diff --git a/src/language/utils/OperatorRepository.cpp b/src/language/utils/OperatorRepository.cpp index 77aa5578b..93856da8c 100644 --- a/src/language/utils/OperatorRepository.cpp +++ b/src/language/utils/OperatorRepository.cpp @@ -4,9 +4,7 @@ #include <language/utils/AffectationRegisterForB.hpp> #include <language/utils/AffectationRegisterForN.hpp> #include <language/utils/AffectationRegisterForR.hpp> -#include <language/utils/AffectationRegisterForR1.hpp> -#include <language/utils/AffectationRegisterForR2.hpp> -#include <language/utils/AffectationRegisterForR3.hpp> +#include <language/utils/AffectationRegisterForRn.hpp> #include <language/utils/AffectationRegisterForString.hpp> #include <language/utils/AffectationRegisterForZ.hpp> @@ -24,9 +22,7 @@ #include <language/utils/UnaryOperatorRegisterForB.hpp> #include <language/utils/UnaryOperatorRegisterForN.hpp> #include <language/utils/UnaryOperatorRegisterForR.hpp> -#include <language/utils/UnaryOperatorRegisterForR1.hpp> -#include <language/utils/UnaryOperatorRegisterForR2.hpp> -#include <language/utils/UnaryOperatorRegisterForR3.hpp> +#include <language/utils/UnaryOperatorRegisterForRn.hpp> #include <language/utils/UnaryOperatorRegisterForZ.hpp> #include <utils/PugsAssert.hpp> @@ -66,9 +62,9 @@ OperatorRepository::_initialize() AffectationRegisterForN{}; AffectationRegisterForZ{}; AffectationRegisterForR{}; - AffectationRegisterForR1{}; - AffectationRegisterForR2{}; - AffectationRegisterForR3{}; + AffectationRegisterForRn<1>{}; + AffectationRegisterForRn<2>{}; + AffectationRegisterForRn<3>{}; AffectationRegisterForString{}; BinaryOperatorRegisterForB{}; @@ -88,7 +84,7 @@ OperatorRepository::_initialize() UnaryOperatorRegisterForN{}; UnaryOperatorRegisterForZ{}; UnaryOperatorRegisterForR{}; - UnaryOperatorRegisterForR1{}; - UnaryOperatorRegisterForR2{}; - UnaryOperatorRegisterForR3{}; + UnaryOperatorRegisterForRn<1>{}; + UnaryOperatorRegisterForRn<2>{}; + UnaryOperatorRegisterForRn<3>{}; } diff --git a/src/language/utils/UnaryOperatorRegisterForR1.cpp b/src/language/utils/UnaryOperatorRegisterForR1.cpp deleted file mode 100644 index b225d2eea..000000000 --- a/src/language/utils/UnaryOperatorRegisterForR1.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include <language/utils/UnaryOperatorRegisterForR1.hpp> - -#include <language/utils/OperatorRepository.hpp> -#include <language/utils/UnaryOperatorProcessorBuilder.hpp> - -void -UnaryOperatorRegisterForR1::_register_unary_minus() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R1 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(1); - - repository.addUnaryOperator<language::unary_minus>(R1, std::make_shared<UnaryOperatorProcessorBuilder< - language::unary_minus, TinyVector<1>, TinyVector<1>>>()); -} - -UnaryOperatorRegisterForR1::UnaryOperatorRegisterForR1() -{ - this->_register_unary_minus(); -} diff --git a/src/language/utils/UnaryOperatorRegisterForR1.hpp b/src/language/utils/UnaryOperatorRegisterForR1.hpp deleted file mode 100644 index 2e9d37781..000000000 --- a/src/language/utils/UnaryOperatorRegisterForR1.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef UNARY_OPERATOR_REGISTER_FOR_R1_HPP -#define UNARY_OPERATOR_REGISTER_FOR_R1_HPP - -class UnaryOperatorRegisterForR1 -{ - private: - void _register_unary_minus(); - - public: - UnaryOperatorRegisterForR1(); -}; - -#endif // UNARY_OPERATOR_REGISTER_FOR_R1_HPP diff --git a/src/language/utils/UnaryOperatorRegisterForR2.cpp b/src/language/utils/UnaryOperatorRegisterForR2.cpp deleted file mode 100644 index 14b61630f..000000000 --- a/src/language/utils/UnaryOperatorRegisterForR2.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include <language/utils/UnaryOperatorRegisterForR2.hpp> - -#include <language/utils/OperatorRepository.hpp> -#include <language/utils/UnaryOperatorProcessorBuilder.hpp> - -void -UnaryOperatorRegisterForR2::_register_unary_minus() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R2 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(2); - - repository.addUnaryOperator<language::unary_minus>(R2, std::make_shared<UnaryOperatorProcessorBuilder< - language::unary_minus, TinyVector<2>, TinyVector<2>>>()); -} - -UnaryOperatorRegisterForR2::UnaryOperatorRegisterForR2() -{ - this->_register_unary_minus(); -} diff --git a/src/language/utils/UnaryOperatorRegisterForR2.hpp b/src/language/utils/UnaryOperatorRegisterForR2.hpp deleted file mode 100644 index bcc78a9d5..000000000 --- a/src/language/utils/UnaryOperatorRegisterForR2.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef UNARY_OPERATOR_REGISTER_FOR_R2_HPP -#define UNARY_OPERATOR_REGISTER_FOR_R2_HPP - -class UnaryOperatorRegisterForR2 -{ - private: - void _register_unary_minus(); - - public: - UnaryOperatorRegisterForR2(); -}; - -#endif // UNARY_OPERATOR_REGISTER_FOR_R2_HPP diff --git a/src/language/utils/UnaryOperatorRegisterForR3.cpp b/src/language/utils/UnaryOperatorRegisterForR3.cpp deleted file mode 100644 index d288e5eef..000000000 --- a/src/language/utils/UnaryOperatorRegisterForR3.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include <language/utils/UnaryOperatorRegisterForR3.hpp> - -#include <language/utils/OperatorRepository.hpp> -#include <language/utils/UnaryOperatorProcessorBuilder.hpp> - -void -UnaryOperatorRegisterForR3::_register_unary_minus() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R3 = ASTNodeDataType::build<ASTNodeDataType::vector_t>(3); - - repository.addUnaryOperator<language::unary_minus>(R3, std::make_shared<UnaryOperatorProcessorBuilder< - language::unary_minus, TinyVector<3>, TinyVector<3>>>()); -} - -UnaryOperatorRegisterForR3::UnaryOperatorRegisterForR3() -{ - this->_register_unary_minus(); -} diff --git a/src/language/utils/UnaryOperatorRegisterForR3.hpp b/src/language/utils/UnaryOperatorRegisterForR3.hpp deleted file mode 100644 index 1f9710c0a..000000000 --- a/src/language/utils/UnaryOperatorRegisterForR3.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef UNARY_OPERATOR_REGISTER_FOR_R3_HPP -#define UNARY_OPERATOR_REGISTER_FOR_R3_HPP - -class UnaryOperatorRegisterForR3 -{ - private: - void _register_unary_minus(); - - public: - UnaryOperatorRegisterForR3(); -}; - -#endif // UNARY_OPERATOR_REGISTER_FOR_R3_HPP diff --git a/src/language/utils/UnaryOperatorRegisterForRn.cpp b/src/language/utils/UnaryOperatorRegisterForRn.cpp new file mode 100644 index 000000000..85cc03fa4 --- /dev/null +++ b/src/language/utils/UnaryOperatorRegisterForRn.cpp @@ -0,0 +1,28 @@ +#include <language/utils/UnaryOperatorRegisterForRn.hpp> + +#include <language/utils/OperatorRepository.hpp> +#include <language/utils/UnaryOperatorProcessorBuilder.hpp> + +template <size_t Dimension> +void +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>>>()); +} + +template <size_t Dimension> +UnaryOperatorRegisterForRn<Dimension>::UnaryOperatorRegisterForRn() +{ + this->_register_unary_minus(); +} + +template class UnaryOperatorRegisterForRn<1>; +template class UnaryOperatorRegisterForRn<2>; +template class UnaryOperatorRegisterForRn<3>; diff --git a/src/language/utils/UnaryOperatorRegisterForRn.hpp b/src/language/utils/UnaryOperatorRegisterForRn.hpp new file mode 100644 index 000000000..a0000f2f5 --- /dev/null +++ b/src/language/utils/UnaryOperatorRegisterForRn.hpp @@ -0,0 +1,16 @@ +#ifndef UNARY_OPERATOR_REGISTER_FOR_RN_HPP +#define UNARY_OPERATOR_REGISTER_FOR_RN_HPP + +#include <cstdlib> + +template <size_t Dimension> +class UnaryOperatorRegisterForRn +{ + private: + void _register_unary_minus(); + + public: + UnaryOperatorRegisterForRn(); +}; + +#endif // UNARY_OPERATOR_REGISTER_FOR_RN_HPP -- GitLab