diff options
author | Stephen Kelly <steveire@gmail.com> | 2015-04-26 14:00:18 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2015-04-29 21:54:02 (GMT) |
commit | 60becdc65c5f8cfad4b2c6a33e3649d2acbddf39 (patch) | |
tree | 904d65c1798a133729dccbc6c563261744890812 /Source | |
parent | d858f36339d61e45913165bc957d645bf1060f54 (diff) | |
download | CMake-60becdc65c5f8cfad4b2c6a33e3649d2acbddf39.zip CMake-60becdc65c5f8cfad4b2c6a33e3649d2acbddf39.tar.gz CMake-60becdc65c5f8cfad4b2c6a33e3649d2acbddf39.tar.bz2 |
cmDefinitions: Implement MakeClosure in terms of a list of ancestors.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmDefinitions.cxx | 25 | ||||
-rw-r--r-- | Source/cmDefinitions.h | 5 |
2 files changed, 17 insertions, 13 deletions
diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx index 5fe57c8..873a7b4 100644 --- a/Source/cmDefinitions.cxx +++ b/Source/cmDefinitions.cxx @@ -11,8 +11,6 @@ ============================================================================*/ #include "cmDefinitions.h" -#include <list> - //---------------------------------------------------------------------------- cmDefinitions::Def cmDefinitions::NoDef; @@ -81,22 +79,25 @@ cmDefinitions cmDefinitions::MakeClosure() const { std::set<std::string> undefined; cmDefinitions closure; - closure.MakeClosure(undefined, this); - return closure; -} - -//---------------------------------------------------------------------------- -void cmDefinitions::MakeClosure(std::set<std::string>& undefined, - cmDefinitions const* defs) -{ + cmDefinitions const* defs = this; std::list<cmDefinitions const*> ups; while(defs) { ups.push_back(defs); defs = defs->Up; } - for (std::list<cmDefinitions const*>::const_iterator it = ups.begin(); - it != ups.end(); ++it) + closure.MakeClosure(undefined, ups.begin(), ups.end()); + return closure; +} + +//---------------------------------------------------------------------------- +void +cmDefinitions::MakeClosure(std::set<std::string>& undefined, + std::list<cmDefinitions const*>::iterator begin, + std::list<cmDefinitions const*>::iterator end) +{ + for (std::list<cmDefinitions const*>::const_iterator it = begin; + it != end; ++it) { // Consider local definitions. for(MapType::const_iterator mi = (*it)->Map.begin(); diff --git a/Source/cmDefinitions.h b/Source/cmDefinitions.h index 6917402..40e0531 100644 --- a/Source/cmDefinitions.h +++ b/Source/cmDefinitions.h @@ -17,6 +17,8 @@ #include "cmsys/hash_map.hxx" #endif +#include <list> + /** \class cmDefinitions * \brief Store a scope of variable definitions for CMake language. * @@ -80,7 +82,8 @@ private: Def const& GetInternal(const std::string& key); void MakeClosure(std::set<std::string>& undefined, - cmDefinitions const* defs); + std::list<cmDefinitions const*>::iterator begin, + std::list<cmDefinitions const*>::iterator end); }; #endif |