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 // one we pushed above. If the entry is empty, then the included
// script did not set any policies that might affect the includer so // script did not set any policies that might affect the includer so
// we do not need to enforce the policy. // 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; this->CheckCMP0011 = false;
} }
@ -4772,10 +4772,9 @@ cmMakefile::GetPolicyStatusInternal(cmPolicies::PolicyID id) const
for(PolicyStackType::const_reverse_iterator psi = this->PolicyStack.rbegin(); for(PolicyStackType::const_reverse_iterator psi = this->PolicyStack.rbegin();
psi != this->PolicyStack.rend(); ++psi) psi != this->PolicyStack.rend(); ++psi)
{ {
PolicyStackEntry::const_iterator pse = psi->find(id); if(psi->IsDefined(id))
if(pse != psi->end())
{ {
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(); for(PolicyStackType::reverse_iterator psi = this->PolicyStack.rbegin();
previous_was_weak && psi != this->PolicyStack.rend(); ++psi) previous_was_weak && psi != this->PolicyStack.rend(); ++psi)
{ {
(*psi)[id] = status; psi->Set(id, status);
previous_was_weak = psi->Weak; previous_was_weak = psi->Weak;
} }
@ -4960,7 +4959,7 @@ void cmMakefile::RecordPolicies(cmPolicies::PolicyMap& pm)
for(PolicyID pid = cmPolicies::CMP0000; for(PolicyID pid = cmPolicies::CMP0000;
pid != cmPolicies::CMPCOUNT; pid = PolicyID(pid+1)) 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."; << "Run cmake --help-policy " << pid << " for more information.";
return e.str(); 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); static std::string GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id);
/** Represent a set of policy values. */ /** 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 #endif