cmPolicies: Implement abstraction for PolicyMap.

Hide the detail that it is a std::map.
This commit is contained in:
Stephen Kelly 2015-05-03 10:12:28 +02:00
parent de21168612
commit be6664c208
3 changed files with 34 additions and 7 deletions

View File

@ -569,7 +569,7 @@ cmMakefile::IncludeScope::~IncludeScope()
// one we pushed above. If the entry is empty, then the included
// script did not set any policies that might affect the includer so
// we do not need to enforce the policy.
if(this->CheckCMP0011 && this->Makefile->PolicyStack.back().empty())
if(this->CheckCMP0011 && this->Makefile->PolicyStack.back().IsEmpty())
{
this->CheckCMP0011 = false;
}
@ -4772,10 +4772,9 @@ cmMakefile::GetPolicyStatusInternal(cmPolicies::PolicyID id) const
for(PolicyStackType::const_reverse_iterator psi = this->PolicyStack.rbegin();
psi != this->PolicyStack.rend(); ++psi)
{
PolicyStackEntry::const_iterator pse = psi->find(id);
if(pse != psi->end())
if(psi->IsDefined(id))
{
return pse->second;
return psi->Get(id);
}
}
@ -4840,7 +4839,7 @@ bool cmMakefile::SetPolicy(cmPolicies::PolicyID id,
for(PolicyStackType::reverse_iterator psi = this->PolicyStack.rbegin();
previous_was_weak && psi != this->PolicyStack.rend(); ++psi)
{
(*psi)[id] = status;
psi->Set(id, status);
previous_was_weak = psi->Weak;
}
@ -4960,7 +4959,7 @@ void cmMakefile::RecordPolicies(cmPolicies::PolicyMap& pm)
for(PolicyID pid = cmPolicies::CMP0000;
pid != cmPolicies::CMPCOUNT; pid = PolicyID(pid+1))
{
pm[pid] = this->GetPolicyStatus(pid);
pm.Set(pid, this->GetPolicyStatus(pid));
}
}

View File

@ -342,3 +342,25 @@ cmPolicies::GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id)
<< "Run cmake --help-policy " << pid << " for more information.";
return e.str();
}
cmPolicies::PolicyStatus
cmPolicies::PolicyMap::Get(cmPolicies::PolicyID id) const
{
return this->find(id)->second;
}
void cmPolicies::PolicyMap::Set(cmPolicies::PolicyID id,
cmPolicies::PolicyStatus status)
{
(*this)[id] = status;
}
bool cmPolicies::PolicyMap::IsDefined(cmPolicies::PolicyID id) const
{
return this->find(id) != this->end();
}
bool cmPolicies::PolicyMap::IsEmpty() const
{
return this->empty();
}

View File

@ -268,7 +268,13 @@ public:
static std::string GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id);
/** Represent a set of policy values. */
typedef std::map<PolicyID, PolicyStatus> PolicyMap;
struct PolicyMap : private std::map<PolicyID, PolicyStatus>
{
PolicyStatus Get(PolicyID id) const;
void Set(PolicyID id, PolicyStatus status);
bool IsDefined(PolicyID id) const;
bool IsEmpty() const;
};
};
#endif