Browse Source

cmDefinitions: Implement MakeClosure in terms of reverse iterators.

Iterate directly over the parent content provided by cmMakefile.
Stephen Kelly 10 years ago
parent
commit
f79cd99d6d
3 changed files with 16 additions and 22 deletions
  1. 9 9
      Source/cmDefinitions.cxx
  2. 4 4
      Source/cmDefinitions.h
  3. 3 9
      Source/cmMakefile.cxx

+ 9 - 9
Source/cmDefinitions.cxx

@@ -76,27 +76,27 @@ std::vector<std::string> cmDefinitions::LocalKeys() const
 
 //----------------------------------------------------------------------------
 cmDefinitions cmDefinitions::MakeClosure(
-    std::list<cmDefinitions const*>::iterator begin,
-    std::list<cmDefinitions const*>::iterator end)
+    std::list<cmDefinitions>::const_reverse_iterator rbegin,
+    std::list<cmDefinitions>::const_reverse_iterator rend)
 {
   std::set<std::string> undefined;
   cmDefinitions closure;
-  closure.MakeClosure(undefined, begin, end);
+  closure.MakeClosure(undefined, rbegin, rend);
   return closure;
 }
 
 //----------------------------------------------------------------------------
 void
 cmDefinitions::MakeClosure(std::set<std::string>& undefined,
-                           std::list<cmDefinitions const*>::iterator begin,
-                           std::list<cmDefinitions const*>::iterator end)
+    std::list<cmDefinitions>::const_reverse_iterator rbegin,
+    std::list<cmDefinitions>::const_reverse_iterator rend)
 {
-  for (std::list<cmDefinitions const*>::const_iterator it = begin;
-       it != end; ++it)
+  for (std::list<cmDefinitions>::const_reverse_iterator it = rbegin;
+       it != rend; ++it)
     {
     // Consider local definitions.
-    for(MapType::const_iterator mi = (*it)->Map.begin();
-        mi != (*it)->Map.end(); ++mi)
+    for(MapType::const_iterator mi = it->Map.begin();
+        mi != it->Map.end(); ++mi)
       {
       // Use this key if it is not already set or unset.
       if(this->Map.find(mi->first) == this->Map.end() &&

+ 4 - 4
Source/cmDefinitions.h

@@ -51,8 +51,8 @@ public:
   std::vector<std::string> ClosureKeys() const;
 
   static cmDefinitions MakeClosure(
-      std::list<cmDefinitions const*>::iterator begin,
-      std::list<cmDefinitions const*>::iterator end);
+      std::list<cmDefinitions>::const_reverse_iterator rbegin,
+      std::list<cmDefinitions>::const_reverse_iterator rend);
 
 private:
   // String with existence boolean.
@@ -84,8 +84,8 @@ private:
   Def const& GetInternal(const std::string& key);
 
   void MakeClosure(std::set<std::string>& undefined,
-                   std::list<cmDefinitions const*>::iterator begin,
-                   std::list<cmDefinitions const*>::iterator end);
+                   std::list<cmDefinitions>::const_reverse_iterator rbegin,
+                   std::list<cmDefinitions>::const_reverse_iterator rend);
 };
 
 #endif

+ 3 - 9
Source/cmMakefile.cxx

@@ -63,15 +63,9 @@ public:
 
   void InitializeDefinitions(cmMakefile* parent)
   {
-    std::list<cmDefinitions const*> defPtrs;
-    for (std::list<cmDefinitions>::iterator it =
-         parent->Internal->VarStack.begin();
-         it != parent->Internal->VarStack.end(); ++it)
-      {
-      defPtrs.push_back(&*it);
-      }
-    this->VarStack.back() = cmDefinitions::MakeClosure(defPtrs.begin(),
-                                                       defPtrs.end());
+    this->VarStack.back() =
+        cmDefinitions::MakeClosure(parent->Internal->VarStack.rbegin(),
+                                   parent->Internal->VarStack.rend());
   }
 
   const char* GetDefinition(std::string const& name)