From 6a22e40147b7df5285a67b63249562ecbeff112e Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 15 Feb 2015 15:23:43 +0100 Subject: cmListCommand: Use cmRemoveIndices for REMOVE_AT subcommand. Avoid repeatedly looping over the indices to process elements (even without breaking out of the loop when the element is found). --- Source/cmListCommand.cxx | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/Source/cmListCommand.cxx b/Source/cmListCommand.cxx index 826632f..93c6d66 100644 --- a/Source/cmListCommand.cxx +++ b/Source/cmListCommand.cxx @@ -527,26 +527,19 @@ bool cmListCommand::HandleRemoveAtCommand( removed.push_back(static_cast(item)); } + 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; const char* sep = ""; for ( cc = 0; cc < varArgsExpanded.size(); ++ cc ) { - size_t kk; - bool found = false; - for ( kk = 0; kk < removed.size(); ++ kk ) - { - if ( cc == removed[kk] ) - { - found = true; - } - } - - if ( !found ) - { - value += sep; - value += varArgsExpanded[cc]; - sep = ";"; - } + value += sep; + value += varArgsExpanded[cc]; + sep = ";"; } this->Makefile->AddDefinition(listName, value.c_str()); -- cgit v0.12