diff --git a/Source/Core/Common/Config/Layer.cpp b/Source/Core/Common/Config/Layer.cpp index 0e201001be..573c79c04e 100644 --- a/Source/Core/Common/Config/Layer.cpp +++ b/Source/Core/Common/Config/Layer.cpp @@ -46,8 +46,14 @@ bool Layer::Exists(const ConfigLocation& location) const bool Layer::DeleteKey(const ConfigLocation& location) { m_is_dirty = true; - bool had_value = m_map[location].has_value(); - m_map[location].reset(); + bool had_value = false; + const auto iter = m_map.find(location); + if (iter != m_map.end() && iter->second.has_value()) + { + iter->second.reset(); + had_value = true; + } + return had_value; } diff --git a/Source/Core/Common/Config/Layer.h b/Source/Core/Common/Config/Layer.h index dec08ab2f6..87c6b91f90 100644 --- a/Source/Core/Common/Config/Layer.h +++ b/Source/Core/Common/Config/Layer.h @@ -103,18 +103,18 @@ public: void DeleteAllKeys(); template - T Get(const ConfigInfo& config_info) + T Get(const ConfigInfo& config_info) const { return Get(config_info.location).value_or(config_info.default_value); } template - std::optional Get(const ConfigLocation& location) + std::optional Get(const ConfigLocation& location) const { - const std::optional& str_value = m_map[location]; - if (!str_value) + const auto iter = m_map.find(location); + if (iter == m_map.end() || !iter->second.has_value()) return std::nullopt; - return detail::TryParse(*str_value); + return detail::TryParse(*iter->second); } template @@ -129,13 +129,13 @@ public: Set(location, ValueToString(value)); } - void Set(const ConfigLocation& location, const std::string& new_value) + void Set(const ConfigLocation& location, std::string new_value) { - std::optional& current_value = m_map[location]; - if (current_value == new_value) + const auto iter = m_map.find(location); + if (iter != m_map.end() && iter->second == new_value) return; m_is_dirty = true; - current_value = new_value; + m_map.insert_or_assign(location, std::move(new_value)); } Section GetSection(System system, const std::string& section);