DataTree: optimize the filling of node maps

Use map::{try,}emplace() instead of operator[], which should in theory be
slightly faster.
master
Sébastien Villemot 2023-03-23 12:50:18 +01:00
parent 69a394a115
commit 7c6402cc34
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
2 changed files with 14 additions and 14 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2003-2022 Dynare Team
* Copyright © 2003-2023 Dynare Team
*
* This file is part of Dynare.
*
@ -132,7 +132,7 @@ DataTree::AddNonNegativeConstant(const string &value)
auto sp = make_unique<NumConstNode>(*this, node_list.size(), id);
auto p = sp.get();
node_list.push_back(move(sp));
num_const_node_map[id] = p;
num_const_node_map.emplace(id, p);
return p;
}
@ -152,7 +152,7 @@ DataTree::AddVariable(int symb_id, int lag)
auto sp = make_unique<VariableNode>(*this, node_list.size(), symb_id, lag);
auto p = sp.get();
node_list.push_back(move(sp));
variable_node_map[{ symb_id, lag }] = p;
variable_node_map.try_emplace({ symb_id, lag }, p);
return p;
}
@ -687,7 +687,7 @@ DataTree::AddVarExpectation(const string &model_name)
auto sp = make_unique<VarExpectationNode>(*this, node_list.size(), model_name);
auto p = sp.get();
node_list.push_back(move(sp));
var_expectation_node_map[model_name] = p;
var_expectation_node_map.emplace(model_name, p);
return p;
}
@ -701,7 +701,7 @@ DataTree::AddPacExpectation(const string &model_name)
auto sp = make_unique<PacExpectationNode>(*this, node_list.size(), model_name);
auto p = sp.get();
node_list.push_back(move(sp));
pac_expectation_node_map[model_name] = p;
pac_expectation_node_map.emplace(model_name, p);
return p;
}
@ -715,7 +715,7 @@ DataTree::AddPacTargetNonstationary(const string &model_name)
auto sp = make_unique<PacTargetNonstationaryNode>(*this, node_list.size(), model_name);
auto p = sp.get();
node_list.push_back(move(sp));
pac_target_nonstationary_node_map[model_name] = p;
pac_target_nonstationary_node_map.emplace(model_name, p);
return p;
}
@ -736,7 +736,7 @@ DataTree::AddLocalVariable(int symb_id, expr_t value) noexcept(false)
if (local_variables_table.contains(symb_id))
throw LocalVariableException(symbol_table.getName(symb_id));
local_variables_table[symb_id] = value;
local_variables_table.emplace(symb_id, value);
local_variables_vector.push_back(symb_id);
}
@ -752,7 +752,7 @@ DataTree::AddExternalFunction(int symb_id, const vector<expr_t> &arguments)
auto sp = make_unique<ExternalFunctionNode>(*this, node_list.size(), symb_id, arguments);
auto p = sp.get();
node_list.push_back(move(sp));
external_function_node_map[{ arguments, symb_id }] = p;
external_function_node_map.try_emplace({ arguments, symb_id }, p);
return p;
}
@ -768,7 +768,7 @@ DataTree::AddFirstDerivExternalFunction(int top_level_symb_id, const vector<expr
auto sp = make_unique<FirstDerivExternalFunctionNode>(*this, node_list.size(), top_level_symb_id, arguments, input_index);
auto p = sp.get();
node_list.push_back(move(sp));
first_deriv_external_function_node_map[{ arguments, input_index, top_level_symb_id }] = p;
first_deriv_external_function_node_map.try_emplace({ arguments, input_index, top_level_symb_id }, p);
return p;
}
@ -785,7 +785,7 @@ DataTree::AddSecondDerivExternalFunction(int top_level_symb_id, const vector<exp
auto sp = make_unique<SecondDerivExternalFunctionNode>(*this, node_list.size(), top_level_symb_id, arguments, input_index1, input_index2);
auto p = sp.get();
node_list.push_back(move(sp));
second_deriv_external_function_node_map[{ arguments, input_index1, input_index2, top_level_symb_id }] = p;
second_deriv_external_function_node_map.try_emplace({ arguments, input_index1, input_index2, top_level_symb_id }, p);
return p;
}

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2003-2022 Dynare Team
* Copyright © 2003-2023 Dynare Team
*
* This file is part of Dynare.
*
@ -425,7 +425,7 @@ DataTree::AddUnaryOp(UnaryOpcode op_code, expr_t arg, int arg_exp_info_set, int
auto sp = make_unique<UnaryOpNode>(*this, node_list.size(), op_code, arg, arg_exp_info_set, param1_symb_id, param2_symb_id, adl_param_name, adl_lags);
auto p = sp.get();
node_list.push_back(move(sp));
unary_op_node_map[{ arg, op_code, arg_exp_info_set, param1_symb_id, param2_symb_id, adl_param_name, adl_lags }] = p;
unary_op_node_map.try_emplace({ arg, op_code, arg_exp_info_set, param1_symb_id, param2_symb_id, adl_param_name, adl_lags }, p);
return p;
}
@ -451,7 +451,7 @@ DataTree::AddBinaryOp(expr_t arg1, BinaryOpcode op_code, expr_t arg2, int powerD
auto sp = make_unique<BinaryOpNode>(*this, node_list.size(), arg1, op_code, arg2, powerDerivOrder);
auto p = sp.get();
node_list.push_back(move(sp));
binary_op_node_map[{ arg1, arg2, op_code, powerDerivOrder }] = p;
binary_op_node_map.try_emplace({ arg1, arg2, op_code, powerDerivOrder }, p);
return p;
}
@ -478,7 +478,7 @@ DataTree::AddTrinaryOp(expr_t arg1, TrinaryOpcode op_code, expr_t arg2, expr_t a
auto sp = make_unique<TrinaryOpNode>(*this, node_list.size(), arg1, op_code, arg2, arg3);
auto p = sp.get();
node_list.push_back(move(sp));
trinary_op_node_map[{ arg1, arg2, arg3, op_code }] = p;
trinary_op_node_map.try_emplace({ arg1, arg2, arg3, op_code }, p);
return p;
}