cmDefinitions: Implement MakeClosure in terms of a list of ancestors.
This commit is contained in:
parent
d858f36339
commit
60becdc65c
@ -11,8 +11,6 @@
|
|||||||
============================================================================*/
|
============================================================================*/
|
||||||
#include "cmDefinitions.h"
|
#include "cmDefinitions.h"
|
||||||
|
|
||||||
#include <list>
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
cmDefinitions::Def cmDefinitions::NoDef;
|
cmDefinitions::Def cmDefinitions::NoDef;
|
||||||
|
|
||||||
@ -81,22 +79,25 @@ cmDefinitions cmDefinitions::MakeClosure() const
|
|||||||
{
|
{
|
||||||
std::set<std::string> undefined;
|
std::set<std::string> undefined;
|
||||||
cmDefinitions closure;
|
cmDefinitions closure;
|
||||||
closure.MakeClosure(undefined, this);
|
cmDefinitions const* defs = this;
|
||||||
return closure;
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
void cmDefinitions::MakeClosure(std::set<std::string>& undefined,
|
|
||||||
cmDefinitions const* defs)
|
|
||||||
{
|
|
||||||
std::list<cmDefinitions const*> ups;
|
std::list<cmDefinitions const*> ups;
|
||||||
while(defs)
|
while(defs)
|
||||||
{
|
{
|
||||||
ups.push_back(defs);
|
ups.push_back(defs);
|
||||||
defs = defs->Up;
|
defs = defs->Up;
|
||||||
}
|
}
|
||||||
for (std::list<cmDefinitions const*>::const_iterator it = ups.begin();
|
closure.MakeClosure(undefined, ups.begin(), ups.end());
|
||||||
it != ups.end(); ++it)
|
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.
|
// Consider local definitions.
|
||||||
for(MapType::const_iterator mi = (*it)->Map.begin();
|
for(MapType::const_iterator mi = (*it)->Map.begin();
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
#include "cmsys/hash_map.hxx"
|
#include "cmsys/hash_map.hxx"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
|
||||||
/** \class cmDefinitions
|
/** \class cmDefinitions
|
||||||
* \brief Store a scope of variable definitions for CMake language.
|
* \brief Store a scope of variable definitions for CMake language.
|
||||||
*
|
*
|
||||||
@ -80,7 +82,8 @@ private:
|
|||||||
Def const& GetInternal(const std::string& key);
|
Def const& GetInternal(const std::string& key);
|
||||||
|
|
||||||
void MakeClosure(std::set<std::string>& undefined,
|
void MakeClosure(std::set<std::string>& undefined,
|
||||||
cmDefinitions const* defs);
|
std::list<cmDefinitions const*>::iterator begin,
|
||||||
|
std::list<cmDefinitions const*>::iterator end);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user