From 116459d34fab6327906e901753611636f84a16c1 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 15 Feb 2015 15:48:51 +0100 Subject: cmListCommand: Avoid needlessly erasing from vectors. The entire vector will be destroyed at once at the end of the scope, and the remove algorithms already give us the end of the range of interesting values, so just use those sentinals. --- Source/cmListCommand.cxx | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/Source/cmListCommand.cxx b/Source/cmListCommand.cxx index e2ebe0a..98dcef1 100644 --- a/Source/cmListCommand.cxx +++ b/Source/cmListCommand.cxx @@ -357,13 +357,14 @@ bool cmListCommand std::vector remove(args.begin() + 2, args.end()); std::sort(remove.begin(), remove.end()); - remove.erase(std::unique(remove.begin(), remove.end()), remove.end()); - - varArgsExpanded.erase( - cmRemoveMatching(varArgsExpanded, remove), - varArgsExpanded.end()); - - std::string value = cmJoin(varArgsExpanded, ";"); + std::vector::const_iterator remEnd = + std::unique(remove.begin(), remove.end()); + std::vector::const_iterator remBegin = remove.begin(); + + std::vector::const_iterator argsEnd = + cmRemoveMatching(varArgsExpanded, cmRange(remBegin, remEnd)); + std::vector::const_iterator argsBegin = varArgsExpanded.begin(); + std::string value = cmJoin(cmRange(argsBegin, argsEnd), ";"); this->Makefile->AddDefinition(listName, value.c_str()); return true; } @@ -418,9 +419,11 @@ bool cmListCommand return false; } - varArgsExpanded.erase(cmRemoveDuplicates(varArgsExpanded), - varArgsExpanded.end()); - std::string value = cmJoin(varArgsExpanded, ";"); + std::vector::const_iterator argsEnd = + cmRemoveDuplicates(varArgsExpanded); + std::vector::const_iterator argsBegin = + varArgsExpanded.begin(); + std::string value = cmJoin(cmRange(argsBegin, argsEnd), ";"); this->Makefile->AddDefinition(listName, value.c_str()); return true; @@ -503,13 +506,14 @@ bool cmListCommand::HandleRemoveAtCommand( } std::sort(removed.begin(), removed.end()); - removed.erase(std::unique(removed.begin(), removed.end()), removed.end()); - - varArgsExpanded.erase(cmRemoveIndices(varArgsExpanded, removed), - varArgsExpanded.end()); - - std::string value = cmJoin(varArgsExpanded, ";"); - + std::vector::const_iterator remEnd = + std::unique(removed.begin(), removed.end()); + std::vector::const_iterator remBegin = removed.begin(); + + std::vector::const_iterator argsEnd = + cmRemoveIndices(varArgsExpanded, cmRange(remBegin, remEnd)); + std::vector::const_iterator argsBegin = varArgsExpanded.begin(); + std::string value = cmJoin(cmRange(argsBegin, argsEnd), ";"); this->Makefile->AddDefinition(listName, value.c_str()); return true; -- cgit v0.12