diff options
author | Brad King <brad.king@kitware.com> | 2015-05-04 15:02:21 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2015-05-04 15:02:21 (GMT) |
commit | 1ef88dcd46da72e489204141d66509f484738e1b (patch) | |
tree | 5bf06bca9c1728a22deb92fa994b89ba8de09ec5 | |
parent | 8403c8da2c54affb0ab185aaaf302c7fa7ade914 (diff) | |
parent | 6c7dad41d9f5e9b6ab6bdd6ddee837aa5509e19e (diff) | |
download | CMake-1ef88dcd46da72e489204141d66509f484738e1b.zip CMake-1ef88dcd46da72e489204141d66509f484738e1b.tar.gz CMake-1ef88dcd46da72e489204141d66509f484738e1b.tar.bz2 |
Merge topic 'refactor-cmDefinitions-Get'
6c7dad41 cmDefinitions: Make Get method static.
a7ce0c7b cmDefinitions: Make GetInternal method static.
7a5039fa cmDefinitions: Use static member without this->.
191573f7 cmDefinitions: Remove Parent pointer.
8b1745a1 cmDefinitions: Accept varStack iterators in Get API.
-rw-r--r-- | Source/cmDefinitions.cxx | 37 | ||||
-rw-r--r-- | Source/cmDefinitions.h | 19 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 10 |
3 files changed, 28 insertions, 38 deletions
diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx index 61328be..f54bc4d 100644 --- a/Source/cmDefinitions.cxx +++ b/Source/cmDefinitions.cxx @@ -11,38 +11,39 @@ ============================================================================*/ #include "cmDefinitions.h" -//---------------------------------------------------------------------------- -cmDefinitions::Def cmDefinitions::NoDef; +#include <assert.h> //---------------------------------------------------------------------------- -cmDefinitions::cmDefinitions(cmDefinitions* parent) - : Up(parent) -{ -} +cmDefinitions::Def cmDefinitions::NoDef; //---------------------------------------------------------------------------- -cmDefinitions::Def const& -cmDefinitions::GetInternal(const std::string& key) +cmDefinitions::Def const& cmDefinitions::GetInternal( + const std::string& key, + std::list<cmDefinitions>::reverse_iterator rbegin, + std::list<cmDefinitions>::reverse_iterator rend) { - MapType::const_iterator i = this->Map.find(key); - if(i != this->Map.end()) + assert(rbegin != rend); + MapType::const_iterator i = rbegin->Map.find(key); + if (i != rbegin->Map.end()) { return i->second; } - cmDefinitions* up = this->Up; - if(!up) + std::list<cmDefinitions>::reverse_iterator rit = rbegin; + ++rit; + if (rit == rend) { - return this->NoDef; + return cmDefinitions::NoDef; } - // Query the parent scope and store the result locally. - Def def = up->GetInternal(key); - return this->Map.insert(MapType::value_type(key, def)).first->second; + Def const& def = cmDefinitions::GetInternal(key, rit, rend); + return rbegin->Map.insert(MapType::value_type(key, def)).first->second; } //---------------------------------------------------------------------------- -const char* cmDefinitions::Get(const std::string& key) +const char* cmDefinitions::Get(const std::string& key, + std::list<cmDefinitions>::reverse_iterator rbegin, + std::list<cmDefinitions>::reverse_iterator rend) { - Def const& def = this->GetInternal(key); + Def const& def = cmDefinitions::GetInternal(key, rbegin, rend); return def.Exists? def.c_str() : 0; } diff --git a/Source/cmDefinitions.h b/Source/cmDefinitions.h index 4c7f11f..b244793 100644 --- a/Source/cmDefinitions.h +++ b/Source/cmDefinitions.h @@ -29,15 +29,11 @@ class cmDefinitions { public: - /** Construct with the given parent scope. */ - cmDefinitions(cmDefinitions* parent = 0); - - /** Returns the parent scope, if any. */ - cmDefinitions* GetParent() const { return this->Up; } - /** Get the value associated with a key; null if none. Store the result locally if it came from a parent. */ - const char* Get(const std::string& key); + static const char* Get(const std::string& key, + std::list<cmDefinitions>::reverse_iterator rbegin, + std::list<cmDefinitions>::reverse_iterator rend); /** Set (or unset if null) a value associated with a key. */ void Set(const std::string& key, const char* value); @@ -69,9 +65,6 @@ private: }; static Def NoDef; - // Parent scope, if any. - cmDefinitions* Up; - // Local definitions, set or unset. #if defined(CMAKE_BUILD_WITH_CMAKE) typedef cmsys::hash_map<std::string, Def> MapType; @@ -80,9 +73,9 @@ private: #endif MapType Map; - // Internal query and update methods. - Def const& GetInternal(const std::string& key); - + static Def const& GetInternal(const std::string& key, + std::list<cmDefinitions>::reverse_iterator rbegin, + std::list<cmDefinitions>::reverse_iterator rend); void MakeClosure(std::set<std::string>& undefined, std::list<cmDefinitions>::const_reverse_iterator rbegin, std::list<cmDefinitions>::const_reverse_iterator rend); diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 5686b1b..4ed2419 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -53,12 +53,7 @@ public: void PushDefinitions() { - cmDefinitions* parent = 0; - if (!this->VarStack.empty()) - { - parent = &this->VarStack.back(); - } - this->VarStack.push_back(cmDefinitions(parent)); + this->VarStack.push_back(cmDefinitions()); } void InitializeDefinitions(cmMakefile* parent) @@ -70,7 +65,8 @@ public: const char* GetDefinition(std::string const& name) { - return this->VarStack.back().Get(name); + return cmDefinitions::Get(name, this->VarStack.rbegin(), + this->VarStack.rend()); } void SetDefinition(std::string const& name, std::string const& value) |