diff --git a/Source/Core/Core/SysConf.cpp b/Source/Core/Core/SysConf.cpp index babbe1cc67..1efd4a2244 100644 --- a/Source/Core/Core/SysConf.cpp +++ b/Source/Core/Core/SysConf.cpp @@ -211,45 +211,45 @@ bool SysConf::Save() const return result == IOS::HLE::FS::ResultCode::Success; } -SysConf::Entry::Entry(Type type_, const std::string& name_) : type(type_), name(name_) +SysConf::Entry::Entry(Type type_, std::string name_) : type(type_), name(std::move(name_)) { if (type != Type::SmallArray && type != Type::BigArray) bytes.resize(GetNonArrayEntrySize(type)); } -SysConf::Entry::Entry(Type type_, const std::string& name_, std::vector bytes_) - : type(type_), name(name_), bytes(std::move(bytes_)) +SysConf::Entry::Entry(Type type_, std::string name_, std::vector bytes_) + : type(type_), name(std::move(name_)), bytes(std::move(bytes_)) { } -void SysConf::AddEntry(Entry&& entry) +SysConf::Entry& SysConf::AddEntry(Entry&& entry) { - m_entries.emplace_back(std::move(entry)); + return 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(), [&key](const auto& entry) { return entry.name == key; }); 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(), [&key](const auto& entry) { return entry.name == key; }); 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)) return entry; - AddEntry({type, key}); - return GetEntry(key); + + return &AddEntry({type, std::string(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(), [&key](const auto& entry) { return entry.name == key; }), diff --git a/Source/Core/Core/SysConf.h b/Source/Core/Core/SysConf.h index 79de23e5c3..cf86a3e9c5 100644 --- a/Source/Core/Core/SysConf.h +++ b/Source/Core/Core/SysConf.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "Common/Assert.h" @@ -46,8 +47,8 @@ public: ByteBool = 7, }; - Entry(Type type_, const std::string& name_); - Entry(Type type_, const std::string& name_, std::vector bytes_); + Entry(Type type_, std::string name_); + Entry(Type type_, std::string name_, std::vector bytes_); // Intended for use with the non array types. template @@ -74,21 +75,21 @@ public: std::vector bytes; }; - void AddEntry(Entry&& entry); - Entry* GetEntry(const std::string& key); - const Entry* GetEntry(const std::string& key) const; - Entry* GetOrAddEntry(const std::string& key, Entry::Type type); - void RemoveEntry(const std::string& key); + Entry& AddEntry(Entry&& entry); + Entry* GetEntry(std::string_view key); + const Entry* GetEntry(std::string_view key) const; + Entry* GetOrAddEntry(std::string_view key, Entry::Type type); + void RemoveEntry(std::string_view key); // Intended for use with the non array types. template - 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); return entry ? entry->GetData(default_value) : default_value; } template - 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); }