From abb4a6781f96b28e4c30014915f566dee9130db7 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 4 Jan 2015 14:53:24 +0100 Subject: Add a generic algorithm for deleting items in a container. Specialize for std::map types to delete the second element from the iterator. This is not quite general enough that it can be used everywhere, because CMake inherits from std::map and creates typedefs with custom comparison functors etc, which can not use this algorithm. --- Source/cmStandardIncludes.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Source/cmStandardIncludes.h b/Source/cmStandardIncludes.h index 2d988c9..251a043 100644 --- a/Source/cmStandardIncludes.h +++ b/Source/cmStandardIncludes.h @@ -237,4 +237,31 @@ private: const std::string m_test; }; +namespace ContainerAlgorithms { + +template +struct DefaultDeleter +{ + void operator()(typename Container::value_type value) { + delete value; + } +}; + +template +struct DefaultDeleter > +{ + void operator()(typename std::map::value_type value) { + delete value.second; + } +}; + +} + +template +void cmDeleteAll(Container const& c) +{ + std::for_each(c.begin(), c.end(), + ContainerAlgorithms::DefaultDeleter()); +} + #endif -- cgit v0.12 From 4a6e795b0c5cdafbc78f12389ec20d6bc4f9ca34 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 4 Jan 2015 13:33:16 +0100 Subject: Use the cmDeleteAll algorithm instead of trivial raw loops. --- Source/CPack/cmCPackGeneratorFactory.cxx | 6 +---- Source/CursesDialog/cmCursesMainForm.cxx | 13 ++------- Source/cmCTest.cxx | 8 +----- Source/cmComputeLinkDepends.cxx | 7 +---- Source/cmDependsC.cxx | 7 +---- Source/cmDocumentation.cxx | 7 +---- Source/cmExportSet.cxx | 5 +--- Source/cmFileLockPool.cxx | 17 +++--------- Source/cmGeneratorExpression.cxx | 10 +------ Source/cmGlobalGenerator.cxx | 20 +++----------- Source/cmInstalledFile.h | 6 +---- Source/cmMakeDepend.cxx | 7 +---- Source/cmMakefile.cxx | 46 +++++--------------------------- Source/cmOrderDirectories.cxx | 14 ++-------- Source/cmPolicies.cxx | 8 +----- Source/cmTarget.cxx | 8 +----- Source/cmake.cxx | 12 ++------- 17 files changed, 30 insertions(+), 171 deletions(-) diff --git a/Source/CPack/cmCPackGeneratorFactory.cxx b/Source/CPack/cmCPackGeneratorFactory.cxx index 94ca536..a07c29a 100644 --- a/Source/CPack/cmCPackGeneratorFactory.cxx +++ b/Source/CPack/cmCPackGeneratorFactory.cxx @@ -158,11 +158,7 @@ cmCPackGeneratorFactory::cmCPackGeneratorFactory() //---------------------------------------------------------------------- cmCPackGeneratorFactory::~cmCPackGeneratorFactory() { - std::vector::iterator it; - for ( it = this->Generators.begin(); it != this->Generators.end(); ++ it ) - { - delete *it; - } + cmDeleteAll(this->Generators); } //---------------------------------------------------------------------- diff --git a/Source/CursesDialog/cmCursesMainForm.cxx b/Source/CursesDialog/cmCursesMainForm.cxx index 4200e9e..248efaf 100644 --- a/Source/CursesDialog/cmCursesMainForm.cxx +++ b/Source/CursesDialog/cmCursesMainForm.cxx @@ -69,11 +69,7 @@ cmCursesMainForm::~cmCursesMainForm() // Clean-up composites if (this->Entries) { - std::vector::iterator it; - for (it = this->Entries->begin(); it != this->Entries->end(); ++it) - { - delete *it; - } + cmDeleteAll(*this->Entries); } delete this->Entries; if (this->CMakeInstance) @@ -188,12 +184,7 @@ void cmCursesMainForm::InitializeUI() // Clean old entries if (this->Entries) { - // Have to call delete on each pointer - std::vector::iterator it; - for (it = this->Entries->begin(); it != this->Entries->end(); ++it) - { - delete *it; - } + cmDeleteAll(*this->Entries); } delete this->Entries; this->Entries = newEntries; diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index f80d4ac..76873ad 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -378,13 +378,7 @@ cmCTest::cmCTest() //---------------------------------------------------------------------- cmCTest::~cmCTest() { - cmCTest::t_TestingHandlers::iterator it; - for ( it = this->TestingHandlers.begin(); - it != this->TestingHandlers.end(); ++ it ) - { - delete it->second; - it->second = 0; - } + cmDeleteAll(this->TestingHandlers); this->SetOutputLogFileName(0); } diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx index 0ddb571..f0bae28 100644 --- a/Source/cmComputeLinkDepends.cxx +++ b/Source/cmComputeLinkDepends.cxx @@ -200,12 +200,7 @@ cmComputeLinkDepends //---------------------------------------------------------------------------- cmComputeLinkDepends::~cmComputeLinkDepends() { - for(std::vector::iterator - i = this->InferredDependSets.begin(); - i != this->InferredDependSets.end(); ++i) - { - delete *i; - } + cmDeleteAll(this->InferredDependSets); delete this->CCG; } diff --git a/Source/cmDependsC.cxx b/Source/cmDependsC.cxx index a8711eb..5ae065e 100644 --- a/Source/cmDependsC.cxx +++ b/Source/cmDependsC.cxx @@ -90,12 +90,7 @@ cmDependsC::cmDependsC(cmLocalGenerator* lg, cmDependsC::~cmDependsC() { this->WriteCacheFile(); - - for (std::map::iterator it= - this->FileCache.begin(); it!=this->FileCache.end(); ++it) - { - delete it->second; - } + cmDeleteAll(this->FileCache); } //---------------------------------------------------------------------------- diff --git a/Source/cmDocumentation.cxx b/Source/cmDocumentation.cxx index 3ff1017..a268d12 100644 --- a/Source/cmDocumentation.cxx +++ b/Source/cmDocumentation.cxx @@ -87,12 +87,7 @@ cmDocumentation::cmDocumentation() //---------------------------------------------------------------------------- cmDocumentation::~cmDocumentation() { - for(std::map::iterator i = - this->AllSections.begin(); - i != this->AllSections.end(); ++i) - { - delete i->second; - } + cmDeleteAll(this->AllSections); } //---------------------------------------------------------------------------- diff --git a/Source/cmExportSet.cxx b/Source/cmExportSet.cxx index 33b0630..14812e4 100644 --- a/Source/cmExportSet.cxx +++ b/Source/cmExportSet.cxx @@ -15,10 +15,7 @@ cmExportSet::~cmExportSet() { - for(unsigned int i = 0; i < this->TargetExports.size(); ++ i) - { - delete this->TargetExports[i]; - } + cmDeleteAll(this->TargetExports); } void cmExportSet::AddTargetExport(cmTargetExport* te) diff --git a/Source/cmFileLockPool.cxx b/Source/cmFileLockPool.cxx index 551a75a..cf8e9a9 100644 --- a/Source/cmFileLockPool.cxx +++ b/Source/cmFileLockPool.cxx @@ -23,16 +23,8 @@ cmFileLockPool::cmFileLockPool() cmFileLockPool::~cmFileLockPool() { - for (It i = this->FunctionScopes.begin(); - i != this->FunctionScopes.end(); ++i) - { - delete *i; - } - - for (It i = this->FileScopes.begin(); i != this->FileScopes.end(); ++i) - { - delete *i; - } + cmDeleteAll(this->FunctionScopes); + cmDeleteAll(this->FileScopes); } void cmFileLockPool::PushFunctionScope() @@ -148,10 +140,7 @@ cmFileLockPool::ScopePool::ScopePool() cmFileLockPool::ScopePool::~ScopePool() { - for (It i = this->Locks.begin(); i != this->Locks.end(); ++i) - { - delete *i; - } + cmDeleteAll(this->Locks); } cmFileLockResult cmFileLockPool::ScopePool::Lock( diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx index 861122c..b2a2386 100644 --- a/Source/cmGeneratorExpression.cxx +++ b/Source/cmGeneratorExpression.cxx @@ -150,15 +150,7 @@ cmCompiledGeneratorExpression::cmCompiledGeneratorExpression( //---------------------------------------------------------------------------- cmCompiledGeneratorExpression::~cmCompiledGeneratorExpression() { - std::vector::const_iterator it - = this->Evaluators.begin(); - const std::vector::const_iterator end - = this->Evaluators.end(); - - for ( ; it != end; ++it) - { - delete *it; - } + cmDeleteAll(this->Evaluators); } //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index aee96dd..d17710e 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1517,27 +1517,13 @@ void cmGlobalGenerator::ClearGeneratorMembers() } this->GeneratorTargets.clear(); - for(std::vector::const_iterator - li = this->EvaluationFiles.begin(); - li != this->EvaluationFiles.end(); - ++li) - { - delete *li; - } + cmDeleteAll(this->EvaluationFiles); this->EvaluationFiles.clear(); - for(std::map::iterator - i = this->BuildExportSets.begin(); - i != this->BuildExportSets.end(); ++i) - { - delete i->second; - } + cmDeleteAll(this->BuildExportSets); this->BuildExportSets.clear(); - for (unsigned int i = 0; i < this->LocalGenerators.size(); ++i) - { - delete this->LocalGenerators[i]; - } + cmDeleteAll(this->LocalGenerators); this->LocalGenerators.clear(); this->ExportSets.clear(); diff --git a/Source/cmInstalledFile.h b/Source/cmInstalledFile.h index 7134a4e..503f92c 100644 --- a/Source/cmInstalledFile.h +++ b/Source/cmInstalledFile.h @@ -38,11 +38,7 @@ public: ~Property() { - for(ExpressionVectorType::iterator i = ValueExpressions.begin(); - i != ValueExpressions.end(); ++i) - { - delete *i; - } + cmDeleteAll(this->ValueExpressions); } ExpressionVectorType ValueExpressions; diff --git a/Source/cmMakeDepend.cxx b/Source/cmMakeDepend.cxx index 1499e57..54b8535 100644 --- a/Source/cmMakeDepend.cxx +++ b/Source/cmMakeDepend.cxx @@ -34,12 +34,7 @@ cmMakeDepend::cmMakeDepend() cmMakeDepend::~cmMakeDepend() { - for(DependInformationMapType::iterator i = - this->DependInformationMap.begin(); - i != this->DependInformationMap.end(); ++i) - { - delete i->second; - } + cmDeleteAll(this->DependInformationMap); } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index d188331..fdf311f 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -194,45 +194,13 @@ bool cmMakefile::NeedCacheCompatibility(int major, int minor) const cmMakefile::~cmMakefile() { - for(std::vector::iterator - i = this->InstallGenerators.begin(); - i != this->InstallGenerators.end(); ++i) - { - delete *i; - } - for(std::vector::iterator - i = this->TestGenerators.begin(); - i != this->TestGenerators.end(); ++i) - { - delete *i; - } - for(std::vector::iterator i = this->SourceFiles.begin(); - i != this->SourceFiles.end(); ++i) - { - delete *i; - } - for(std::map::iterator i = this->Tests.begin(); - i != this->Tests.end(); ++i) - { - delete i->second; - } - for(std::vector::iterator - i = this->ImportedTargetsOwned.begin(); - i != this->ImportedTargetsOwned.end(); ++i) - { - delete *i; - } - for(unsigned int i=0; i < this->FinalPassCommands.size(); i++) - { - delete this->FinalPassCommands[i]; - } - std::vector::iterator pos; - for (pos = this->FunctionBlockers.begin(); - pos != this->FunctionBlockers.end(); ++pos) - { - cmFunctionBlocker* b = *pos; - delete b; - } + cmDeleteAll(this->InstallGenerators); + cmDeleteAll(this->TestGenerators); + cmDeleteAll(this->SourceFiles); + cmDeleteAll(this->Tests); + cmDeleteAll(this->ImportedTargetsOwned); + cmDeleteAll(this->FinalPassCommands); + cmDeleteAll(this->FunctionBlockers); this->FunctionBlockers.clear(); if (this->PolicyStack.size() != 1) { diff --git a/Source/cmOrderDirectories.cxx b/Source/cmOrderDirectories.cxx index 116d42f..23f8526 100644 --- a/Source/cmOrderDirectories.cxx +++ b/Source/cmOrderDirectories.cxx @@ -291,18 +291,8 @@ cmOrderDirectories::cmOrderDirectories(cmGlobalGenerator* gg, //---------------------------------------------------------------------------- cmOrderDirectories::~cmOrderDirectories() { - for(std::vector::iterator - i = this->ConstraintEntries.begin(); - i != this->ConstraintEntries.end(); ++i) - { - delete *i; - } - for(std::vector::iterator - i = this->ImplicitDirEntries.begin(); - i != this->ImplicitDirEntries.end(); ++i) - { - delete *i; - } + cmDeleteAll(this->ConstraintEntries); + cmDeleteAll(this->ImplicitDirEntries); } //---------------------------------------------------------------------------- diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx index da64617..3a48101 100644 --- a/Source/cmPolicies.cxx +++ b/Source/cmPolicies.cxx @@ -378,13 +378,7 @@ cmPolicies::cmPolicies() cmPolicies::~cmPolicies() { - // free the policies - std::map::iterator i - = this->Policies.begin(); - for (;i != this->Policies.end(); ++i) - { - delete i->second; - } + cmDeleteAll(this->Policies); } void cmPolicies::DefinePolicy(cmPolicies::PolicyID iD, diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index b138f0a..1158ed8 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -226,13 +226,7 @@ cmLinkImplItem cmTargetInternals::TargetPropertyEntry::NoLinkImplItem; static void deleteAndClear( std::vector &entries) { - for (std::vector::const_iterator - it = entries.begin(), - end = entries.end(); - it != end; ++it) - { - delete *it; - } + cmDeleteAll(entries); entries.clear(); } diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 5e48157..4244b25 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -171,16 +171,8 @@ cmake::~cmake() delete this->GlobalGenerator; this->GlobalGenerator = 0; } - for(RegisteredCommandsMap::iterator j = this->Commands.begin(); - j != this->Commands.end(); ++j) - { - delete (*j).second; - } - for(RegisteredGeneratorsVector::iterator j = this->Generators.begin(); - j != this->Generators.end(); ++j) - { - delete *j; - } + cmDeleteAll(this->Commands); + cmDeleteAll(this->Generators); #ifdef CMAKE_BUILD_WITH_CMAKE delete this->VariableWatch; #endif -- cgit v0.12 From 30d2de9aa82196a12f47930e736181c48c568585 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 4 Jan 2015 16:35:26 +0100 Subject: cmGeneratorExpressionEvaluator: Replace own algorithm with cmDeleteAll. --- Source/cmGeneratorExpressionEvaluator.cxx | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index 2f17915..22b61ba 100644 --- a/Source/cmGeneratorExpressionEvaluator.cxx +++ b/Source/cmGeneratorExpressionEvaluator.cxx @@ -2045,30 +2045,9 @@ std::string GeneratorExpressionContent::EvaluateParameters( } //---------------------------------------------------------------------------- -static void deleteAll(const std::vector &c) -{ - std::vector::const_iterator it - = c.begin(); - const std::vector::const_iterator end - = c.end(); - for ( ; it != end; ++it) - { - delete *it; - } -} - -//---------------------------------------------------------------------------- GeneratorExpressionContent::~GeneratorExpressionContent() { - deleteAll(this->IdentifierChildren); - - typedef std::vector EvaluatorVector; - std::vector::const_iterator pit = - this->ParamChildren.begin(); - const std::vector::const_iterator pend = - this->ParamChildren.end(); - for ( ; pit != pend; ++pit) - { - deleteAll(*pit); - } + cmDeleteAll(this->IdentifierChildren); + std::for_each(this->ParamChildren.begin(), this->ParamChildren.end(), + cmDeleteAll >); } -- cgit v0.12 From 65b81da458614c6a4652ea2e4fc933893c671281 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 4 Jan 2015 16:33:15 +0100 Subject: cmVariableWatch: Use the cmDeleteAll algorithm with for_each. --- Source/cmVariableWatch.cxx | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/Source/cmVariableWatch.cxx b/Source/cmVariableWatch.cxx index cb6cb12..b8a6df2 100644 --- a/Source/cmVariableWatch.cxx +++ b/Source/cmVariableWatch.cxx @@ -34,21 +34,16 @@ cmVariableWatch::cmVariableWatch() { } -cmVariableWatch::~cmVariableWatch() +template +void deleteAllSecond(typename C::value_type it) { - cmVariableWatch::StringToVectorOfPairs::iterator svp_it; - - for ( svp_it = this->WatchMap.begin(); - svp_it != this->WatchMap.end(); ++svp_it ) - { - cmVariableWatch::VectorOfPairs::iterator p_it; + cmDeleteAll(it.second); +} - for ( p_it = svp_it->second.begin(); - p_it != svp_it->second.end(); ++p_it ) - { - delete *p_it; - } - } +cmVariableWatch::~cmVariableWatch() +{ + std::for_each(this->WatchMap.begin(), this->WatchMap.end(), + deleteAllSecond); } bool cmVariableWatch::AddWatch(const std::string& variable, -- cgit v0.12