Browse Source

cmDefinitions: Make ClosureKeys API vector-based.

Construct the final list directly in a named return value.  Use
a single set to track bindings already found.

Co-Author: Brad King <[email protected]>
Stephen Kelly 10 years ago
parent
commit
012a75a00f
3 changed files with 8 additions and 11 deletions
  1. 5 7
      Source/cmDefinitions.cxx
  2. 1 1
      Source/cmDefinitions.h
  3. 2 3
      Source/cmMakefile.cxx

+ 5 - 7
Source/cmDefinitions.cxx

@@ -119,10 +119,10 @@ void cmDefinitions::ClosureImpl(std::set<std::string>& undefined,
 }
 
 //----------------------------------------------------------------------------
-std::set<std::string> cmDefinitions::ClosureKeys() const
+std::vector<std::string> cmDefinitions::ClosureKeys() const
 {
-  std::set<std::string> defined;
-  std::set<std::string> undefined;
+  std::vector<std::string> defined;
+  std::set<std::string> bound;
 
   cmDefinitions const* up = this;
 
@@ -133,11 +133,9 @@ std::set<std::string> cmDefinitions::ClosureKeys() const
         mi != up->Map.end(); ++mi)
       {
       // Use this key if it is not already set or unset.
-      if(defined.find(mi->first) == defined.end() &&
-         undefined.find(mi->first) == undefined.end())
+      if(bound.insert(mi->first).second && mi->second.Exists)
         {
-        std::set<std::string>& m = mi->second.Exists? defined : undefined;
-        m.insert(mi->first);
+        defined.push_back(mi->first);
         }
       }
     up = up->Up;

+ 1 - 1
Source/cmDefinitions.h

@@ -50,7 +50,7 @@ public:
   cmDefinitions Closure() const;
 
   /** Compute the set of all defined keys.  */
-  std::set<std::string> ClosureKeys() const;
+  std::vector<std::string> ClosureKeys() const;
 
 private:
   // String with existence boolean.

+ 2 - 3
Source/cmMakefile.cxx

@@ -94,7 +94,7 @@ public:
     return this->VarStack.top().LocalKeys();
   }
 
-  std::set<std::string> ClosureKeys() const
+  std::vector<std::string> ClosureKeys() const
   {
     return this->VarStack.top().ClosureKeys();
   }
@@ -2514,8 +2514,7 @@ std::vector<std::string> cmMakefile
   std::vector<std::string> res;
   if ( !cacheonly )
     {
-    std::set<std::string> definitions = this->Internal->ClosureKeys();
-    res.insert(res.end(), definitions.begin(), definitions.end());
+    res = this->Internal->ClosureKeys();
     }
   std::vector<std::string> cacheKeys =
       this->GetState()->GetCacheEntryKeys();