summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Config/Config.cpp
diff options
context:
space:
mode:
authorMichael Maltese <mchtly@gmail.com>2017-07-09 16:17:36 -0700
committerMichael Maltese <mchtly@gmail.com>2017-07-09 16:28:54 -0700
commit8b54ac225b834b172ee46371200d8addbde08021 (patch)
tree5515a44fc813e61eeb0d1932a9b0531117f6aa55 /Source/Core/Common/Config/Config.cpp
parentdcb4386008ee28121c753bfa21ca8d732a90b944 (diff)
Merge Core/Config/Config.h into Common/Config/Config.h
Allows code in Common to take advantage of the layered config logic.
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;
+}
}