Minor performance improvement in copy constructors/assignments of ModelTree and DynamicModel
parent
98d4f922ca
commit
5b12354dc3
|
@ -41,7 +41,7 @@ DynamicModel::copyHelper(const DynamicModel &m)
|
||||||
{
|
{
|
||||||
map<tuple<int, int, int>, expr_t> dt2;
|
map<tuple<int, int, int>, expr_t> dt2;
|
||||||
for (const auto &it : dt)
|
for (const auto &it : dt)
|
||||||
dt2[it.first] = f(it.second);
|
dt2.emplace(it.first, f(it.second));
|
||||||
return dt2;
|
return dt2;
|
||||||
};
|
};
|
||||||
for (const auto &it : m.blocks_derivatives_other_endo)
|
for (const auto &it : m.blocks_derivatives_other_endo)
|
||||||
|
|
|
@ -47,7 +47,7 @@ ModelTree::copyHelper(const ModelTree &m)
|
||||||
for (const auto &it : m.aux_equations)
|
for (const auto &it : m.aux_equations)
|
||||||
aux_equations.push_back(dynamic_cast<BinaryOpNode *>(f(it)));
|
aux_equations.push_back(dynamic_cast<BinaryOpNode *>(f(it)));
|
||||||
|
|
||||||
auto convert_deriv_map = [f](map<vector<int>, expr_t> dm)
|
auto convert_deriv_map = [f](const map<vector<int>, expr_t> &dm)
|
||||||
{
|
{
|
||||||
map<vector<int>, expr_t> dm2;
|
map<vector<int>, expr_t> dm2;
|
||||||
for (const auto &it : dm)
|
for (const auto &it : dm)
|
||||||
|
@ -59,9 +59,9 @@ ModelTree::copyHelper(const ModelTree &m)
|
||||||
for (const auto &it : m.derivatives)
|
for (const auto &it : m.derivatives)
|
||||||
derivatives.push_back(convert_deriv_map(it));
|
derivatives.push_back(convert_deriv_map(it));
|
||||||
for (const auto &it : m.params_derivatives)
|
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;
|
temporary_terms_t tt2;
|
||||||
for (const auto &it : tt)
|
for (const auto &it : tt)
|
||||||
|
@ -71,21 +71,21 @@ ModelTree::copyHelper(const ModelTree &m)
|
||||||
|
|
||||||
// Temporary terms
|
// Temporary terms
|
||||||
for (const auto &it : m.temporary_terms_mlv)
|
for (const auto &it : m.temporary_terms_mlv)
|
||||||
temporary_terms_mlv[dynamic_cast<VariableNode *>(f(it.first))] = f(it.second);
|
temporary_terms_mlv.emplace(dynamic_cast<VariableNode *>(f(it.first)), f(it.second));
|
||||||
for (const auto &it : m.temporary_terms_derivatives)
|
for (const auto &it : m.temporary_terms_derivatives)
|
||||||
temporary_terms_derivatives.push_back(convert_temporary_terms_t(it));
|
temporary_terms_derivatives.push_back(convert_temporary_terms_t(it));
|
||||||
for (const auto &it : m.temporary_terms_idxs)
|
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)
|
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)
|
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
|
// Other stuff
|
||||||
for (const auto &it : m.trend_symbols_map)
|
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)
|
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)
|
for (const auto &it : m.equation_type_and_normalized_equation)
|
||||||
equation_type_and_normalized_equation.emplace_back(it.first, dynamic_cast<BinaryOpNode *>(f(it.second)));
|
equation_type_and_normalized_equation.emplace_back(it.first, dynamic_cast<BinaryOpNode *>(f(it.second)));
|
||||||
|
@ -94,7 +94,7 @@ ModelTree::copyHelper(const ModelTree &m)
|
||||||
{
|
{
|
||||||
map<tuple<int, int, int>, expr_t> v;
|
map<tuple<int, int, int>, expr_t> v;
|
||||||
for (const auto &it2 : it)
|
for (const auto &it2 : it)
|
||||||
v[it2.first] = f(it2.second);
|
v.emplace(it2.first, f(it2.second));
|
||||||
blocks_derivatives.push_back(v);
|
blocks_derivatives.push_back(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ ModelTree::copyHelper(const ModelTree &m)
|
||||||
for (const auto &it : m.blocks_temporary_terms)
|
for (const auto &it : m.blocks_temporary_terms)
|
||||||
blocks_temporary_terms.push_back(convert_vector_tt(it));
|
blocks_temporary_terms.push_back(convert_vector_tt(it));
|
||||||
for (const auto &it : m.blocks_temporary_terms_idxs)
|
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,
|
ModelTree::ModelTree(SymbolTable &symbol_table_arg,
|
||||||
|
|
Loading…
Reference in New Issue