cmTarget: Refactor GetLinkImplementationClosure internals

Store the 'Done' flag directly in each map entry instead of using a
separate map.
This commit is contained in:
Brad King 2014-07-16 12:58:19 -04:00
parent 9d72df4505
commit 89095514a7
1 changed files with 11 additions and 7 deletions

View File

@ -164,6 +164,13 @@ public:
typedef std::map<std::string, cmTarget::LinkClosure> LinkClosureMapType; typedef std::map<std::string, cmTarget::LinkClosure> LinkClosureMapType;
LinkClosureMapType LinkClosureMap; LinkClosureMapType LinkClosureMap;
struct LinkImplClosure: public std::vector<cmTarget const*>
{
LinkImplClosure(): Done(false) {}
bool Done;
};
std::map<std::string, LinkImplClosure> LinkImplClosureMap;
typedef std::map<std::string, std::vector<cmSourceFile*> > typedef std::map<std::string, std::vector<cmSourceFile*> >
SourceFilesMapType; SourceFilesMapType;
SourceFilesMapType SourceFilesMap; SourceFilesMapType SourceFilesMap;
@ -203,15 +210,12 @@ public:
CachedLinkInterfaceSourcesEntries; CachedLinkInterfaceSourcesEntries;
std::map<std::string, std::vector<TargetPropertyEntry*> > std::map<std::string, std::vector<TargetPropertyEntry*> >
CachedLinkInterfaceCompileFeaturesEntries; CachedLinkInterfaceCompileFeaturesEntries;
std::map<std::string, std::vector<cmTarget const*> >
CachedLinkImplementationClosure;
std::map<std::string, bool> CacheLinkInterfaceIncludeDirectoriesDone; std::map<std::string, bool> CacheLinkInterfaceIncludeDirectoriesDone;
std::map<std::string, bool> CacheLinkInterfaceCompileDefinitionsDone; std::map<std::string, bool> CacheLinkInterfaceCompileDefinitionsDone;
std::map<std::string, bool> CacheLinkInterfaceCompileOptionsDone; std::map<std::string, bool> CacheLinkInterfaceCompileOptionsDone;
std::map<std::string, bool> CacheLinkInterfaceSourcesDone; std::map<std::string, bool> CacheLinkInterfaceSourcesDone;
std::map<std::string, bool> CacheLinkInterfaceCompileFeaturesDone; std::map<std::string, bool> CacheLinkInterfaceCompileFeaturesDone;
std::map<std::string, bool> CacheLinkImplementationClosureDone;
}; };
cmLinkImplItem cmTargetInternals::TargetPropertyEntry::NoLinkImplItem; cmLinkImplItem cmTargetInternals::TargetPropertyEntry::NoLinkImplItem;
@ -6034,11 +6038,11 @@ void processILibs(const std::string& config,
std::vector<cmTarget const*> const& std::vector<cmTarget const*> const&
cmTarget::GetLinkImplementationClosure(const std::string& config) const cmTarget::GetLinkImplementationClosure(const std::string& config) const
{ {
std::vector<cmTarget const*>& tgts = cmTargetInternals::LinkImplClosure& tgts =
this->Internal->CachedLinkImplementationClosure[config]; this->Internal->LinkImplClosureMap[config];
if(!this->Internal->CacheLinkImplementationClosureDone[config]) if(!tgts.Done)
{ {
this->Internal->CacheLinkImplementationClosureDone[config] = true; tgts.Done = true;
std::set<cmTarget const*> emitted; std::set<cmTarget const*> emitted;
cmTarget::LinkImplementationLibraries const* impl cmTarget::LinkImplementationLibraries const* impl