summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-05-04 15:02:21 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2015-05-04 15:02:21 (GMT)
commit1ef88dcd46da72e489204141d66509f484738e1b (patch)
tree5bf06bca9c1728a22deb92fa994b89ba8de09ec5
parent8403c8da2c54affb0ab185aaaf302c7fa7ade914 (diff)
parent6c7dad41d9f5e9b6ab6bdd6ddee837aa5509e19e (diff)
downloadCMake-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.cxx37
-rw-r--r--Source/cmDefinitions.h19
-rw-r--r--Source/cmMakefile.cxx10
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)