Path: blob/master/src/common/layered_settings_interface.cpp
4212 views
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <[email protected]>1// SPDX-License-Identifier: CC-BY-NC-ND-4.023#include "layered_settings_interface.h"4#include "common/assert.h"5#include <unordered_set>67LayeredSettingsInterface::LayeredSettingsInterface() = default;89LayeredSettingsInterface::~LayeredSettingsInterface() = default;1011bool LayeredSettingsInterface::IsEmpty()12{13return false;14}1516bool LayeredSettingsInterface::GetIntValue(const char* section, const char* key, s32* value) const17{18for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)19{20if (SettingsInterface* sif = m_layers[layer]; sif != nullptr)21{22if (sif->GetIntValue(section, key, value))23return true;24}25}2627return false;28}2930bool LayeredSettingsInterface::GetUIntValue(const char* section, const char* key, u32* value) const31{32for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)33{34if (SettingsInterface* sif = m_layers[layer]; sif != nullptr)35{36if (sif->GetUIntValue(section, key, value))37return true;38}39}4041return false;42}4344bool LayeredSettingsInterface::GetFloatValue(const char* section, const char* key, float* value) const45{46for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)47{48if (SettingsInterface* sif = m_layers[layer]; sif != nullptr)49{50if (sif->GetFloatValue(section, key, value))51return true;52}53}5455return false;56}5758bool LayeredSettingsInterface::GetDoubleValue(const char* section, const char* key, double* value) const59{60for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)61{62if (SettingsInterface* sif = m_layers[layer]; sif != nullptr)63{64if (sif->GetDoubleValue(section, key, value))65return true;66}67}6869return false;70}7172bool LayeredSettingsInterface::GetBoolValue(const char* section, const char* key, bool* value) const73{74for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)75{76if (SettingsInterface* sif = m_layers[layer]; sif != nullptr)77{78if (sif->GetBoolValue(section, key, value))79return true;80}81}8283return false;84}8586bool LayeredSettingsInterface::GetStringValue(const char* section, const char* key, std::string* value) const87{88for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)89{90if (SettingsInterface* sif = m_layers[layer]; sif != nullptr)91{92if (sif->GetStringValue(section, key, value))93return true;94}95}9697return false;98}99100bool LayeredSettingsInterface::GetStringValue(const char* section, const char* key, SmallStringBase* value) const101{102for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)103{104if (SettingsInterface* sif = m_layers[layer]; sif != nullptr)105{106if (sif->GetStringValue(section, key, value))107return true;108}109}110111return false;112}113114void LayeredSettingsInterface::SetIntValue(const char* section, const char* key, int value)115{116Panic("Attempt to call SetIntValue() on layered settings interface");117}118119void LayeredSettingsInterface::SetUIntValue(const char* section, const char* key, u32 value)120{121Panic("Attempt to call SetUIntValue() on layered settings interface");122}123124void LayeredSettingsInterface::SetFloatValue(const char* section, const char* key, float value)125{126Panic("Attempt to call SetFloatValue() on layered settings interface");127}128129void LayeredSettingsInterface::SetDoubleValue(const char* section, const char* key, double value)130{131Panic("Attempt to call SetDoubleValue() on layered settings interface");132}133134void LayeredSettingsInterface::SetBoolValue(const char* section, const char* key, bool value)135{136Panic("Attempt to call SetBoolValue() on layered settings interface");137}138139void LayeredSettingsInterface::SetStringValue(const char* section, const char* key, const char* value)140{141Panic("Attempt to call SetStringValue() on layered settings interface");142}143144bool LayeredSettingsInterface::ContainsValue(const char* section, const char* key) const145{146for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)147{148if (SettingsInterface* sif = m_layers[layer]; sif != nullptr)149{150if (sif->ContainsValue(section, key))151return true;152}153}154return false;155}156157void LayeredSettingsInterface::DeleteValue(const char* section, const char* key)158{159Panic("Attempt to call DeleteValue() on layered settings interface");160}161162void LayeredSettingsInterface::ClearSection(const char* section)163{164Panic("Attempt to call ClearSection() on layered settings interface");165}166167void LayeredSettingsInterface::RemoveSection(const char* section)168{169Panic("Attempt to call RemoveSection() on layered settings interface");170}171172void LayeredSettingsInterface::RemoveEmptySections()173{174Panic("Attempt to call RemoveEmptySections() on layered settings interface");175}176177std::vector<std::string> LayeredSettingsInterface::GetStringList(const char* section, const char* key) const178{179std::vector<std::string> ret;180181for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)182{183if (SettingsInterface* sif = m_layers[layer]; sif != nullptr)184{185ret = sif->GetStringList(section, key);186if (!ret.empty())187break;188}189}190191return ret;192}193194void LayeredSettingsInterface::SetStringList(const char* section, const char* key,195const std::vector<std::string>& items)196{197Panic("Attempt to call SetStringList() on layered settings interface");198}199200bool LayeredSettingsInterface::RemoveFromStringList(const char* section, const char* key, const char* item)201{202Panic("Attempt to call RemoveFromStringList() on layered settings interface");203}204205bool LayeredSettingsInterface::AddToStringList(const char* section, const char* key, const char* item)206{207Panic("Attempt to call AddToStringList() on layered settings interface");208}209210std::vector<std::pair<std::string, std::string>> LayeredSettingsInterface::GetKeyValueList(const char* section) const211{212std::unordered_set<std::string_view> seen;213std::vector<std::pair<std::string, std::string>> ret;214for (u32 layer = FIRST_LAYER; layer <= LAST_LAYER; layer++)215{216if (SettingsInterface* sif = m_layers[layer])217{218const size_t newly_added_begin = ret.size();219std::vector<std::pair<std::string, std::string>> entries = sif->GetKeyValueList(section);220for (std::pair<std::string, std::string>& entry : entries)221{222if (seen.find(entry.first) != seen.end())223continue;224ret.push_back(std::move(entry));225}226227// Mark keys as seen after processing all entries in case the layer has multiple entries for a specific key228for (auto cur = ret.begin() + newly_added_begin, end = ret.end(); cur < end; cur++)229seen.insert(cur->first);230}231}232233return ret;234}235236void LayeredSettingsInterface::SetKeyValueList(const char* section,237const std::vector<std::pair<std::string, std::string>>& items)238{239Panic("Attempt to call SetKeyValueList() on layered settings interface");240}241242243