From 98c27fad59c5b0354b8d6962d6633774026bebb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Mon, 16 Oct 2023 11:19:29 -0400 Subject: [PATCH] StaticModel: add missing fields in copy constructor and assigment operators This should have been in commit 0169240f76532df6d507b01647e8576d1094e95d. --- src/StaticModel.cc | 21 ++++++++++++++++++++- src/StaticModel.hh | 5 +++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/StaticModel.cc b/src/StaticModel.cc index bfaf0bda..83bdb1ee 100644 --- a/src/StaticModel.cc +++ b/src/StaticModel.cc @@ -36,9 +36,23 @@ StaticModel::StaticModel(SymbolTable &symbol_table_arg, { } +void +StaticModel::copyHelper(const StaticModel &m) +{ + auto f = [this](const ExprNode *e) { return e->clone(*this); }; + + for (const auto &it : m.ramsey_multipliers_derivatives_temporary_terms) + ramsey_multipliers_derivatives_temporary_terms.insert(f(it)); + for (const auto &it : m.ramsey_multipliers_derivatives_temporary_terms_idxs) + ramsey_multipliers_derivatives_temporary_terms_idxs.emplace(f(it.first), it.second); +} + StaticModel::StaticModel(const StaticModel &m) : - ModelTree{m} + ModelTree{m}, + ramsey_multipliers_derivatives{m.ramsey_multipliers_derivatives}, + ramsey_multipliers_derivatives_sparse_colptr{m.ramsey_multipliers_derivatives_sparse_colptr} { + copyHelper(m); } StaticModel & @@ -46,6 +60,11 @@ StaticModel::operator=(const StaticModel &m) { ModelTree::operator=(m); + ramsey_multipliers_derivatives = m.ramsey_multipliers_derivatives; + ramsey_multipliers_derivatives_sparse_colptr = m.ramsey_multipliers_derivatives_sparse_colptr; + + copyHelper(m); + return *this; } diff --git a/src/StaticModel.hh b/src/StaticModel.hh index f940c50b..67e24815 100644 --- a/src/StaticModel.hh +++ b/src/StaticModel.hh @@ -117,6 +117,11 @@ private: template<ExprNodeOutputType output_type> void writeRamseyMultipliersDerivativesHelper(ostream &output) const; + //! Internal helper for the copy constructor and assignment operator + /*! Copies all the structures that contain ExprNode*, by the converting the + pointers into their equivalent in the new tree */ + void copyHelper(const StaticModel &m); + protected: string modelClassName() const override -- GitLab