SysConf: Make use of std::string_view
We can allow strings to be used with the SysConf interface in potentially non-allocating manners.
This commit is contained in:
parent
3b2e31230f
commit
74224c94a7
|
@ -227,29 +227,29 @@ void SysConf::AddEntry(Entry&& entry)
|
||||||
m_entries.emplace_back(std::move(entry));
|
m_entries.emplace_back(std::move(entry));
|
||||||
}
|
}
|
||||||
|
|
||||||
SysConf::Entry* SysConf::GetEntry(const std::string& key)
|
SysConf::Entry* SysConf::GetEntry(std::string_view key)
|
||||||
{
|
{
|
||||||
const auto iterator = std::find_if(m_entries.begin(), m_entries.end(),
|
const auto iterator = std::find_if(m_entries.begin(), m_entries.end(),
|
||||||
[&key](const auto& entry) { return entry.name == key; });
|
[&key](const auto& entry) { return entry.name == key; });
|
||||||
return iterator != m_entries.end() ? &*iterator : nullptr;
|
return iterator != m_entries.end() ? &*iterator : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const SysConf::Entry* SysConf::GetEntry(const std::string& key) const
|
const SysConf::Entry* SysConf::GetEntry(std::string_view key) const
|
||||||
{
|
{
|
||||||
const auto iterator = std::find_if(m_entries.begin(), m_entries.end(),
|
const auto iterator = std::find_if(m_entries.begin(), m_entries.end(),
|
||||||
[&key](const auto& entry) { return entry.name == key; });
|
[&key](const auto& entry) { return entry.name == key; });
|
||||||
return iterator != m_entries.end() ? &*iterator : nullptr;
|
return iterator != m_entries.end() ? &*iterator : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
SysConf::Entry* SysConf::GetOrAddEntry(const std::string& key, Entry::Type type)
|
SysConf::Entry* SysConf::GetOrAddEntry(std::string_view key, Entry::Type type)
|
||||||
{
|
{
|
||||||
if (Entry* entry = GetEntry(key))
|
if (Entry* entry = GetEntry(key))
|
||||||
return entry;
|
return entry;
|
||||||
AddEntry({type, key});
|
AddEntry({type, std::string(key)});
|
||||||
return GetEntry(key);
|
return GetEntry(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SysConf::RemoveEntry(const std::string& key)
|
void SysConf::RemoveEntry(std::string_view key)
|
||||||
{
|
{
|
||||||
m_entries.erase(std::remove_if(m_entries.begin(), m_entries.end(),
|
m_entries.erase(std::remove_if(m_entries.begin(), m_entries.end(),
|
||||||
[&key](const auto& entry) { return entry.name == key; }),
|
[&key](const auto& entry) { return entry.name == key; }),
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <string_view>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Common/Assert.h"
|
#include "Common/Assert.h"
|
||||||
|
@ -75,20 +76,20 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
void AddEntry(Entry&& entry);
|
void AddEntry(Entry&& entry);
|
||||||
Entry* GetEntry(const std::string& key);
|
Entry* GetEntry(std::string_view key);
|
||||||
const Entry* GetEntry(const std::string& key) const;
|
const Entry* GetEntry(std::string_view key) const;
|
||||||
Entry* GetOrAddEntry(const std::string& key, Entry::Type type);
|
Entry* GetOrAddEntry(std::string_view key, Entry::Type type);
|
||||||
void RemoveEntry(const std::string& key);
|
void RemoveEntry(std::string_view key);
|
||||||
|
|
||||||
// Intended for use with the non array types.
|
// Intended for use with the non array types.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T GetData(const std::string& key, T default_value) const
|
T GetData(std::string_view key, T default_value) const
|
||||||
{
|
{
|
||||||
const Entry* entry = GetEntry(key);
|
const Entry* entry = GetEntry(key);
|
||||||
return entry ? entry->GetData(default_value) : default_value;
|
return entry ? entry->GetData(default_value) : default_value;
|
||||||
}
|
}
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void SetData(const std::string& key, Entry::Type type, T value)
|
void SetData(std::string_view key, Entry::Type type, T value)
|
||||||
{
|
{
|
||||||
GetOrAddEntry(key, type)->SetData(value);
|
GetOrAddEntry(key, type)->SetData(value);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue