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