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

This commit is contained in:
Silent 2019-07-30 18:43:54 +02:00
parent cb4eecde52
commit 48a4b62125
No known key found for this signature in database
GPG Key ID: AE53149BB0C45AF1
2 changed files with 17 additions and 11 deletions

View File

@ -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;
}

View File

@ -103,18 +103,18 @@ public:
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 @@ 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<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);