From 7ceb768a2e87781289a6f887da2f85de67530026 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 23 Jun 2017 09:54:21 +0100 Subject: [PATCH] Use an HashMap to store options in option manager Turns out looking for options can get pretty slow, so O(1) lookup seems better. This should improve the performance of the #1460 issue --- src/option_manager.cc | 26 ++++++++++++-------------- src/option_manager.hh | 21 ++++++++------------- src/string.hh | 1 + 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/option_manager.cc b/src/option_manager.cc index d842a254..b3c56d31 100644 --- a/src/option_manager.cc +++ b/src/option_manager.cc @@ -48,13 +48,13 @@ struct option_not_found : public runtime_error Option& OptionManager::get_local_option(StringView name) { - auto it = find_option(m_options, name); + auto it = m_options.find(name); if (it != m_options.end()) - return **it; + return *(it->value); else if (m_parent) { - m_options.emplace_back((*m_parent)[name].clone(*this)); - return *m_options.back(); + auto* clone = (*m_parent)[name].clone(*this); + return *m_options.insert({clone->name(), std::unique_ptr