From e6ca1b82744154fa048634abdc353e4118a11979 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 12 Feb 2015 20:47:53 +0100 Subject: cmCTest: Convert loop to member insert. --- Source/cmCTest.cxx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index f08b87c..69573ac 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -2256,10 +2256,9 @@ int cmCTest::Run(std::vector &args, std::string* output) bool SRArgumentSpecified = false; // copy the command line - for(size_t i=0; i < args.size(); ++i) - { - this->InitialCommandLineArguments.push_back(args[i]); - } + this->InitialCommandLineArguments.insert( + this->InitialCommandLineArguments.end(), + args.begin(), args.end()); // process the command line arguments for(size_t i=1; i < args.size(); ++i) -- cgit v0.12 From 470cff497bc26d48ee05de0b260af2546bb7698c Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 27 Jan 2015 22:39:46 +0100 Subject: cmMakefile: Replace loop with composed algorithm. --- Source/cmMakefile.cxx | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index ac5fec9..2085a97 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1472,18 +1472,11 @@ bool cmMakefile::ParseDefineFlag(std::string const& def, bool remove) cmSystemTools::ExpandListArgument(cdefs, defs); // Recompose the list without the definition. - std::string ndefs; - const char* sep = ""; - for(std::vector::const_iterator di = defs.begin(); - di != defs.end(); ++di) - { - if(*di != define) - { - ndefs += sep; - sep = ";"; - ndefs += *di; - } - } + std::vector::const_iterator defEnd = + std::remove(defs.begin(), defs.end(), define); + std::vector::const_iterator defBegin = + defs.begin(); + std::string ndefs = cmJoin(cmRange(defBegin, defEnd), ";"); // Store the new list. this->SetProperty("COMPILE_DEFINITIONS", ndefs.c_str()); -- cgit v0.12 From ee269f4f16300b0427c1e1baef94b85ccc4ea13f Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 18 Feb 2015 00:40:54 +0100 Subject: cmMakefile: Replace two loops with std::replace. --- Source/cmMakefile.cxx | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 2085a97..0d0c60a 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1341,19 +1341,8 @@ void cmMakefile::AddDefineFlag(const char* flag, std::string& dflags) { // remove any \n\r std::string ret = flag; - std::string::size_type pos = 0; - while((pos = ret.find('\n', pos)) != std::string::npos) - { - ret[pos] = ' '; - pos++; - } - pos = 0; - while((pos = ret.find('\r', pos)) != std::string::npos) - { - ret[pos] = ' '; - pos++; - } - + std::replace(ret.begin(), ret.end(), '\n', ' '); + std::replace(ret.begin(), ret.end(), '\r', ' '); dflags += " "; dflags += ret; } -- cgit v0.12 From f20a4257f2889387fcbf540b29b16f10843f2f9e Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 18 Feb 2015 00:44:45 +0100 Subject: cmMakefile: Add flag to result and manipulate in place. Rather than creating a string, manipulating it, and then copying it to the result. --- Source/cmMakefile.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 0d0c60a..6fd569e 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1340,11 +1340,11 @@ void cmMakefile::AddDefineFlag(const char* flag) void cmMakefile::AddDefineFlag(const char* flag, std::string& dflags) { // remove any \n\r - std::string ret = flag; - std::replace(ret.begin(), ret.end(), '\n', ' '); - std::replace(ret.begin(), ret.end(), '\r', ' '); - dflags += " "; - dflags += ret; + std::string::size_type initSize = dflags.size(); + dflags += std::string(" ") + flag; + std::string::iterator flagStart = dflags.begin() + initSize + 1; + std::replace(flagStart, dflags.end(), '\n', ' '); + std::replace(flagStart, dflags.end(), '\r', ' '); } -- cgit v0.12 From b3a0c6e08f36efc5f3cd4c1a0d9614a789f91e38 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 12 Feb 2015 23:45:25 +0100 Subject: cmLocalGenerator: Convert loop to algorithm. --- Source/cmLocalGenerator.cxx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 6a6135b..2accf47 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -2800,12 +2800,7 @@ std::string cmLocalGenerator::ConvertToOutputFormat(const std::string& source, } if(this->WindowsShell) { - std::string::size_type pos = 0; - while((pos = result.find('/', pos)) != std::string::npos) - { - result[pos] = '\\'; - pos++; - } + std::replace(result.begin(), result.end(), '/', '\\'); } result = this->EscapeForShell(result, true, false, output == WATCOMQUOTE); } -- cgit v0.12 From ee5bc006ebee898729b81237719106704a2bb38a Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 18 Feb 2015 21:58:07 +0100 Subject: cmGeneratorTarget: Replace set insert algorithm with cmRemoveDuplicates. --- Source/cmGeneratorTarget.cxx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index a4f099b..44c9e9a 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -528,23 +528,22 @@ cmGeneratorTarget::UseObjectLibraries(std::vector& objs, std::vector objectFiles; this->GetExternalObjects(objectFiles, config); std::vector objectLibraries; - std::set emitted; for(std::vector::const_iterator it = objectFiles.begin(); it != objectFiles.end(); ++it) { std::string objLib = (*it)->GetObjectLibrary(); if (cmTarget* tgt = this->Makefile->FindTargetToUse(objLib)) { - if (emitted.insert(tgt).second) - { - objectLibraries.push_back(tgt); - } + objectLibraries.push_back(tgt); } } + std::vector::const_iterator end + = cmRemoveDuplicates(objectLibraries); + for(std::vector::const_iterator ti = objectLibraries.begin(); - ti != objectLibraries.end(); ++ti) + ti != end; ++ti) { cmTarget* objLib = *ti; cmGeneratorTarget* ogt = -- cgit v0.12 From 9c225767873ce64a745e865c6f1c3372a8ab45d9 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 18 Feb 2015 22:45:01 +0100 Subject: cmGlobalGenerator: Replace set::insert algorithm with cmRemoveDuplicates. --- Source/cmGlobalGenerator.cxx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 1de4a59..c976c69 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -2937,14 +2937,11 @@ void cmGlobalGenerator::WriteSummary(cmTarget* target) { target->GetSourceFiles(sources, *ci); } - std::set emitted; + std::vector::const_iterator sourcesEnd + = cmRemoveDuplicates(sources); for(std::vector::const_iterator si = sources.begin(); - si != sources.end(); ++si) + si != sourcesEnd; ++si) { - if (!emitted.insert(*si).second) - { - continue; - } Json::Value& lj_source = lj_sources.append(Json::objectValue); cmSourceFile* sf = *si; std::string const& sfp = sf->GetFullPath(); -- cgit v0.12 From 05fec779d33b872721b9731e872125ebeb89403b Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 15 Feb 2015 13:40:56 +0100 Subject: cmTarget: Port loop to algorithm. --- Source/cmTarget.cxx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 1ad0d48..ebcd810 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1542,12 +1542,9 @@ void cmTarget::DeleteDependencyForVS6( DependencyMap& depMap, if( map_itr != depMap.end() ) { DependencyList& depList = map_itr->second; - DependencyList::iterator itr; - while( (itr = std::find(depList.begin(), depList.end(), dep)) != - depList.end() ) - { - depList.erase( itr ); - } + DependencyList::iterator begin = + std::remove(depList.begin(), depList.end(), dep); + depList.erase(begin, depList.end()); } } -- cgit v0.12 From 60c3bb73e39f7b19a17c989a0f9bf70bbfe73683 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 12 Feb 2015 22:29:11 +0100 Subject: cmGlobalGenerator: Replace loop with algorithm. --- Source/cmGlobalGenerator.cxx | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index c976c69..ac4489a 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -2571,17 +2571,12 @@ bool cmGlobalGenerator::IsReservedTarget(std::string const& name) "test", "RUN_TESTS", "package", "PACKAGE", "package_source", - "ZERO_CHECK", - 0 + "ZERO_CHECK" }; - for(const char** reservedTarget = reservedTargets; - *reservedTarget; ++reservedTarget) - { - if(name == *reservedTarget) return true; - } - - return false; + return std::find(cmArrayBegin(reservedTargets), + cmArrayEnd(reservedTargets), name) + != cmArrayEnd(reservedTargets); } void cmGlobalGenerator::SetExternalMakefileProjectGenerator( -- cgit v0.12 From 76207b0861478318115d65c2e983f4d88c937724 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 9 Feb 2015 19:50:09 +0100 Subject: cmCacheManager: Replace loop with algorithm. --- Source/cmCacheManager.cxx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Source/cmCacheManager.cxx b/Source/cmCacheManager.cxx index 45e92ce..0c77891 100644 --- a/Source/cmCacheManager.cxx +++ b/Source/cmCacheManager.cxx @@ -186,11 +186,7 @@ void cmCacheManager::CleanCMakeFiles(const std::string& path) cmsys::Glob globIt; globIt.FindFiles(glob); std::vector files = globIt.GetFiles(); - for(std::vector::iterator i = files.begin(); - i != files.end(); ++i) - { - cmSystemTools::RemoveFile(*i); - } + std::for_each(files.begin(), files.end(), cmSystemTools::RemoveFile); } bool cmCacheManager::LoadCache(const std::string& path, -- cgit v0.12 From a281809384cc19cc9a7d1726b243020b380b9395 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 12 Feb 2015 20:53:43 +0100 Subject: Use cmJoin where possible. --- Source/cmCoreTryCompile.cxx | 15 +++------------ Source/cmFindBase.cxx | 13 ++----------- Source/cmLocalUnixMakefileGenerator3.cxx | 8 +------- Source/cmcmd.cxx | 24 +++--------------------- 4 files changed, 9 insertions(+), 51 deletions(-) diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index 8e20c14..bcd2d81 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -260,14 +260,10 @@ int cmCoreTryCompile::TryCompileCode(std::vector const& argv) err << "Unknown extension \"" << ext << "\" for file\n" << " " << *si << "\n" << "try_compile() works only for enabled languages. " - << "Currently these are:\n "; + << "Currently these are:\n "; std::vector langs; gg->GetEnabledLanguages(langs); - for(std::vector::iterator l = langs.begin(); - l != langs.end(); ++l) - { - err << " " << *l; - } + err << cmJoin(langs, " "); err << "\nSee project() command to enable other languages."; this->Makefile->IssueMessage(cmake::FATAL_ERROR, err.str()); return -1; @@ -373,12 +369,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector const& argv) // handle any compile flags we need to pass on if (!compileDefs.empty()) { - fprintf(fout, "add_definitions( "); - for (size_t i = 0; i < compileDefs.size(); ++i) - { - fprintf(fout,"%s ",compileDefs[i].c_str()); - } - fprintf(fout, ")\n"); + fprintf(fout, "add_definitions(%s)\n", cmJoin(compileDefs, " ").c_str()); } /* Use a random file name to avoid rapid creation and deletion diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx index 6e55533..fd3aa0b 100644 --- a/Source/cmFindBase.cxx +++ b/Source/cmFindBase.cxx @@ -350,19 +350,10 @@ void cmFindBase::PrintFindStuff() std::cerr << "NoCMakeSystemPath " << this->NoCMakeSystemPath << "\n"; std::cerr << "EnvironmentPath " << this->EnvironmentPath << "\n"; std::cerr << "CMakePathName " << this->CMakePathName << "\n"; - std::cerr << "Names "; - for(unsigned int i =0; i < this->Names.size(); ++i) - { - std::cerr << this->Names[i] << " "; - } - std::cerr << "\n"; + std::cerr << "Names " << cmJoin(this->Names, " ") << "\n"; std::cerr << "\n"; std::cerr << "SearchPathSuffixes "; - for(unsigned int i =0; i < this->SearchPathSuffixes.size(); ++i) - { - std::cerr << this->SearchPathSuffixes[i] << "\n"; - } - std::cerr << "\n"; + std::cerr << cmJoin(this->SearchPathSuffixes, "\n") << "\n"; std::cerr << "SearchPaths\n"; for(std::vector::const_iterator i = this->SearchPaths.begin(); i != this->SearchPaths.end(); ++i) diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index c275e6b..68657ad 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -1330,13 +1330,7 @@ cmLocalUnixMakefileGenerator3 this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE")); fout << "\n" << "# Per-language clean rules from dependency scanning.\n" - << "foreach(lang"; - for(std::set::const_iterator l = languages.begin(); - l != languages.end(); ++l) - { - fout << " " << *l; - } - fout << ")\n" + << "foreach(lang " << cmJoin(languages, " ") << ")\n" << " include(" << this->GetTargetDirectory(target) << "/cmake_clean_${lang}.cmake OPTIONAL)\n" << "endforeach()\n"; diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx index 6a7dc6e..eb637ef 100644 --- a/Source/cmcmd.cxx +++ b/Source/cmcmd.cxx @@ -213,27 +213,14 @@ int cmcmd::ExecuteCMakeCommand(std::vector& args) // Echo string else if (args[1] == "echo" ) { - unsigned int cc; - const char* space = ""; - for ( cc = 2; cc < args.size(); cc ++ ) - { - std::cout << space << args[cc]; - space = " "; - } - std::cout << std::endl; + std::cout << cmJoin(cmRange(args).advance(2), " ") << std::endl; return 0; } // Echo string no new line else if (args[1] == "echo_append" ) { - unsigned int cc; - const char* space = ""; - for ( cc = 2; cc < args.size(); cc ++ ) - { - std::cout << space << args[cc]; - space = " "; - } + std::cout << cmJoin(cmRange(args).advance(2), " "); return 0; } @@ -1329,12 +1316,7 @@ bool cmcmd::RunCommand(const char* comment, if(verbose) { std::cout << comment << ":\n"; - for(std::vector::iterator i = command.begin(); - i != command.end(); ++i) - { - std::cout << *i << " "; - } - std::cout << "\n"; + std::cout << cmJoin(command, " ") << "\n"; } std::string output; int retCode =0; -- cgit v0.12 From 37b88d348a20921c835ce7aa99f6db62271503a7 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 18 Feb 2015 23:50:36 +0100 Subject: cmAlgorithms: Add cmWrap. Port some existing cmJoin to use it. cmJoin is cumbersome to use in cases where the objective is to somehow 'quote' each item and then join it with a separator. In that case, the joiner string is harder to read and reason about. cmWrap aims to solve that. Provide an overload taking char wrappers to simplify the case of surrounding every element in quotes without needing to escape the quote character. --- Source/cmAlgorithms.h | 17 +++++++++++++++++ Source/cmGlobalGenerator.cxx | 11 ++--------- Source/cmLocalUnixMakefileGenerator3.cxx | 7 +------ Source/cmSystemTools.cxx | 2 +- Source/cmcmd.cxx | 4 +--- 5 files changed, 22 insertions(+), 19 deletions(-) diff --git a/Source/cmAlgorithms.h b/Source/cmAlgorithms.h index 8491838..43e113b 100644 --- a/Source/cmAlgorithms.h +++ b/Source/cmAlgorithms.h @@ -278,4 +278,21 @@ typename Range::const_iterator cmRemoveDuplicates(Range& r) return cmRemoveIndices(r, indices); } +template +std::string cmWrap(std::string prefix, Range const& r, std::string suffix, + std::string sep) +{ + if (r.empty()) + { + return std::string(); + } + return prefix + cmJoin(r, (suffix + sep + prefix).c_str()) + suffix; +} + +template +std::string cmWrap(char prefix, Range const& r, char suffix, std::string sep) +{ + return cmWrap(std::string(1, prefix), r, std::string(1, suffix), sep); +} + #endif diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index ac4489a..93692f6 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -2295,15 +2295,8 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets) std::ostringstream ostr; if (!componentsSet->empty()) { - ostr << "Available install components are:"; - std::set::iterator it; - for ( - it = componentsSet->begin(); - it != componentsSet->end(); - ++ it ) - { - ostr << " \"" << *it << "\""; - } + ostr << "Available install components are: "; + ostr << cmWrap('"', *componentsSet, '"', " "); } else { diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index 68657ad..432cb3a 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -724,12 +724,7 @@ cmLocalUnixMakefileGenerator3 } // Write the list of commands. - for(std::vector::const_iterator i = commands.begin(); - i != commands.end(); ++i) - { - replace = *i; - os << "\t" << replace << "\n"; - } + os << cmWrap("\t", commands, "", "\n") << "\n"; if(symbolic && !this->WatcomWMake) { os << ".PHONY : " << cmMakeSafe(tgt) << "\n"; diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index bf496e9..5264123 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -835,7 +835,7 @@ cmSystemTools::PrintSingleCommand(std::vector const& command) return std::string(); } - return "\"" + cmJoin(command, "\" \"") + "\""; + return cmWrap('"', command, '"', " "); } bool cmSystemTools::DoesFileExistWithExtensions( diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx index eb637ef..7d67bd8 100644 --- a/Source/cmcmd.cxx +++ b/Source/cmcmd.cxx @@ -450,9 +450,7 @@ int cmcmd::ExecuteCMakeCommand(std::vector& args) return 1; } - std::string command = "\""; - command += cmJoin(cmRange(args).advance(3), "\" \""); - command += "\""; + std::string command = cmWrap('"', cmRange(args).advance(3), '"', " "); int retval = 0; int timeout = 0; if ( cmSystemTools::RunSingleCommand(command.c_str(), 0, &retval, -- cgit v0.12 From 416df93aa93d0a633f0e7354d0562934f676768b Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 18 Feb 2015 22:14:26 +0100 Subject: Convert some raw loops to cmWrap. --- Source/cmComputeLinkDepends.cxx | 5 +---- Source/cmCoreTryCompile.cxx | 8 +++----- Source/cmFindBase.cxx | 6 +----- Source/cmFindPackageCommand.cxx | 14 +++----------- Source/cmMakefile.cxx | 8 +------- 5 files changed, 9 insertions(+), 32 deletions(-) diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx index 8652690..be28b2f 100644 --- a/Source/cmComputeLinkDepends.cxx +++ b/Source/cmComputeLinkDepends.cxx @@ -705,10 +705,7 @@ void cmComputeLinkDepends::DisplayConstraintGraph() { EdgeList const& nl = this->EntryConstraintGraph[i]; e << "item " << i << " is [" << this->EntryList[i].Item << "]\n"; - for(EdgeList::const_iterator j = nl.begin(); j != nl.end(); ++j) - { - e << " item " << *j << " must follow it\n"; - } + e << cmWrap(" item ", nl, " must follow it", "\n") << "\n"; } fprintf(stderr, "%s\n", e.str().c_str()); } diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index bcd2d81..e9390e4 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -683,11 +683,9 @@ void cmCoreTryCompile::FindOutputFile(const std::string& targetName) std::ostringstream emsg; emsg << "Unable to find the executable at any of:\n"; - for (unsigned int i = 0; i < searchDirs.size(); ++i) - { - emsg << " " << this->BinaryDirectory << searchDirs[i] - << tmpOutputFile << "\n"; - } + emsg << cmWrap(" " + this->BinaryDirectory, + searchDirs, + tmpOutputFile, "\n") << "\n"; this->FindErrorMessage = emsg.str(); return; } diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx index fd3aa0b..6fe055a 100644 --- a/Source/cmFindBase.cxx +++ b/Source/cmFindBase.cxx @@ -355,11 +355,7 @@ void cmFindBase::PrintFindStuff() std::cerr << "SearchPathSuffixes "; std::cerr << cmJoin(this->SearchPathSuffixes, "\n") << "\n"; std::cerr << "SearchPaths\n"; - for(std::vector::const_iterator i = this->SearchPaths.begin(); - i != this->SearchPaths.end(); ++i) - { - std::cerr << "[" << *i << "]\n"; - } + std::cerr << cmWrap("[", this->SearchPaths, "]", "\n") << "\n"; } bool cmFindBase::CheckForVariableInCache() diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index fd9b236..26bd4b9 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -329,10 +329,7 @@ bool cmFindPackageCommand { std::ostringstream e; e << "called with components that are both required and optional:\n"; - for(unsigned int i=0; iSetError(e.str()); return false; } @@ -808,13 +805,8 @@ bool cmFindPackageCommand::HandlePackageMode() { e << "Could not find a package configuration file provided by \"" << this->Name << "\"" << requestedVersionString - << " with any of the following names:\n"; - for(std::vector::const_iterator ci = - this->Configs.begin(); - ci != this->Configs.end(); ++ci) - { - e << " " << *ci << "\n"; - } + << " with any of the following names:\n" + << cmWrap(" ", this->Configs, "", "\n") << "\n"; } e << "Add the installation prefix of \"" << this->Name << "\" to " diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 6fd569e..3c92fca 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -213,13 +213,7 @@ cmMakefile::~cmMakefile() void cmMakefile::PrintStringVector(const char* s, const std::vector& v) const { - std::cout << s << ": ( \n"; - for(std::vector::const_iterator i = v.begin(); - i != v.end(); ++i) - { - std::cout << *i << " "; - } - std::cout << " )\n"; + std::cout << s << ": ( \n" << cmWrap('"', v, '"', " ") << ")\n"; } void cmMakefile -- cgit v0.12 From 21b0654ace2ce58d191c2e42a8583b05614cd037 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 18 Feb 2015 23:29:18 +0100 Subject: cmGlobalGenerator: Convert set insert algorithm to vector algorithms. Adjust test for new error output. --- Source/cmGlobalGenerator.cxx | 26 ++++++++++++++-------- .../File_Generate/CommandConflict-stderr.txt | 2 +- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 93692f6..6147009 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -3015,7 +3015,7 @@ void cmGlobalGenerator::AddEvaluationFile(const std::string &inputFile, //---------------------------------------------------------------------------- void cmGlobalGenerator::ProcessEvaluationFiles() { - std::set generatedFiles; + std::vector generatedFiles; for(std::vector::const_iterator li = this->EvaluationFiles.begin(); li != this->EvaluationFiles.end(); @@ -3027,16 +3027,24 @@ void cmGlobalGenerator::ProcessEvaluationFiles() return; } std::vector files = (*li)->GetFiles(); - for(std::vector::const_iterator fi = files.begin(); - fi != files.end(); ++fi) + std::sort(files.begin(), files.end()); + + std::vector intersection; + std::set_intersection(files.begin(), files.end(), + generatedFiles.begin(), generatedFiles.end(), + std::back_inserter(intersection)); + if (!intersection.empty()) { - if (!generatedFiles.insert(*fi).second) - { - cmSystemTools::Error("File to be generated by multiple different " - "commands: ", fi->c_str()); - return; - } + cmSystemTools::Error("Files to be generated by multiple different " + "commands: ", cmWrap('"', intersection, '"', " ").c_str()); + return; } + + generatedFiles.insert(generatedFiles.end(), + files.begin(), files.end()); + std::vector::iterator newIt = + generatedFiles.end() - files.size(); + std::inplace_merge(generatedFiles.begin(), newIt, generatedFiles.end()); } } diff --git a/Tests/RunCMake/File_Generate/CommandConflict-stderr.txt b/Tests/RunCMake/File_Generate/CommandConflict-stderr.txt index da97ba4..4fa3f20 100644 --- a/Tests/RunCMake/File_Generate/CommandConflict-stderr.txt +++ b/Tests/RunCMake/File_Generate/CommandConflict-stderr.txt @@ -1 +1 @@ -CMake Error: File to be generated by multiple different commands: .*CommandConflict-build/output_.*.txt +CMake Error: Files to be generated by multiple different commands: ".*CommandConflict-build/output_.*.txt" -- cgit v0.12 From dfe49c205654a51f860507ea5d8ad133b2a4f064 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 11 Feb 2015 23:43:55 +0100 Subject: cmRST: Use std::min where appropriate. --- Source/cmRST.cxx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Source/cmRST.cxx b/Source/cmRST.cxx index d20d999..da72ab7 100644 --- a/Source/cmRST.cxx +++ b/Source/cmRST.cxx @@ -463,10 +463,7 @@ void cmRST::UnindentLines(std::vector& lines) } // Truncate indentation to match that on this line. - if(line.size() < indentEnd) - { - indentEnd = line.size(); - } + indentEnd = std::min(indentEnd, line.size()); for(std::string::size_type j = 0; j != indentEnd; ++j) { if(line[j] != indentText[j]) -- cgit v0.12 From 8ed6ecac3fb0f832333e2d5d6f3551ab8e335d0f Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 30 Jan 2015 00:01:06 +0100 Subject: cmRST: Move two algorithms beside each other. --- Source/cmRST.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/cmRST.cxx b/Source/cmRST.cxx index da72ab7..14e8ad9 100644 --- a/Source/cmRST.cxx +++ b/Source/cmRST.cxx @@ -490,7 +490,6 @@ void cmRST::UnindentLines(std::vector& lines) { ++leadingEmpty; } - lines.erase(lines.begin(), lines.begin()+leadingEmpty); // Drop trailing blank lines. size_t trailingEmpty = 0; @@ -498,5 +497,6 @@ void cmRST::UnindentLines(std::vector& lines) { ++trailingEmpty; } + lines.erase(lines.begin(), lines.begin()+leadingEmpty); lines.erase(lines.end()-trailingEmpty, lines.end()); } -- cgit v0.12 From 09d6125bfe4034f332956f4bcc5b0a1ba0b82e27 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 15 Feb 2015 23:39:38 +0100 Subject: cmAlgorithms: Move cmRotate out of 'implementation detail' namespace. This should be generally usable in cmake. --- Source/cmAlgorithms.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Source/cmAlgorithms.h b/Source/cmAlgorithms.h index 43e113b..30a062a 100644 --- a/Source/cmAlgorithms.h +++ b/Source/cmAlgorithms.h @@ -81,6 +81,16 @@ private: const std::string m_test; }; +template +BiDirIt cmRotate(BiDirIt first, BiDirIt middle, BiDirIt last) +{ + typename std::iterator_traits::difference_type dist = + std::distance(first, middle); + std::rotate(first, middle, last); + std::advance(last, -dist); + return last; +} + namespace ContainerAlgorithms { template @@ -138,20 +148,10 @@ private: const_iterator End; }; -template -BiDirIt Rotate(BiDirIt first, BiDirIt middle, BiDirIt last) -{ - typename std::iterator_traits::difference_type dist = - std::distance(first, middle); - std::rotate(first, middle, last); - std::advance(last, -dist); - return last; -} - template Iter RemoveN(Iter i1, Iter i2, size_t n) { - return ContainerAlgorithms::Rotate(i1, i1 + n, i2); + return cmRotate(i1, i1 + n, i2); } template -- cgit v0.12 From 61fe1919de8c0455a6baff543ccfcb35fce8f37b Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 17 Feb 2015 21:59:26 +0100 Subject: cmAlgorithms: Update concept requirement to FowardIterator --- Source/cmAlgorithms.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/cmAlgorithms.h b/Source/cmAlgorithms.h index 30a062a..53e2dc8 100644 --- a/Source/cmAlgorithms.h +++ b/Source/cmAlgorithms.h @@ -81,14 +81,14 @@ private: const std::string m_test; }; -template -BiDirIt cmRotate(BiDirIt first, BiDirIt middle, BiDirIt last) +template +FwdIt cmRotate(FwdIt first, FwdIt middle, FwdIt last) { - typename std::iterator_traits::difference_type dist = - std::distance(first, middle); + typename std::iterator_traits::difference_type dist = + std::distance(middle, last); std::rotate(first, middle, last); - std::advance(last, -dist); - return last; + std::advance(first, dist); + return first; } namespace ContainerAlgorithms { -- cgit v0.12 From 8c74a41ff3b6fce1bb7d088d16f5e0a9ae8ab55d Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 30 Jan 2015 00:03:24 +0100 Subject: cmRST: Replace two erase with a rotate and larger erase. --- Source/cmRST.cxx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/cmRST.cxx b/Source/cmRST.cxx index 14e8ad9..c261d57 100644 --- a/Source/cmRST.cxx +++ b/Source/cmRST.cxx @@ -497,6 +497,10 @@ void cmRST::UnindentLines(std::vector& lines) { ++trailingEmpty; } - lines.erase(lines.begin(), lines.begin()+leadingEmpty); - lines.erase(lines.end()-trailingEmpty, lines.end()); + + std::vector::iterator contentEnd + = cmRotate(lines.begin(), + lines.begin() + leadingEmpty, + lines.end() - trailingEmpty); + lines.erase(contentEnd, lines.end()); } -- cgit v0.12 From a3a0a8c222b59f15502f52192bf41c4af2882392 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 11 Feb 2015 23:53:41 +0100 Subject: cmAlgorithms: Add cmFindNot algorithm. --- Source/cmAlgorithms.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/cmAlgorithms.h b/Source/cmAlgorithms.h index 53e2dc8..d88de1e 100644 --- a/Source/cmAlgorithms.h +++ b/Source/cmAlgorithms.h @@ -295,4 +295,11 @@ std::string cmWrap(char prefix, Range const& r, char suffix, std::string sep) return cmWrap(std::string(1, prefix), r, std::string(1, suffix), sep); } +template +typename Range::const_iterator cmFindNot(Range const& r, T const& t) +{ + return std::find_if(r.begin(), r.end(), + std::bind1st(std::not_equal_to(), t)); +} + #endif -- cgit v0.12 From 4afe6c26c66556827e6089982c49b8dea3a2efcb Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 17 Feb 2015 22:04:25 +0100 Subject: cmAlgorithms: Add cmReverseRange adaptor. Use it to implement list(REVERSE). --- Source/cmAlgorithms.h | 8 ++++++++ Source/cmListCommand.cxx | 3 +-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/cmAlgorithms.h b/Source/cmAlgorithms.h index d88de1e..b9bd67b 100644 --- a/Source/cmAlgorithms.h +++ b/Source/cmAlgorithms.h @@ -302,4 +302,12 @@ typename Range::const_iterator cmFindNot(Range const& r, T const& t) std::bind1st(std::not_equal_to(), t)); } +template +ContainerAlgorithms::Range +cmReverseRange(Range const& range) +{ + return ContainerAlgorithms::Range( + range.rbegin(), range.rend()); +} + #endif diff --git a/Source/cmListCommand.cxx b/Source/cmListCommand.cxx index 0c6adfd..17617aa 100644 --- a/Source/cmListCommand.cxx +++ b/Source/cmListCommand.cxx @@ -390,8 +390,7 @@ bool cmListCommand return false; } - std::reverse(varArgsExpanded.begin(), varArgsExpanded.end()); - std::string value = cmJoin(varArgsExpanded, ";"); + std::string value = cmJoin(cmReverseRange(varArgsExpanded), ";"); this->Makefile->AddDefinition(listName, value.c_str()); return true; -- cgit v0.12 From bb9d71b4fee2cc4abf55e0dcbadf85c6cbe0d07d Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 2 Feb 2015 02:13:54 +0100 Subject: Replace loops with algorithms. --- Source/cmRST.cxx | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/Source/cmRST.cxx b/Source/cmRST.cxx index c261d57..cb61ed9 100644 --- a/Source/cmRST.cxx +++ b/Source/cmRST.cxx @@ -484,19 +484,12 @@ void cmRST::UnindentLines(std::vector& lines) } } - // Drop leading blank lines. - size_t leadingEmpty = 0; - for(size_t i = 0; i < lines.size() && lines[i].empty(); ++i) - { - ++leadingEmpty; - } + std::vector::const_iterator it = lines.begin(); + size_t leadingEmpty = std::distance(it, cmFindNot(lines, std::string())); - // Drop trailing blank lines. - size_t trailingEmpty = 0; - for(size_t i = lines.size(); i > 0 && lines[i-1].empty(); --i) - { - ++trailingEmpty; - } + std::vector::const_reverse_iterator rit = lines.rbegin(); + size_t trailingEmpty = std::distance(rit, + cmFindNot(cmReverseRange(lines), std::string())); std::vector::iterator contentEnd = cmRotate(lines.begin(), -- cgit v0.12