diff options
author | Brad King <brad.king@kitware.com> | 2019-08-09 14:31:20 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2019-08-09 14:37:25 (GMT) |
commit | 1263b0884bbad60b4f21d70a59a11647d30d54a8 (patch) | |
tree | 3af44bbcca333984e76f7943947e345ec797ecac | |
parent | 7891f69c67122eca2cba9f2c58fa0f1d49eba9bc (diff) | |
parent | 1a47d368d8925c8c7e3a8afc75f9592058cce100 (diff) | |
download | CMake-1263b0884bbad60b4f21d70a59a11647d30d54a8.zip CMake-1263b0884bbad60b4f21d70a59a11647d30d54a8.tar.gz CMake-1263b0884bbad60b4f21d70a59a11647d30d54a8.tar.bz2 |
Merge topic 'cmDefinitions_cleanups'
1a47d368d8 cmDefinitions: Cleanups and optimizations
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3666
-rw-r--r-- | Source/cmDefinitions.cxx | 61 | ||||
-rw-r--r-- | Source/cmDefinitions.h | 16 |
2 files changed, 42 insertions, 35 deletions
diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx index 42e70d6..cc38d84 100644 --- a/Source/cmDefinitions.cxx +++ b/Source/cmDefinitions.cxx @@ -2,8 +2,11 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmDefinitions.h" +#include "cm_string_view.hxx" + #include <assert.h> -#include <set> +#include <functional> +#include <unordered_set> #include <utility> cmDefinitions::Def cmDefinitions::NoDef; @@ -14,7 +17,7 @@ cmDefinitions::Def const& cmDefinitions::GetInternal(const std::string& key, { assert(begin != end); { - MapType::iterator it = begin->Map.find(key); + auto it = begin->Map.find(key); if (it != begin->Map.end()) { it->second.Used = true; return it->second; @@ -56,33 +59,10 @@ bool cmDefinitions::HasKey(const std::string& key, StackIter begin, return false; } -void cmDefinitions::Set(const std::string& key, cm::string_view value) -{ - this->Map[key] = Def(value); -} - -void cmDefinitions::Unset(const std::string& key) -{ - this->Map[key] = Def(); -} - -std::vector<std::string> cmDefinitions::UnusedKeys() const -{ - std::vector<std::string> keys; - keys.reserve(this->Map.size()); - // Consider local definitions. - for (auto const& mi : this->Map) { - if (!mi.second.Used) { - keys.push_back(mi.first); - } - } - return keys; -} - cmDefinitions cmDefinitions::MakeClosure(StackIter begin, StackIter end) { cmDefinitions closure; - std::set<std::string> undefined; + std::unordered_set<cm::string_view> undefined; for (StackIter it = begin; it != end; ++it) { // Consider local definitions. for (auto const& mi : it->Map) { @@ -92,7 +72,7 @@ cmDefinitions cmDefinitions::MakeClosure(StackIter begin, StackIter end) if (mi.second.Exists) { closure.Map.insert(mi); } else { - undefined.insert(mi.first); + undefined.emplace(mi.first); } } } @@ -104,13 +84,13 @@ std::vector<std::string> cmDefinitions::ClosureKeys(StackIter begin, StackIter end) { std::vector<std::string> defined; - std::set<std::string> bound; + std::unordered_set<cm::string_view> bound; for (StackIter it = begin; it != end; ++it) { defined.reserve(defined.size() + it->Map.size()); for (auto const& mi : it->Map) { // Use this key if it is not already set or unset. - if (bound.insert(mi.first).second && mi.second.Exists) { + if (bound.emplace(mi.first).second && mi.second.Exists) { defined.push_back(mi.first); } } @@ -118,3 +98,26 @@ std::vector<std::string> cmDefinitions::ClosureKeys(StackIter begin, return defined; } + +void cmDefinitions::Set(const std::string& key, cm::string_view value) +{ + this->Map[key] = Def(value); +} + +void cmDefinitions::Unset(const std::string& key) +{ + this->Map[key] = Def(); +} + +std::vector<std::string> cmDefinitions::UnusedKeys() const +{ + std::vector<std::string> keys; + keys.reserve(this->Map.size()); + // Consider local definitions. + for (auto const& mi : this->Map) { + if (!mi.second.Used) { + keys.push_back(mi.first); + } + } + return keys; +} diff --git a/Source/cmDefinitions.h b/Source/cmDefinitions.h index 4d8810a..787471a 100644 --- a/Source/cmDefinitions.h +++ b/Source/cmDefinitions.h @@ -25,6 +25,8 @@ class cmDefinitions typedef cmLinkedTree<cmDefinitions>::iterator StackIter; public: + // -- Static member functions + static const std::string* Get(const std::string& key, StackIter begin, StackIter end); @@ -32,18 +34,21 @@ public: static bool HasKey(const std::string& key, StackIter begin, StackIter end); + static std::vector<std::string> ClosureKeys(StackIter begin, StackIter end); + + static cmDefinitions MakeClosure(StackIter begin, StackIter end); + + // -- Member functions + /** Set a value associated with a key. */ void Set(const std::string& key, cm::string_view value); /** Unset a definition. */ void Unset(const std::string& key); + /** List of unused keys. */ std::vector<std::string> UnusedKeys() const; - static std::vector<std::string> ClosureKeys(StackIter begin, StackIter end); - - static cmDefinitions MakeClosure(StackIter begin, StackIter end); - private: /** String with existence boolean. */ struct Def @@ -61,8 +66,7 @@ private: }; static Def NoDef; - typedef std::unordered_map<std::string, Def> MapType; - MapType Map; + std::unordered_map<std::string, Def> Map; static Def const& GetInternal(const std::string& key, StackIter begin, StackIter end, bool raise); |