diff --git a/src/StaticModel.cc b/src/StaticModel.cc index bfaf0bdaf1fd6ff1b5e9da469bd555df3735fe5a..83bdb1ee0ce2fe548efd94e706939ea5f31c3f2e 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 f940c50b2856babc24492e34302f25ac08e7ad9a..67e24815a9d592834ac6686317b59fdead7f0d53 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