diff options
author | Stephen Kelly <steveire@gmail.com> | 2015-04-26 13:36:49 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2015-04-29 20:51:28 (GMT) |
commit | 012a75a00f060d6ca36cc9ffb97439a7ad526395 (patch) | |
tree | 38f915c86709817fb4001b46778d62c8ec2181b7 | |
parent | ca9fa77d5d34a993073cd5256d65f88cd2e1a28f (diff) | |
download | CMake-012a75a00f060d6ca36cc9ffb97439a7ad526395.zip CMake-012a75a00f060d6ca36cc9ffb97439a7ad526395.tar.gz CMake-012a75a00f060d6ca36cc9ffb97439a7ad526395.tar.bz2 |
cmDefinitions: Make ClosureKeys API vector-based.
Construct the final list directly in a named return value. Use
a single set to track bindings already found.
Co-Author: Brad King <brad.king@kitware.com>
-rw-r--r-- | Source/cmDefinitions.cxx | 12 | ||||
-rw-r--r-- | Source/cmDefinitions.h | 2 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 5 |
3 files changed, 8 insertions, 11 deletions
diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx index 4b0eed4..f2100eb 100644 --- a/Source/cmDefinitions.cxx +++ b/Source/cmDefinitions.cxx @@ -119,10 +119,10 @@ void cmDefinitions::ClosureImpl(std::set<std::string>& undefined, } //---------------------------------------------------------------------------- -std::set<std::string> cmDefinitions::ClosureKeys() const +std::vector<std::string> cmDefinitions::ClosureKeys() const { - std::set<std::string> defined; - std::set<std::string> undefined; + std::vector<std::string> defined; + std::set<std::string> bound; cmDefinitions const* up = this; @@ -133,11 +133,9 @@ std::set<std::string> cmDefinitions::ClosureKeys() const mi != up->Map.end(); ++mi) { // Use this key if it is not already set or unset. - if(defined.find(mi->first) == defined.end() && - undefined.find(mi->first) == undefined.end()) + if(bound.insert(mi->first).second && mi->second.Exists) { - std::set<std::string>& m = mi->second.Exists? defined : undefined; - m.insert(mi->first); + defined.push_back(mi->first); } } up = up->Up; diff --git a/Source/cmDefinitions.h b/Source/cmDefinitions.h index 950970b..4664090 100644 --- a/Source/cmDefinitions.h +++ b/Source/cmDefinitions.h @@ -50,7 +50,7 @@ public: cmDefinitions Closure() const; /** Compute the set of all defined keys. */ - std::set<std::string> ClosureKeys() const; + std::vector<std::string> ClosureKeys() const; private: // String with existence boolean. diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 9209e49..e2a9f61 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -94,7 +94,7 @@ public: return this->VarStack.top().LocalKeys(); } - std::set<std::string> ClosureKeys() const + std::vector<std::string> ClosureKeys() const { return this->VarStack.top().ClosureKeys(); } @@ -2514,8 +2514,7 @@ std::vector<std::string> cmMakefile std::vector<std::string> res; if ( !cacheonly ) { - std::set<std::string> definitions = this->Internal->ClosureKeys(); - res.insert(res.end(), definitions.begin(), definitions.end()); + res = this->Internal->ClosureKeys(); } std::vector<std::string> cacheKeys = this->GetState()->GetCacheEntryKeys(); |