浏览代码

cmTarget: Refactor internal imported LinkInterface map

Create the map entry up front and store in it a boolean value indicating
whether the LinkInterface structure has been populated.  This approach
leads to shorter code that is easier to follow too.
Brad King 11 年之前
父节点
当前提交
1ca0c0e94a
共有 1 个文件被更改,包括 5 次插入10 次删除
  1. 5 10
      Source/cmTarget.cxx

+ 5 - 10
Source/cmTarget.cxx

@@ -135,7 +135,7 @@ public:
   LinkInterfaceMapType LinkInterfaceUsageRequirementsOnlyMap;
   bool PolicyWarnedCMP0022;
 
-  typedef std::map<TargetConfigPair, cmTarget::LinkInterface>
+  typedef std::map<TargetConfigPair, OptionalLinkInterface>
                                                     ImportLinkInterfaceMapType;
   ImportLinkInterfaceMapType ImportLinkInterfaceMap;
   ImportLinkInterfaceMapType ImportLinkInterfaceUsageRequirementsOnlyMap;
@@ -5977,26 +5977,21 @@ cmTarget::GetImportLinkInterface(const std::string& config,
      this->Internal->ImportLinkInterfaceUsageRequirementsOnlyMap :
      this->Internal->ImportLinkInterfaceMap);
 
-  cmTargetInternals::ImportLinkInterfaceMapType::iterator i = lim.find(key);
-  if(i == lim.end())
+  cmTargetInternals::OptionalLinkInterface& iface = lim[key];
+  if(!iface.AllDone)
     {
-    LinkInterface iface;
+    iface.AllDone = true;
     iface.Multiplicity = info->Multiplicity;
     cmSystemTools::ExpandListArgument(info->Languages, iface.Languages);
     this->ExpandLinkItems(info->LibrariesProp, info->Libraries, config,
                           headTarget, usage_requirements_only,
                           iface.Libraries);
-    {
     std::vector<std::string> deps;
     cmSystemTools::ExpandListArgument(info->SharedDeps, deps);
     this->LookupLinkItems(deps, iface.SharedDeps);
     }
 
-    cmTargetInternals::ImportLinkInterfaceMapType::value_type
-      entry(key, iface);
-    i = lim.insert(entry).first;
-    }
-  return &i->second;
+  return &iface;
 }
 
 //----------------------------------------------------------------------------