From ef43ccfd91458e2e165cf4f0e02989a071def059 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Tue, 15 Jun 2021 14:41:32 +0200
Subject: [PATCH] Replace Array by std::vector -> this improves a lot
 performances!

---
 src/analysis/Polynomial1D.hpp | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/analysis/Polynomial1D.hpp b/src/analysis/Polynomial1D.hpp
index ca19bcf99..df62a381b 100644
--- a/src/analysis/Polynomial1D.hpp
+++ b/src/analysis/Polynomial1D.hpp
@@ -7,7 +7,7 @@
 class [[nodiscard]] Polynomial1D
 {
  private:
-  Array<double> m_coefficients;
+  std::vector<double> m_coefficients;
 
   PUGS_INLINE
   size_t _getRealDegree() const
@@ -93,7 +93,7 @@ class [[nodiscard]] Polynomial1D
   Polynomial1D operator*(const Polynomial1D& p) const
   {
     Polynomial1D product(this->degree() + p.degree());
-    product.m_coefficients.fill(0);
+    std::fill(begin(product.m_coefficients), end(product.m_coefficients), 0);
     for (size_t i = 0; i < this->m_coefficients.size(); ++i) {
       for (size_t j = 0; j < p.m_coefficients.size(); ++j) {
         product.m_coefficients[i + j] += this->m_coefficients[i] * p.m_coefficients[j];
@@ -107,7 +107,10 @@ class [[nodiscard]] Polynomial1D
   {
     auto sum_left_is_bigger = [](const Polynomial1D& greater, const Polynomial1D& smaller) {
       Polynomial1D result(greater.degree());
-      copy_to(greater.m_coefficients, result.m_coefficients);
+      for (size_t i = 0; i < greater.m_coefficients.size(); ++i) {
+        result.m_coefficients[i] = greater.m_coefficients[i];
+      }
+
       for (size_t i = 0; i < smaller.m_coefficients.size(); ++i) {
         result.m_coefficients[i] += smaller.m_coefficients[i];
       }
@@ -150,9 +153,11 @@ class [[nodiscard]] Polynomial1D
   {
     const Polynomial1D& p = *this;
     Polynomial1D ratio(this->degree());
-    ratio.m_coefficients.fill(0);
+    std::fill(begin(ratio.m_coefficients), end(ratio.m_coefficients), 0);
     Polynomial1D remaining(this->degree());
-    copy_to(m_coefficients, remaining.m_coefficients);
+    for (size_t i = 0; i < m_coefficients.size(); ++i) {
+      remaining.m_coefficients[i] = m_coefficients[i];
+    }
 
     const size_t p_degree = p.degree();
     const size_t q_degree = q._getRealDegree();
@@ -176,9 +181,11 @@ class [[nodiscard]] Polynomial1D
   {
     const Polynomial1D& p = *this;
     Polynomial1D ratio(this->degree());
-    ratio.m_coefficients.fill(0);
+    std::fill(begin(ratio.m_coefficients), end(ratio.m_coefficients), 0);
     Polynomial1D remaining(this->degree());
-    copy_to(m_coefficients, remaining.m_coefficients);
+    for (size_t i = 0; i < m_coefficients.size(); ++i) {
+      remaining.m_coefficients[i] = m_coefficients[i];
+    }
 
     const size_t p_degree = p.degree();
     const size_t q_degree = q._getRealDegree();
@@ -266,18 +273,18 @@ class [[nodiscard]] Polynomial1D
 
     size_t real_degree = this->_getRealDegree();
     if (real_degree + 1 < m_coefficients.size()) {
-      Array<double> real_coefficients(real_degree + 1);
+      std::vector<double> real_coefficients(real_degree + 1);
       for (size_t i = 0; i <= real_degree; ++i) {
         real_coefficients[i] = m_coefficients[i];
       }
-      m_coefficients = real_coefficients;
+      m_coefficients = std::move(real_coefficients);
     }
   }
 
   PUGS_INLINE
   explicit Polynomial1D(const size_t degree) : m_coefficients(degree + 1)
   {
-    m_coefficients.fill(0);
+    std::fill(m_coefficients.begin(), m_coefficients.end(), 0);
   }
 
   Polynomial1D(const Polynomial1D&) = default;
-- 
GitLab