Merge topic 'delete-algorithm'

681d965d Use the cmDeleteAll algorithm for types derived from std::map.
4dc0c488 cmDeleteAll: Generalize deletion specialization for map types.
This commit is contained in:
Brad King 2015-01-19 09:43:25 -05:00 committed by CMake Topic Stage
commit 95d42840e8
4 changed files with 21 additions and 25 deletions

View File

@ -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();
}

View File

@ -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);

View File

@ -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;
}
};

View File

@ -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);
}
//----------------------------------------------------------------------------