From 17c8042bd6f2887992d2aac9b5a7bc927ea36b1a 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 17:49:14 +0100
Subject: [PATCH] Add TinyMatrix for string handling

- allow affectation of TinyMatrix to string
- allow concatenation of TinyMatrix to string
---
 .../utils/AffectationRegisterForString.cpp    | 58 +++++++++++--------
 .../utils/BinaryOperatorRegisterForString.cpp |  3 +
 2 files changed, 38 insertions(+), 23 deletions(-)

diff --git a/src/language/utils/AffectationRegisterForString.cpp b/src/language/utils/AffectationRegisterForString.cpp
index 37446e243..7946aeb45 100644
--- a/src/language/utils/AffectationRegisterForString.cpp
+++ b/src/language/utils/AffectationRegisterForString.cpp
@@ -39,6 +39,18 @@ AffectationRegisterForString::_register_eq_op()
     language::eq_op>(string_t, ASTNodeDataType::build<ASTNodeDataType::vector_t>(3),
                      std::make_shared<AffectationProcessorBuilder<language::eq_op, std::string, TinyVector<3>>>());
 
+  repository.addAffectation<
+    language::eq_op>(string_t, ASTNodeDataType::build<ASTNodeDataType::matrix_t>(1, 1),
+                     std::make_shared<AffectationProcessorBuilder<language::eq_op, std::string, TinyMatrix<1>>>());
+
+  repository.addAffectation<
+    language::eq_op>(string_t, ASTNodeDataType::build<ASTNodeDataType::matrix_t>(2, 2),
+                     std::make_shared<AffectationProcessorBuilder<language::eq_op, std::string, TinyMatrix<2>>>());
+
+  repository.addAffectation<
+    language::eq_op>(string_t, ASTNodeDataType::build<ASTNodeDataType::matrix_t>(3, 3),
+                     std::make_shared<AffectationProcessorBuilder<language::eq_op, std::string, TinyMatrix<3>>>());
+
   repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(string_t),
                                              ASTNodeDataType::build<ASTNodeDataType::bool_t>(),
                                              std::make_shared<AffectationToTupleProcessorBuilder<std::string>>());
@@ -66,6 +78,18 @@ AffectationRegisterForString::_register_eq_op()
   repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(string_t),
                                              ASTNodeDataType::build<ASTNodeDataType::vector_t>(3),
                                              std::make_shared<AffectationToTupleProcessorBuilder<std::string>>());
+
+  repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(string_t),
+                                             ASTNodeDataType::build<ASTNodeDataType::matrix_t>(1, 1),
+                                             std::make_shared<AffectationToTupleProcessorBuilder<std::string>>());
+
+  repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(string_t),
+                                             ASTNodeDataType::build<ASTNodeDataType::matrix_t>(2, 2),
+                                             std::make_shared<AffectationToTupleProcessorBuilder<std::string>>());
+
+  repository.addAffectation<language::eq_op>(ASTNodeDataType::build<ASTNodeDataType::tuple_t>(string_t),
+                                             ASTNodeDataType::build<ASTNodeDataType::matrix_t>(3, 3),
+                                             std::make_shared<AffectationToTupleProcessorBuilder<std::string>>());
 }
 
 void
@@ -107,29 +131,17 @@ AffectationRegisterForString::_register_pluseq_op()
                                                  std::make_shared<AffectationProcessorBuilder<
                                                    language::pluseq_op, std::string, TinyVector<3>>>());
 
-  // this->_addAffectation("string += string",
-  //                       std::make_shared<AffectationProcessorBuilder<language::pluseq_op, std::string,
-  //                       std::string>>());
-  // this->_addAffectation("string += B",
-  //                       std::make_shared<AffectationProcessorBuilder<language::pluseq_op, std::string, bool>>());
-  // this->_addAffectation("string += N",
-  //                       std::make_shared<AffectationProcessorBuilder<language::pluseq_op, std::string, uint64_t>>());
-  // this->_addAffectation("string += Z",
-  //                       std::make_shared<AffectationProcessorBuilder<language::pluseq_op, std::string, int64_t>>());
-  // this->_addAffectation("string += R",
-  //                       std::make_shared<AffectationProcessorBuilder<language::pluseq_op, std::string, double>>());
-  // this
-  //   ->_addAffectation("string += R^1",
-  //                     std::make_shared<AffectationProcessorBuilder<language::pluseq_op, std::string,
-  //                     TinyVector<1>>>());
-  // this
-  //   ->_addAffectation("string += R^2",
-  //                     std::make_shared<AffectationProcessorBuilder<language::pluseq_op, std::string,
-  //                     TinyVector<2>>>());
-  // this
-  //   ->_addAffectation("string += R^3",
-  //                     std::make_shared<AffectationProcessorBuilder<language::pluseq_op, std::string,
-  //                     TinyVector<3>>>());
+  repository.addAffectation<language::pluseq_op>(string_t, ASTNodeDataType::build<ASTNodeDataType::matrix_t>(1, 1),
+                                                 std::make_shared<AffectationProcessorBuilder<
+                                                   language::pluseq_op, std::string, TinyMatrix<1>>>());
+
+  repository.addAffectation<language::pluseq_op>(string_t, ASTNodeDataType::build<ASTNodeDataType::matrix_t>(2, 2),
+                                                 std::make_shared<AffectationProcessorBuilder<
+                                                   language::pluseq_op, std::string, TinyMatrix<2>>>());
+
+  repository.addAffectation<language::pluseq_op>(string_t, ASTNodeDataType::build<ASTNodeDataType::matrix_t>(3, 3),
+                                                 std::make_shared<AffectationProcessorBuilder<
+                                                   language::pluseq_op, std::string, TinyMatrix<3>>>());
 }
 
 AffectationRegisterForString::AffectationRegisterForString()
diff --git a/src/language/utils/BinaryOperatorRegisterForString.cpp b/src/language/utils/BinaryOperatorRegisterForString.cpp
index 1323e21ea..0e89cbe00 100644
--- a/src/language/utils/BinaryOperatorRegisterForString.cpp
+++ b/src/language/utils/BinaryOperatorRegisterForString.cpp
@@ -36,5 +36,8 @@ BinaryOperatorRegisterForString::BinaryOperatorRegisterForString()
   this->_register_concat<TinyVector<1>>();
   this->_register_concat<TinyVector<2>>();
   this->_register_concat<TinyVector<3>>();
+  this->_register_concat<TinyMatrix<1>>();
+  this->_register_concat<TinyMatrix<2>>();
+  this->_register_concat<TinyMatrix<3>>();
   this->_register_concat<std::string>();
 }
-- 
GitLab