From 98c5c90361f89f810cdd6fb233f3e822b638f143 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sat, 16 May 2015 05:33:25 +0200 Subject: [PATCH] cmDefinitions: Centralize knowledge of iterator type. Currently we process a list of definitions, but that will change. --- Source/cmDefinitions.cxx | 33 ++++++++++++++------------------- Source/cmDefinitions.h | 12 +++++------- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx index 581f259fc..6fcc002b6 100644 --- a/Source/cmDefinitions.cxx +++ b/Source/cmDefinitions.cxx @@ -18,32 +18,29 @@ cmDefinitions::Def cmDefinitions::NoDef; //---------------------------------------------------------------------------- cmDefinitions::Def const& cmDefinitions::GetInternal( - const std::string& key, - std::list::reverse_iterator rbegin, - std::list::reverse_iterator rend) + const std::string& key, StackIter begin, StackIter end) { - assert(rbegin != rend); - MapType::const_iterator i = rbegin->Map.find(key); - if (i != rbegin->Map.end()) + assert(begin != end); + MapType::const_iterator i = begin->Map.find(key); + if (i != begin->Map.end()) { return i->second; } - std::list::reverse_iterator rit = rbegin; - ++rit; - if (rit == rend) + StackIter it = begin; + ++it; + if (it == end) { return cmDefinitions::NoDef; } - Def const& def = cmDefinitions::GetInternal(key, rit, rend); - return rbegin->Map.insert(MapType::value_type(key, def)).first->second; + Def const& def = cmDefinitions::GetInternal(key, it, end); + return begin->Map.insert(MapType::value_type(key, def)).first->second; } //---------------------------------------------------------------------------- const char* cmDefinitions::Get(const std::string& key, - std::list::reverse_iterator rbegin, - std::list::reverse_iterator rend) + StackIter begin, StackIter end) { - Def const& def = cmDefinitions::GetInternal(key, rbegin, rend); + Def const& def = cmDefinitions::GetInternal(key, begin, end); return def.Exists? def.c_str() : 0; } @@ -77,14 +74,12 @@ std::vector cmDefinitions::LocalKeys() const } //---------------------------------------------------------------------------- -cmDefinitions cmDefinitions::MakeClosure( - std::list::const_reverse_iterator rbegin, - std::list::const_reverse_iterator rend) +cmDefinitions cmDefinitions::MakeClosure(StackConstIter begin, + StackConstIter end) { cmDefinitions closure; std::set undefined; - for (std::list::const_reverse_iterator it = rbegin; - it != rend; ++it) + for (StackConstIter it = begin; it != end; ++it) { // Consider local definitions. for(MapType::const_iterator mi = it->Map.begin(); diff --git a/Source/cmDefinitions.h b/Source/cmDefinitions.h index e762b4128..b95ae6ba5 100644 --- a/Source/cmDefinitions.h +++ b/Source/cmDefinitions.h @@ -28,12 +28,13 @@ */ class cmDefinitions { + typedef std::list::reverse_iterator StackIter; + typedef std::list::const_reverse_iterator StackConstIter; public: /** Get the value associated with a key; null if none. Store the result locally if it came from a parent. */ static const char* Get(const std::string& key, - std::list::reverse_iterator rbegin, - std::list::reverse_iterator rend); + StackIter begin, StackIter end); /** Set (or unset if null) a value associated with a key. */ void Set(const std::string& key, const char* value); @@ -46,9 +47,7 @@ public: std::vector ClosureKeys(std::set& bound) const; - static cmDefinitions MakeClosure( - std::list::const_reverse_iterator rbegin, - std::list::const_reverse_iterator rend); + static cmDefinitions MakeClosure(StackConstIter begin, StackConstIter end); private: // String with existence boolean. @@ -74,8 +73,7 @@ private: MapType Map; static Def const& GetInternal(const std::string& key, - std::list::reverse_iterator rbegin, - std::list::reverse_iterator rend); + StackIter begin, StackIter end); }; #endif