cmPolicies: Implement PolicyMap in terms of bitset.
This commit is contained in:
parent
be6664c208
commit
013ada80ea
|
@ -343,24 +343,51 @@ cmPolicies::GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id)
|
|||
return e.str();
|
||||
}
|
||||
|
||||
cmPolicies::PolicyMap::PolicyMap()
|
||||
{
|
||||
this->UNDEFINED.set();
|
||||
}
|
||||
|
||||
cmPolicies::PolicyStatus
|
||||
cmPolicies::PolicyMap::Get(cmPolicies::PolicyID id) const
|
||||
{
|
||||
return this->find(id)->second;
|
||||
PolicyStatus status = cmPolicies::WARN;
|
||||
|
||||
if (this->OLD[id])
|
||||
{
|
||||
status = cmPolicies::OLD;
|
||||
}
|
||||
else if (this->NEW[id])
|
||||
{
|
||||
status = cmPolicies::NEW;
|
||||
}
|
||||
else if (this->REQUIRED_ALWAYS[id])
|
||||
{
|
||||
status = cmPolicies::REQUIRED_ALWAYS;
|
||||
}
|
||||
else if (this->REQUIRED_IF_USED[id])
|
||||
{
|
||||
status = cmPolicies::REQUIRED_IF_USED;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
void cmPolicies::PolicyMap::Set(cmPolicies::PolicyID id,
|
||||
cmPolicies::PolicyStatus status)
|
||||
{
|
||||
(*this)[id] = status;
|
||||
this->UNDEFINED.reset(id);
|
||||
this->OLD[id] = (status == cmPolicies::OLD);
|
||||
this->NEW[id] = (status == cmPolicies::NEW);
|
||||
this->REQUIRED_ALWAYS[id] = (status == cmPolicies::REQUIRED_ALWAYS);
|
||||
this->REQUIRED_IF_USED[id] = (status == cmPolicies::REQUIRED_IF_USED);
|
||||
}
|
||||
|
||||
bool cmPolicies::PolicyMap::IsDefined(cmPolicies::PolicyID id) const
|
||||
{
|
||||
return this->find(id) != this->end();
|
||||
return !this->UNDEFINED[id];
|
||||
}
|
||||
|
||||
bool cmPolicies::PolicyMap::IsEmpty() const
|
||||
{
|
||||
return this->empty();
|
||||
return !this->UNDEFINED.none();
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
|
||||
#include "cmCustomCommand.h"
|
||||
|
||||
#include <bitset>
|
||||
|
||||
class cmMakefile;
|
||||
class cmPolicy;
|
||||
|
||||
|
@ -268,12 +270,20 @@ public:
|
|||
static std::string GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id);
|
||||
|
||||
/** Represent a set of policy values. */
|
||||
struct PolicyMap : private std::map<PolicyID, PolicyStatus>
|
||||
struct PolicyMap
|
||||
{
|
||||
PolicyMap();
|
||||
PolicyStatus Get(PolicyID id) const;
|
||||
void Set(PolicyID id, PolicyStatus status);
|
||||
bool IsDefined(PolicyID id) const;
|
||||
bool IsEmpty() const;
|
||||
|
||||
private:
|
||||
std::bitset<cmPolicies::CMPCOUNT> UNDEFINED;
|
||||
std::bitset<cmPolicies::CMPCOUNT> OLD;
|
||||
std::bitset<cmPolicies::CMPCOUNT> NEW;
|
||||
std::bitset<cmPolicies::CMPCOUNT> REQUIRED_IF_USED;
|
||||
std::bitset<cmPolicies::CMPCOUNT> REQUIRED_ALWAYS;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue