diff options
author | Brad King <brad.king@kitware.com> | 2009-01-22 15:56:39 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-01-22 15:56:39 (GMT) |
commit | 8997f4760a83efb270f3f9234a016451c0884fe2 (patch) | |
tree | 15d37251813671eed25ce679227c574458eb139f /Source | |
parent | e8a0e90133da84e552efc1852f9f1e589b250ed3 (diff) | |
download | CMake-8997f4760a83efb270f3f9234a016451c0884fe2.zip CMake-8997f4760a83efb270f3f9234a016451c0884fe2.tar.gz CMake-8997f4760a83efb270f3f9234a016451c0884fe2.tar.bz2 |
ENH: Refactor policy stack representation
This defines PolicyMap as a public member of cmPolicies. Its previous
role as a policy stack entry is now called PolicyStackEntry and
represented as a class to which more information can be added later.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmMakefile.cxx | 7 | ||||
-rw-r--r-- | Source/cmMakefile.h | 12 | ||||
-rw-r--r-- | Source/cmPolicies.h | 4 |
3 files changed, 16 insertions, 7 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 890f752..f9b40b1 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -3599,11 +3599,10 @@ cmPolicies::PolicyStatus cmMakefile::GetPolicyStatusInternal(cmPolicies::PolicyID id) { // Is the policy set in our stack? - for(std::vector<PolicyMap>::reverse_iterator - psi = this->PolicyStack.rbegin(); + for(PolicyStackType::reverse_iterator psi = this->PolicyStack.rbegin(); psi != this->PolicyStack.rend(); ++psi) { - PolicyMap::const_iterator pse = psi->find(id); + PolicyStackEntry::const_iterator pse = psi->find(id); if(pse != psi->end()) { return pse->second; @@ -3678,7 +3677,7 @@ bool cmMakefile::SetPolicy(cmPolicies::PolicyID id, bool cmMakefile::PushPolicy() { // Allocate a new stack entry. - this->PolicyStack.push_back(PolicyMap()); + this->PolicyStack.push_back(PolicyStackEntry()); return true; } diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index c6061d7..4daec16 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -931,9 +931,15 @@ private: std::map<cmStdString, cmTarget*> ImportedTargets; // stack of policy settings - typedef std::map<cmPolicies::PolicyID, - cmPolicies::PolicyStatus> PolicyMap; - std::vector<PolicyMap> PolicyStack; + struct PolicyStackEntry: public cmPolicies::PolicyMap + { + typedef cmPolicies::PolicyMap derived; + PolicyStackEntry(): derived() {} + PolicyStackEntry(derived const& d): derived(d) {} + PolicyStackEntry(PolicyStackEntry const& r): derived(r) {} + }; + typedef std::vector<PolicyStackEntry> PolicyStackType; + PolicyStackType PolicyStack; cmPolicies::PolicyStatus GetPolicyStatusInternal(cmPolicies::PolicyID id); bool CheckCMP0000; diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index 02f7276..8dc7f31 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -89,6 +89,10 @@ public: ///! Get docs for policies void GetDocumentation(std::vector<cmDocumentationEntry>& v); + /** Represent a set of policy values. */ + typedef std::map<cmPolicies::PolicyID, + cmPolicies::PolicyStatus> PolicyMap; + private: // might have to make these internal for VS6 not sure yet std::map<PolicyID,cmPolicy *> Policies; |