cmDefinitions: Replace private constructor with MakeClosure.

This commit is contained in:
Stephen Kelly 2015-04-26 15:44:26 +02:00
parent 012a75a00f
commit 24885d4efa
3 changed files with 10 additions and 20 deletions

View File

@ -75,21 +75,16 @@ std::vector<std::string> cmDefinitions::LocalKeys() const
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmDefinitions cmDefinitions::Closure() const cmDefinitions cmDefinitions::MakeClosure() const
{
return cmDefinitions(ClosureTag(), this);
}
//----------------------------------------------------------------------------
cmDefinitions::cmDefinitions(ClosureTag const&, cmDefinitions const* root):
Up(0)
{ {
std::set<std::string> undefined; std::set<std::string> undefined;
this->ClosureImpl(undefined, root); cmDefinitions closure;
closure.MakeClosure(undefined, this);
return closure;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmDefinitions::ClosureImpl(std::set<std::string>& undefined, void cmDefinitions::MakeClosure(std::set<std::string>& undefined,
cmDefinitions const* defs) cmDefinitions const* defs)
{ {
// Consider local definitions. // Consider local definitions.
@ -114,7 +109,7 @@ void cmDefinitions::ClosureImpl(std::set<std::string>& undefined,
// Traverse parents. // Traverse parents.
if(cmDefinitions const* up = defs->Up) if(cmDefinitions const* up = defs->Up)
{ {
this->ClosureImpl(undefined, up); this->MakeClosure(undefined, up);
} }
} }

View File

@ -45,13 +45,11 @@ public:
/** Get the set of all local keys. */ /** Get the set of all local keys. */
std::vector<std::string> LocalKeys() const; std::vector<std::string> LocalKeys() const;
/** Compute the closure of all defined keys with values.
This flattens the scope. The result has no parent. */
cmDefinitions Closure() const;
/** Compute the set of all defined keys. */ /** Compute the set of all defined keys. */
std::vector<std::string> ClosureKeys() const; std::vector<std::string> ClosureKeys() const;
cmDefinitions MakeClosure() const;
private: private:
// String with existence boolean. // String with existence boolean.
struct Def: public std::string struct Def: public std::string
@ -81,10 +79,7 @@ private:
// Internal query and update methods. // Internal query and update methods.
Def const& GetInternal(const std::string& key); Def const& GetInternal(const std::string& key);
// Implementation of Closure() method. void MakeClosure(std::set<std::string>& undefined,
struct ClosureTag {};
cmDefinitions(ClosureTag const&, cmDefinitions const* root);
void ClosureImpl(std::set<std::string>& undefined,
cmDefinitions const* defs); cmDefinitions const* defs);
}; };

View File

@ -63,7 +63,7 @@ public:
void InitializeDefinitions(cmMakefile* parent) void InitializeDefinitions(cmMakefile* parent)
{ {
this->VarStack.top() = parent->Internal->VarStack.top().Closure(); this->VarStack.top() = parent->Internal->VarStack.top().MakeClosure();
} }
const char* GetDefinition(std::string const& name) const char* GetDefinition(std::string const& name)