Browse Source

Merge topic 'delete-algorithm'

681d965d Use the cmDeleteAll algorithm for types derived from std::map.
4dc0c488 cmDeleteAll: Generalize deletion specialization for map types.
Brad King 11 years ago
parent
commit
95d42840e8
4 changed files with 21 additions and 25 deletions
  1. 1 6
      Source/cmExportSetMap.cxx
  2. 1 5
      Source/cmGlobalGenerator.cxx
  3. 17 4
      Source/cmStandardIncludes.h
  4. 2 10
      Source/cmTarget.cxx

+ 1 - 6
Source/cmExportSetMap.cxx

@@ -25,12 +25,7 @@ cmExportSet* cmExportSetMap::operator[](const std::string &name)
 
 void cmExportSetMap::clear()
 {
-  for(std::map<std::string, cmExportSet*>::iterator it = this->begin();
-      it != this->end();
-      ++ it)
-    {
-    delete it->second;
-    }
+  cmDeleteAll(*this);
   this->derived::clear();
 }
 

+ 1 - 5
Source/cmGlobalGenerator.cxx

@@ -1510,11 +1510,7 @@ void cmGlobalGenerator::CreateGeneratorTargets()
 //----------------------------------------------------------------------------
 void cmGlobalGenerator::ClearGeneratorMembers()
 {
-  for(cmGeneratorTargetsType::iterator i = this->GeneratorTargets.begin();
-      i != this->GeneratorTargets.end(); ++i)
-    {
-    delete i->second;
-    }
+  cmDeleteAll(this->GeneratorTargets);
   this->GeneratorTargets.clear();
 
   cmDeleteAll(this->EvaluationFiles);

+ 17 - 4
Source/cmStandardIncludes.h

@@ -239,7 +239,20 @@ private:
 
 namespace ContainerAlgorithms {
 
-template<typename Container>
+template<typename T>
+struct cmIsPair
+{
+  enum { value = false };
+};
+
+template<typename K, typename V>
+struct cmIsPair<std::pair<K, V> >
+{
+  enum { value = true };
+};
+
+template<typename Container,
+    bool valueTypeIsPair = cmIsPair<typename Container::value_type>::value>
 struct DefaultDeleter
 {
   void operator()(typename Container::value_type value) {
@@ -247,10 +260,10 @@ struct DefaultDeleter
   }
 };
 
-template<typename K, typename V>
-struct DefaultDeleter<std::map<K, V> >
+template<typename Container>
+struct DefaultDeleter<Container, /* valueTypeIsPair = */ true>
 {
-  void operator()(typename std::map<K, V>::value_type value) {
+  void operator()(typename Container::value_type value) {
     delete value.second;
   }
 };

+ 2 - 10
Source/cmTarget.cxx

@@ -539,12 +539,7 @@ void cmTarget::ClearLinkMaps()
   this->Internal->LinkInterfaceUsageRequirementsOnlyMap.clear();
   this->Internal->LinkClosureMap.clear();
   this->Internal->SourceFilesMap.clear();
-  for (cmTargetLinkInformationMap::const_iterator it
-      = this->LinkInformation.begin();
-      it != this->LinkInformation.end(); ++it)
-    {
-    delete it->second;
-    }
+  cmDeleteAll(this->LinkInformation);
   this->LinkInformation.clear();
 }
 
@@ -6874,10 +6869,7 @@ cmTargetLinkInformationMap
 //----------------------------------------------------------------------------
 cmTargetLinkInformationMap::~cmTargetLinkInformationMap()
 {
-  for(derived::iterator i = this->begin(); i != this->end(); ++i)
-    {
-    delete i->second;
-    }
+  cmDeleteAll(*this);
 }
 
 //----------------------------------------------------------------------------