From c8f970e2b04709280ef144ff135dac15945d21b2 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sun, 29 Oct 2017 19:17:58 +0000 Subject: [PATCH] Config: Remove recursive layer --- Source/Core/Common/Config/Config.cpp | 8 ---- Source/Core/Common/Config/Config.h | 7 ++- Source/Core/Common/Config/Enums.h | 1 - Source/Core/Common/Config/Layer.cpp | 32 +------------ Source/Core/Common/Config/Layer.h | 10 +--- Source/Core/Common/Config/Section.cpp | 47 ------------------- Source/Core/Common/Config/Section.h | 14 ------ Source/Core/Core/BootManager.cpp | 2 +- .../Core/ConfigLoaders/BaseConfigLoader.cpp | 8 ++-- .../Core/ConfigLoaders/BaseConfigLoader.h | 4 +- .../Core/ConfigLoaders/MovieConfigLoader.cpp | 32 ++++++------- .../Core/ConfigLoaders/MovieConfigLoader.h | 2 +- Source/Core/Core/Movie.cpp | 2 +- 13 files changed, 30 insertions(+), 139 deletions(-) diff --git a/Source/Core/Common/Config/Config.cpp b/Source/Core/Common/Config/Config.cpp index 339155dbe3..eb763c3632 100644 --- a/Source/Core/Common/Config/Config.cpp +++ b/Source/Core/Common/Config/Config.cpp @@ -17,11 +17,6 @@ static std::list s_callbacks; void InvokeConfigChangedCallbacks(); -Section* GetOrCreateSection(System system, const std::string& section_name) -{ - return s_layers[LayerType::Meta]->GetOrCreateSection(system, section_name); -} - Layers* GetLayers() { return &s_layers; @@ -83,8 +78,6 @@ void Init() { // These layers contain temporary values ClearCurrentRunLayer(); - // This layer always has to exist - s_layers[LayerType::Meta] = std::make_unique(); } void Shutdown() @@ -129,7 +122,6 @@ const std::string& GetLayerName(LayerType layer) {LayerType::Movie, "Movie"}, {LayerType::CommandLine, "Command Line"}, {LayerType::CurrentRun, "Current Run"}, - {LayerType::Meta, "Top"}, }; return layer_to_name.at(layer); } diff --git a/Source/Core/Common/Config/Config.h b/Source/Core/Common/Config/Config.h index 905960ed4a..454fa3585e 100644 --- a/Source/Core/Common/Config/Config.h +++ b/Source/Core/Common/Config/Config.h @@ -36,9 +36,6 @@ struct ConfigInfo using Layers = std::map>; using ConfigChangedCallback = std::function; -// Common function used for getting configuration -Section* GetOrCreateSection(System system, const std::string& section_name); - // Layer management Layers* GetLayers(); void AddLayer(std::unique_ptr layer); @@ -66,13 +63,15 @@ LayerType GetActiveLayerForConfig(const ConfigLocation&); template T Get(LayerType layer, const ConfigInfo& info) { + if (layer == LayerType::Meta) + return Get(info); return GetLayer(layer)->Get(info); } template T Get(const ConfigInfo& info) { - return Get(LayerType::Meta, info); + return GetLayer(GetActiveLayerForConfig(info.location))->Get(info); } template diff --git a/Source/Core/Common/Config/Enums.h b/Source/Core/Common/Config/Enums.h index 9ffd9688c2..a5b62f812d 100644 --- a/Source/Core/Common/Config/Enums.h +++ b/Source/Core/Common/Config/Enums.h @@ -34,7 +34,6 @@ enum class System }; constexpr std::array SEARCH_ORDER{{ - // Skip the meta layer LayerType::CurrentRun, LayerType::CommandLine, LayerType::Movie, LayerType::Netplay, LayerType::LocalGame, LayerType::GlobalGame, LayerType::Base, }}; diff --git a/Source/Core/Common/Config/Layer.cpp b/Source/Core/Common/Config/Layer.cpp index b613c4366b..a3912281f5 100644 --- a/Source/Core/Common/Config/Layer.cpp +++ b/Source/Core/Common/Config/Layer.cpp @@ -67,15 +67,7 @@ Section* Layer::GetOrCreateSection(System system, const std::string& section_nam Section* section = GetSection(system, section_name); if (!section) { - if (m_layer == LayerType::Meta) - { - m_sections[system].emplace_back( - std::make_unique(m_layer, system, section_name)); - } - else - { - m_sections[system].emplace_back(std::make_unique
(m_layer, system, section_name)); - } + m_sections[system].emplace_back(std::make_unique
(m_layer, system, section_name)); section = m_sections[system].back().get(); } return section; @@ -124,26 +116,4 @@ void Layer::ClearDirty() [](auto& section) { section->ClearDirty(); }); }); } - -RecursiveLayer::RecursiveLayer() : Layer(LayerType::Meta) -{ -} - -Section* RecursiveLayer::GetSection(System system, const std::string& section_name) -{ - // Always queries backwards recursively, so it doesn't matter if it exists or not on this layer - return GetOrCreateSection(system, section_name); -} - -Section* RecursiveLayer::GetOrCreateSection(System system, const std::string& section_name) -{ - Section* section = Layer::GetSection(system, section_name); - if (!section) - { - m_sections[system].emplace_back( - std::make_unique(m_layer, system, section_name)); - section = m_sections[system].back().get(); - } - return section; -} } diff --git a/Source/Core/Common/Config/Layer.h b/Source/Core/Common/Config/Layer.h index edbb706081..ac5b5c3e78 100644 --- a/Source/Core/Common/Config/Layer.h +++ b/Source/Core/Common/Config/Layer.h @@ -84,12 +84,4 @@ protected: const LayerType m_layer; std::unique_ptr m_loader; }; - -class RecursiveLayer final : public Layer -{ -public: - RecursiveLayer(); - Section* GetSection(System system, const std::string& section_name) override; - Section* GetOrCreateSection(System system, const std::string& section_name) override; -}; -} +} // namespace Config diff --git a/Source/Core/Common/Config/Section.cpp b/Source/Core/Common/Config/Section.cpp index bb9fcef0e3..12adff2b1f 100644 --- a/Source/Core/Common/Config/Section.cpp +++ b/Source/Core/Common/Config/Section.cpp @@ -246,51 +246,4 @@ void Section::ClearDirty() { m_dirty = false; } - -RecursiveSection::RecursiveSection(LayerType layer, System system, const std::string& name) - : Section(layer, system, name) -{ -} - -bool RecursiveSection::Exists(const std::string& key) const -{ - auto layers_it = Config::GetLayers()->find(LayerType::Meta); - do - { - const Section* layer_section = layers_it->second->GetSection(m_system, m_name); - if (layer_section && layer_section->Exists(key)) - { - return true; - } - } while (--layers_it != Config::GetLayers()->end()); - - return false; -} - -bool RecursiveSection::Get(const std::string& key, std::string* value, - const std::string& default_value) const -{ - for (auto layer_id : SEARCH_ORDER) - { - auto layers_it = Config::GetLayers()->find(layer_id); - if (layers_it == Config::GetLayers()->end()) - continue; - - const Section* layer_section = layers_it->second->GetSection(m_system, m_name); - if (layer_section && layer_section->Exists(key)) - { - return layer_section->Get(key, value, default_value); - } - } - - return Section::Get(key, value, default_value); -} - -void RecursiveSection::Set(const std::string& key, const std::string& value) -{ - // The RecursiveSection can't set since it is used to recursively get values from the layer - // map. - // It is only a part of the meta layer, and the meta layer isn't allowed to set any values. - _assert_msg_(COMMON, false, "Don't try to set values here!"); -} } diff --git a/Source/Core/Common/Config/Section.h b/Source/Core/Common/Config/Section.h index 948ebd67d4..592b791722 100644 --- a/Source/Core/Common/Config/Section.h +++ b/Source/Core/Common/Config/Section.h @@ -96,18 +96,4 @@ protected: std::vector m_lines; }; - -// Only to be used with the meta-layer -class RecursiveSection final : public Section -{ -public: - RecursiveSection(LayerType layer, System system, const std::string& name); - - bool Exists(const std::string& key) const override; - - bool Get(const std::string& key, std::string* value, - const std::string& default_value = NULL_STRING) const override; - - void Set(const std::string& key, const std::string& value) override; -}; } diff --git a/Source/Core/Core/BootManager.cpp b/Source/Core/Core/BootManager.cpp index 79771acdc3..e7d2cc91eb 100644 --- a/Source/Core/Core/BootManager.cpp +++ b/Source/Core/Core/BootManager.cpp @@ -376,7 +376,7 @@ bool BootCore(std::unique_ptr boot) // Ensure any new settings are written to the SYSCONF if (StartUp.bWii) - ConfigLoaders::SaveToSYSCONF(Config::GetLayer(Config::LayerType::Meta)); + ConfigLoaders::SaveToSYSCONF(Config::LayerType::Meta); const bool load_ipl = !StartUp.bWii && !StartUp.bHLE_BS2 && std::holds_alternative(boot->parameters); diff --git a/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp index 8969748a69..848501ba73 100644 --- a/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp +++ b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp @@ -26,7 +26,7 @@ namespace ConfigLoaders { -void SaveToSYSCONF(Config::Layer* layer) +void SaveToSYSCONF(Config::LayerType layer) { if (Core::IsRunning()) return; @@ -40,9 +40,9 @@ void SaveToSYSCONF(Config::Layer* layer) const std::string key = info.location.section + "." + info.location.key; if (setting.type == SysConf::Entry::Type::Long) - sysconf.SetData(key, setting.type, layer->Get(info)); + sysconf.SetData(key, setting.type, Config::Get(layer, info)); else if (setting.type == SysConf::Entry::Type::Byte) - sysconf.SetData(key, setting.type, static_cast(layer->Get(info))); + sysconf.SetData(key, setting.type, static_cast(Config::Get(layer, info))); }, setting.config_info); } @@ -106,7 +106,7 @@ public: { if (system.first == Config::System::SYSCONF) { - SaveToSYSCONF(config_layer); + SaveToSYSCONF(config_layer->GetLayer()); continue; } diff --git a/Source/Core/Core/ConfigLoaders/BaseConfigLoader.h b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.h index 2ae00c6aff..4f34197c7c 100644 --- a/Source/Core/Core/ConfigLoaders/BaseConfigLoader.h +++ b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.h @@ -9,11 +9,11 @@ namespace Config { class ConfigLayerLoader; -class Layer; +enum class LayerType; } namespace ConfigLoaders { -void SaveToSYSCONF(Config::Layer* layer); +void SaveToSYSCONF(Config::LayerType layer); std::unique_ptr GenerateBaseConfigLoader(); } diff --git a/Source/Core/Core/ConfigLoaders/MovieConfigLoader.cpp b/Source/Core/Core/ConfigLoaders/MovieConfigLoader.cpp index 9479045e00..edfea3919e 100644 --- a/Source/Core/Core/ConfigLoaders/MovieConfigLoader.cpp +++ b/Source/Core/Core/ConfigLoaders/MovieConfigLoader.cpp @@ -46,27 +46,27 @@ static void LoadFromDTM(Config::Layer* config_layer, Movie::DTMHeader* dtm) config_layer->Set(Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES, dtm->bEFBEmulateFormatChanges); } -void SaveToDTM(Config::Layer* config_layer, Movie::DTMHeader* dtm) +void SaveToDTM(Movie::DTMHeader* dtm) { - dtm->bDualCore = config_layer->Get(Config::MAIN_CPU_THREAD); - dtm->bDSPHLE = config_layer->Get(Config::MAIN_DSP_HLE); - dtm->bFastDiscSpeed = config_layer->Get(Config::MAIN_FAST_DISC_SPEED); - dtm->CPUCore = config_layer->Get(Config::MAIN_CPU_CORE); - dtm->bSyncGPU = config_layer->Get(Config::MAIN_SYNC_GPU); - const std::string video_backend = config_layer->Get(Config::MAIN_GFX_BACKEND); + dtm->bDualCore = Config::Get(Config::MAIN_CPU_THREAD); + dtm->bDSPHLE = Config::Get(Config::MAIN_DSP_HLE); + dtm->bFastDiscSpeed = Config::Get(Config::MAIN_FAST_DISC_SPEED); + dtm->CPUCore = Config::Get(Config::MAIN_CPU_CORE); + dtm->bSyncGPU = Config::Get(Config::MAIN_SYNC_GPU); + const std::string video_backend = Config::Get(Config::MAIN_GFX_BACKEND); - dtm->bProgressive = config_layer->Get(Config::SYSCONF_PROGRESSIVE_SCAN); - dtm->bPAL60 = config_layer->Get(Config::SYSCONF_PAL60); + dtm->bProgressive = Config::Get(Config::SYSCONF_PROGRESSIVE_SCAN); + dtm->bPAL60 = Config::Get(Config::SYSCONF_PAL60); if (dtm->bWii) - dtm->language = config_layer->Get(Config::SYSCONF_LANGUAGE); + dtm->language = Config::Get(Config::SYSCONF_LANGUAGE); else - dtm->language = config_layer->Get(Config::MAIN_GC_LANGUAGE); + dtm->language = Config::Get(Config::MAIN_GC_LANGUAGE); - dtm->bUseXFB = config_layer->Get(Config::GFX_USE_XFB); - dtm->bUseRealXFB = config_layer->Get(Config::GFX_USE_REAL_XFB); - dtm->bEFBAccessEnable = config_layer->Get(Config::GFX_HACK_EFB_ACCESS_ENABLE); - dtm->bSkipEFBCopyToRam = config_layer->Get(Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM); - dtm->bEFBEmulateFormatChanges = config_layer->Get(Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES); + dtm->bUseXFB = Config::Get(Config::GFX_USE_XFB); + dtm->bUseRealXFB = Config::Get(Config::GFX_USE_REAL_XFB); + dtm->bEFBAccessEnable = Config::Get(Config::GFX_HACK_EFB_ACCESS_ENABLE); + dtm->bSkipEFBCopyToRam = Config::Get(Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM); + dtm->bEFBEmulateFormatChanges = Config::Get(Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES); // This never used the regular config dtm->bSkipIdle = true; diff --git a/Source/Core/Core/ConfigLoaders/MovieConfigLoader.h b/Source/Core/Core/ConfigLoaders/MovieConfigLoader.h index dbb2b7e6f7..22d102a742 100644 --- a/Source/Core/Core/ConfigLoaders/MovieConfigLoader.h +++ b/Source/Core/Core/ConfigLoaders/MovieConfigLoader.h @@ -30,6 +30,6 @@ private: Movie::DTMHeader* m_header; }; -void SaveToDTM(Config::Layer* layer, Movie::DTMHeader* header); +void SaveToDTM(Movie::DTMHeader* header); std::unique_ptr GenerateMovieConfigLoader(Movie::DTMHeader* header); } diff --git a/Source/Core/Core/Movie.cpp b/Source/Core/Core/Movie.cpp index 16ffdb7584..3bdcc9b13d 100644 --- a/Source/Core/Core/Movie.cpp +++ b/Source/Core/Core/Movie.cpp @@ -1306,7 +1306,7 @@ void SaveRecording(const std::string& filename) header.recordingStartTime = s_recordingStartTime; header.bSaveConfig = true; - ConfigLoaders::SaveToDTM(Config::GetLayer(Config::LayerType::Meta), &header); + ConfigLoaders::SaveToDTM(&header); header.memcards = s_memcards; header.bClearSave = s_bClearSave; header.bNetPlay = s_bNetPlay;