Procházet zdrojové kódy

Cleanup cmTarget source file list representation

This teaches cmTarget to use a set of cmSourceFile pointers to guarantee
unique insertion of source files in a target.  The order of insertion is
still preserved in the SourceFiles vector.
Brad King před 16 roky
rodič
revize
4eb5f1bef6
2 změnil soubory, kde provedl 19 přidání a 11 odebrání
  1. 16 8
      Source/cmTarget.cxx
  2. 3 3
      Source/cmTarget.h

+ 16 - 8
Source/cmTarget.cxx

@@ -1089,7 +1089,6 @@ private:
   cmGlobalGenerator* GlobalGenerator;
   std::queue<cmStdString> DependencyQueue;
   std::set<cmStdString> DependenciesQueued;
-  std::set<cmSourceFile*> TargetSources;
 
   void QueueOnce(std::string const& name);
   void QueueOnce(std::vector<std::string> const& names);
@@ -1120,9 +1119,6 @@ cmTargetTraceDependencies
     // Queue the dependencies of the source file in case they are
     // generated.
     this->QueueDependencies(*si);
-
-    // Track the sources already known to the target.
-    this->TargetSources.insert(*si);
     }
 
   // Queue the VS project file to check dependencies on the rule to
@@ -1156,10 +1152,7 @@ void cmTargetTraceDependencies::Trace()
       this->QueueDependencies(sf);
 
       // Make sure this file is in the target.
-      if(this->TargetSources.insert(sf).second)
-        {
-        this->Target->AddSourceFile(sf);
-        }
+      this->Target->AddSourceFile(sf);
       }
     }
 }
@@ -1330,6 +1323,21 @@ bool cmTarget::FindSourceFiles()
   return true;
 }
 
+//----------------------------------------------------------------------------
+std::vector<cmSourceFile*> const& cmTarget::GetSourceFiles()
+{
+  return this->SourceFiles;
+}
+
+//----------------------------------------------------------------------------
+void cmTarget::AddSourceFile(cmSourceFile* sf)
+{
+  if(this->SourceFileSet.insert(sf).second)
+    {
+    this->SourceFiles.push_back(sf);
+    }
+}
+
 //----------------------------------------------------------------------------
 void cmTarget::AddSources(std::vector<std::string> const& srcs)
 {

+ 3 - 3
Source/cmTarget.h

@@ -119,9 +119,8 @@ public:
   /**
    * Get the list of the source files used by this target
    */
-  std::vector<cmSourceFile*> const &GetSourceFiles()
-    {return this->SourceFiles;}
-  void AddSourceFile(cmSourceFile* sf) { this->SourceFiles.push_back(sf); }
+  std::vector<cmSourceFile*> const& GetSourceFiles();
+  void AddSourceFile(cmSourceFile* sf);
 
   /**
    * Flags for a given source file as used in this target. Typically assigned
@@ -531,6 +530,7 @@ private:
   std::vector<cmCustomCommand> PostBuildCommands;
   TargetType TargetTypeValue;
   std::vector<cmSourceFile*> SourceFiles;
+  std::set<cmSourceFile*> SourceFileSet;
   LinkLibraryVectorType LinkLibraries;
   LinkLibraryVectorType PrevLinkedLibraries;
   bool LinkLibrariesAnalyzed;