summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Config/Config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/Common/Config/Config.cpp')
-rw-r--r--Source/Core/Common/Config/Config.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/Source/Core/Common/Config/Config.cpp b/Source/Core/Common/Config/Config.cpp
index 27f0389ea8..285db95f28 100644
--- a/Source/Core/Common/Config/Config.cpp
+++ b/Source/Core/Common/Config/Config.cpp
@@ -5,6 +5,7 @@
#include <algorithm>
#include <list>
#include <map>
+#include <tuple>
#include "Common/Assert.h"
#include "Common/Config/Config.h"
@@ -144,4 +145,34 @@ const std::string& GetLayerName(LayerType layer)
};
return layer_to_name.at(layer);
}
+
+bool ConfigLocation::operator==(const ConfigLocation& other) const
+{
+ return std::tie(system, section, key) == std::tie(other.system, other.section, other.key);
+}
+
+bool ConfigLocation::operator!=(const ConfigLocation& other) const
+{
+ return !(*this == other);
+}
+
+bool ConfigLocation::operator<(const ConfigLocation& other) const
+{
+ return std::tie(system, section, key) < std::tie(other.system, other.section, other.key);
+}
+
+LayerType GetActiveLayerForConfig(const ConfigLocation& config)
+{
+ for (auto layer : SEARCH_ORDER)
+ {
+ if (!LayerExists(layer))
+ continue;
+
+ if (GetLayer(layer)->Exists(config.system, config.section, config.key))
+ return layer;
+ }
+
+ // If config is not present in any layer, base layer is considered active.
+ return LayerType::Base;
+}
}