Skip to content
Permalink
Browse files

Change Layer code not to create superfluous std::optional entries in …

…LayerMap
  • Loading branch information...
CookiePLMonster committed Jul 30, 2019
1 parent cb4eecd commit 48a4b621255c1aeaeaebd3add616fa6c8738f201
Showing with 17 additions and 11 deletions.
  1. +8 −2 Source/Core/Common/Config/Layer.cpp
  2. +9 −9 Source/Core/Common/Config/Layer.h
@@ -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;
}

@@ -103,18 +103,18 @@ class Layer
void DeleteAllKeys();

template <typename T>
T Get(const ConfigInfo<T>& config_info)
T Get(const ConfigInfo<T>& config_info) const
{
return Get<T>(config_info.location).value_or(config_info.default_value);
}

template <typename T>
std::optional<T> Get(const ConfigLocation& location)
std::optional<T> Get(const ConfigLocation& location) const
{
const std::optional<std::string>& 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<T>(*str_value);
return detail::TryParse<T>(*iter->second);
}

template <typename T>
@@ -129,13 +129,13 @@ class Layer
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<std::string>& 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);

0 comments on commit 48a4b62

Please sign in to comment.
You can’t perform that action at this time.