From 5b12354dc35e469524afda847ebf3d54b1516294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= Date: Wed, 21 Sep 2022 15:13:41 +0200 Subject: [PATCH] Minor performance improvement in copy constructors/assignments of ModelTree and DynamicModel --- src/DynamicModel.cc | 2 +- src/ModelTree.cc | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 1807762f..c5d3ad74 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -41,7 +41,7 @@ DynamicModel::copyHelper(const DynamicModel &m) { map, expr_t> dt2; for (const auto &it : dt) - dt2[it.first] = f(it.second); + dt2.emplace(it.first, f(it.second)); return dt2; }; for (const auto &it : m.blocks_derivatives_other_endo) diff --git a/src/ModelTree.cc b/src/ModelTree.cc index 1ad98dd6..92346ae0 100644 --- a/src/ModelTree.cc +++ b/src/ModelTree.cc @@ -47,7 +47,7 @@ ModelTree::copyHelper(const ModelTree &m) for (const auto &it : m.aux_equations) aux_equations.push_back(dynamic_cast(f(it))); - auto convert_deriv_map = [f](map, expr_t> dm) + auto convert_deriv_map = [f](const map, expr_t> &dm) { map, expr_t> dm2; for (const auto &it : dm) @@ -59,9 +59,9 @@ ModelTree::copyHelper(const ModelTree &m) for (const auto &it : m.derivatives) derivatives.push_back(convert_deriv_map(it)); for (const auto &it : m.params_derivatives) - params_derivatives[it.first] = convert_deriv_map(it.second); + params_derivatives.emplace(it.first, convert_deriv_map(it.second)); - auto convert_temporary_terms_t = [f](temporary_terms_t tt) + auto convert_temporary_terms_t = [f](const temporary_terms_t &tt) { temporary_terms_t tt2; for (const auto &it : tt) @@ -71,21 +71,21 @@ ModelTree::copyHelper(const ModelTree &m) // Temporary terms for (const auto &it : m.temporary_terms_mlv) - temporary_terms_mlv[dynamic_cast(f(it.first))] = f(it.second); + temporary_terms_mlv.emplace(dynamic_cast(f(it.first)), f(it.second)); for (const auto &it : m.temporary_terms_derivatives) temporary_terms_derivatives.push_back(convert_temporary_terms_t(it)); for (const auto &it : m.temporary_terms_idxs) - temporary_terms_idxs[f(it.first)] = it.second; + temporary_terms_idxs.emplace(f(it.first), it.second); for (const auto &it : m.params_derivs_temporary_terms) - params_derivs_temporary_terms[it.first] = convert_temporary_terms_t(it.second); + params_derivs_temporary_terms.emplace(it.first, convert_temporary_terms_t(it.second)); for (const auto &it : m.params_derivs_temporary_terms_idxs) - params_derivs_temporary_terms_idxs[f(it.first)] = it.second; + params_derivs_temporary_terms_idxs.emplace(f(it.first), it.second); // Other stuff for (const auto &it : m.trend_symbols_map) - trend_symbols_map[it.first] = f(it.second); + trend_symbols_map.emplace(it.first, f(it.second)); for (const auto &it : m.nonstationary_symbols_map) - nonstationary_symbols_map[it.first] = {it.second.first, f(it.second.second)}; + nonstationary_symbols_map.emplace(it.first, pair{it.second.first, f(it.second.second)}); for (const auto &it : m.equation_type_and_normalized_equation) equation_type_and_normalized_equation.emplace_back(it.first, dynamic_cast(f(it.second))); @@ -94,7 +94,7 @@ ModelTree::copyHelper(const ModelTree &m) { map, expr_t> v; for (const auto &it2 : it) - v[it2.first] = f(it2.second); + v.emplace(it2.first, f(it2.second)); blocks_derivatives.push_back(v); } @@ -113,7 +113,7 @@ ModelTree::copyHelper(const ModelTree &m) for (const auto &it : m.blocks_temporary_terms) blocks_temporary_terms.push_back(convert_vector_tt(it)); for (const auto &it : m.blocks_temporary_terms_idxs) - blocks_temporary_terms_idxs[f(it.first)] = it.second; + blocks_temporary_terms_idxs.emplace(f(it.first), it.second); } ModelTree::ModelTree(SymbolTable &symbol_table_arg,