From 92e2fbe103c6ffc3af1189d0450493488c65baaa Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sat, 5 Apr 2014 11:41:58 +0200 Subject: [PATCH] cmGeneratorTarget: Trace cmSourceFile objects instead of strings. This reverses the decision in commit d38423ec (cmTarget: Add a method to obtain list of filenames for sources., 2014-03-17). The cmSourceFile based API is preferred because that avoids creation of many cmSourceFileLocation objects for matching strings, and the result is cached by cmTarget. --- Source/cmGeneratorTarget.cxx | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 69a2977a4..0d25a00cc 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -606,12 +606,12 @@ private: cmGlobalGenerator const* GlobalGenerator; typedef cmGeneratorTarget::SourceEntry SourceEntry; SourceEntry* CurrentEntry; - std::queue SourceQueue; - std::set SourcesQueued; + std::queue SourceQueue; + std::set SourcesQueued; typedef std::map NameMapType; NameMapType NameMap; - void QueueSource(std::string const& name); + void QueueSource(cmSourceFile* sf); void FollowName(std::string const& name); void FollowNames(std::vector const& names); bool IsUtility(std::string const& dep); @@ -642,19 +642,19 @@ cmTargetTraceDependencies { configs.push_back(""); } - std::set emitted; + std::set emitted; for(std::vector::const_iterator ci = configs.begin(); ci != configs.end(); ++ci) { - std::vector sources; + std::vector sources; this->Target->GetSourceFiles(sources, *ci); - for(std::vector::const_iterator si = sources.begin(); + for(std::vector::const_iterator si = sources.begin(); si != sources.end(); ++si) { - if(emitted.insert(*si).second && this->SourcesQueued.insert(*si).second) + cmSourceFile* sf = *si; + if(emitted.insert(sf).second && this->SourcesQueued.insert(sf).second) { - this->SourceQueue.push(*si); - this->Makefile->GetOrCreateSource(*si); + this->SourceQueue.push(sf); } } } @@ -673,8 +673,7 @@ void cmTargetTraceDependencies::Trace() while(!this->SourceQueue.empty()) { // Get the next source from the queue. - std::string src = this->SourceQueue.front(); - cmSourceFile* sf = this->Makefile->GetSource(src); + cmSourceFile* sf = this->SourceQueue.front(); this->SourceQueue.pop(); this->CurrentEntry = &this->GeneratorTarget->SourceEntries[sf]; @@ -702,14 +701,14 @@ void cmTargetTraceDependencies::Trace() } //---------------------------------------------------------------------------- -void cmTargetTraceDependencies::QueueSource(std::string const& name) +void cmTargetTraceDependencies::QueueSource(cmSourceFile* sf) { - if(this->SourcesQueued.insert(name).second) + if(this->SourcesQueued.insert(sf).second) { - this->SourceQueue.push(name); + this->SourceQueue.push(sf); // Make sure this file is in the target. - this->Target->AddSource(name); + this->Target->AddSource(sf->GetFullPath()); } } @@ -731,7 +730,7 @@ void cmTargetTraceDependencies::FollowName(std::string const& name) { this->CurrentEntry->Depends.push_back(sf); } - this->QueueSource(sf->GetFullPath()); + this->QueueSource(sf); } }