diff options
author | Brad King <brad.king@kitware.com> | 2015-01-12 14:41:02 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2015-01-12 14:41:02 (GMT) |
commit | dd6c596c12070c0fdc71cb11ac154e99111fb6e0 (patch) | |
tree | 27fc1aa3fb5d409e619f590ede5fee3bf477f925 /Source | |
parent | d9a6ea4599eb3b736b4e695a9ffd5d8a51eac059 (diff) | |
parent | 55a73e6b1f70b3c8a783b130dff4c4689cea5ba2 (diff) | |
download | CMake-dd6c596c12070c0fdc71cb11ac154e99111fb6e0.zip CMake-dd6c596c12070c0fdc71cb11ac154e99111fb6e0.tar.gz CMake-dd6c596c12070c0fdc71cb11ac154e99111fb6e0.tar.bz2 |
Merge topic 'join-algorithm'
55a73e6b Use the cmJoin algorithm where possible.
8dc8d756 cmStandardIncludes: Add a join algorithm for string containers.
b5813cee cmInstallCommand: Remove unused variable.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmComputeLinkInformation.cxx | 26 | ||||
-rw-r--r-- | Source/cmGeneratorExpressionEvaluator.cxx | 11 | ||||
-rw-r--r-- | Source/cmInstallCommand.cxx | 15 | ||||
-rw-r--r-- | Source/cmListCommand.cxx | 30 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 12 | ||||
-rw-r--r-- | Source/cmQtAutoGenerators.cxx | 44 | ||||
-rw-r--r-- | Source/cmRST.cxx | 9 | ||||
-rw-r--r-- | Source/cmStandardIncludes.h | 27 | ||||
-rw-r--r-- | Source/cmSystemTools.cxx | 18 | ||||
-rw-r--r-- | Source/cmTarget.cxx | 31 | ||||
-rw-r--r-- | Source/cmTargetCompileFeaturesCommand.cxx | 10 | ||||
-rw-r--r-- | Source/cmTargetCompileOptionsCommand.cxx | 10 | ||||
-rw-r--r-- | Source/cmTargetIncludeDirectoriesCommand.cxx | 10 | ||||
-rw-r--r-- | Source/cmTargetSourcesCommand.cxx | 10 | ||||
-rw-r--r-- | Source/cmake.cxx | 9 |
15 files changed, 56 insertions, 216 deletions
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx index 5cadaa6..479da75 100644 --- a/Source/cmComputeLinkInformation.cxx +++ b/Source/cmComputeLinkInformation.cxx @@ -444,18 +444,7 @@ std::string cmComputeLinkInformation::GetRPathLinkString() } // Construct the linker runtime search path. - std::string rpath_link; - const char* sep = ""; - std::vector<std::string> const& dirs = - this->OrderDependentRPath->GetOrderedDirectories(); - for(std::vector<std::string>::const_iterator di = dirs.begin(); - di != dirs.end(); ++di) - { - rpath_link += sep; - sep = ":"; - rpath_link += *di; - } - return rpath_link; + return cmJoin(this->OrderDependentRPath->GetOrderedDirectories(), ":"); } //---------------------------------------------------------------------------- @@ -1988,18 +1977,7 @@ std::string cmComputeLinkInformation::GetRPathString(bool for_install) this->GetRPath(runtimeDirs, for_install); // Concatenate the paths. - std::string rpath; - const char* sep = ""; - for(std::vector<std::string>::const_iterator ri = runtimeDirs.begin(); - ri != runtimeDirs.end(); ++ri) - { - // Separate from previous path. - rpath += sep; - sep = this->GetRuntimeSep().c_str(); - - // Add this path. - rpath += *ri; - } + std::string rpath = cmJoin(runtimeDirs, this->GetRuntimeSep()); // If the rpath will be replaced at install time, prepare space. if(!for_install && this->RuntimeUseChrpath) diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index 2975c43..2f17915 100644 --- a/Source/cmGeneratorExpressionEvaluator.cxx +++ b/Source/cmGeneratorExpressionEvaluator.cxx @@ -803,18 +803,9 @@ static const struct JoinNode : public cmGeneratorExpressionNode const GeneratorExpressionContent *, cmGeneratorExpressionDAGChecker *) const { - std::string result; - std::vector<std::string> list; cmSystemTools::ExpandListArgument(parameters.front(), list); - std::string sep; - for(std::vector<std::string>::const_iterator li = list.begin(); - li != list.end(); ++li) - { - result += sep + *li; - sep = parameters[1]; - } - return result; + return cmJoin(list, parameters[1]); } } joinNode; diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx index c30cf85..2d7d7cc 100644 --- a/Source/cmInstallCommand.cxx +++ b/Source/cmInstallCommand.cxx @@ -777,19 +777,8 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args) this->Makefile->GetLocalGenerator()->GetGlobalGenerator() ->GetExportSets()[exports.GetString()]->AddTargetExport(te); - std::vector<std::string> dirs = includesArgs.GetIncludeDirs(); - if(!dirs.empty()) - { - std::string dirString; - const char *sep = ""; - for (std::vector<std::string>::const_iterator it = dirs.begin(); - it != dirs.end(); ++it) - { - te->InterfaceIncludeDirectories += sep; - te->InterfaceIncludeDirectories += *it; - sep = ";"; - } - } + te->InterfaceIncludeDirectories = + cmJoin(includesArgs.GetIncludeDirs(), ";"); } } diff --git a/Source/cmListCommand.cxx b/Source/cmListCommand.cxx index 47b8be5..c3f0f57 100644 --- a/Source/cmListCommand.cxx +++ b/Source/cmListCommand.cxx @@ -353,15 +353,7 @@ bool cmListCommand::HandleInsertCommand(std::vector<std::string> const& args) cnt ++; } - std::string value; - const char* sep = ""; - for ( cc = 0; cc < varArgsExpanded.size(); cc ++ ) - { - value += sep; - value += varArgsExpanded[cc]; - sep = ";"; - } - + std::string value = cmJoin(varArgsExpanded, ";"); this->Makefile->AddDefinition(listName, value.c_str()); return true; } @@ -402,15 +394,8 @@ bool cmListCommand } } - std::string value; - const char* sep = ""; - for ( cc = 0; cc < varArgsExpanded.size(); cc ++ ) - { - value += sep; - value += varArgsExpanded[cc]; - sep = ";"; - } + std::string value = cmJoin(varArgsExpanded, ";"); this->Makefile->AddDefinition(listName, value.c_str()); return true; } @@ -518,16 +503,7 @@ bool cmListCommand std::sort(varArgsExpanded.begin(), varArgsExpanded.end()); - std::string value; - std::vector<std::string>::iterator it; - const char* sep = ""; - for ( it = varArgsExpanded.begin(); it != varArgsExpanded.end(); ++ it ) - { - value += sep; - value += it->c_str(); - sep = ";"; - } - + std::string value = cmJoin(varArgsExpanded, ";"); this->Makefile->AddDefinition(listName, value.c_str()); return true; } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index fae32a4..d188331 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1791,22 +1791,12 @@ void cmMakefile::AddIncludeDirectories(const std::vector<std::string> &incs, return; } - std::string incString; - std::string sep; - - for(std::vector<std::string>::const_iterator li = incs.begin(); - li != incs.end(); ++li) - { - incString += sep + *li; - sep = ";"; - } - std::vector<cmValueWithOrigin>::iterator position = before ? this->IncludeDirectoriesEntries.begin() : this->IncludeDirectoriesEntries.end(); cmListFileBacktrace lfbt = this->GetBacktrace(); - cmValueWithOrigin entry(incString, lfbt); + cmValueWithOrigin entry(cmJoin(incs, ";"), lfbt); this->IncludeDirectoriesEntries.insert(position, entry); // Property on each target: diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx index ded85c3..bf79066 100644 --- a/Source/cmQtAutoGenerators.cxx +++ b/Source/cmQtAutoGenerators.cxx @@ -224,16 +224,7 @@ std::string cmQtAutoGenerators::ListQt5RccInputs(cmSourceFile* sf, } } depends.insert(depends.end(), qrcEntries.begin(), qrcEntries.end()); - std::string entriesList; - const char* sep = ""; - for(std::vector<std::string>::const_iterator it = qrcEntries.begin(); - it != qrcEntries.end(); ++it) - { - entriesList += sep; - entriesList += *it; - sep = "@list_sep@"; - } - return entriesList; + return cmJoin(qrcEntries, "@list_sep@"); } std::string cmQtAutoGenerators::ListQt4RccInputs(cmSourceFile* sf, @@ -512,29 +503,13 @@ static void GetCompileDefinitionsAndDirectories(cmTarget const* target, // Get the include dirs for this target, without stripping the implicit // include dirs off, see http://public.kitware.com/Bug/view.php?id=13667 localGen->GetIncludeDirectories(includeDirs, gtgt, "CXX", config, false); - const char* sep = ""; - incs = ""; - for(std::vector<std::string>::const_iterator incDirIt = includeDirs.begin(); - incDirIt != includeDirs.end(); - ++incDirIt) - { - incs += sep; - sep = ";"; - incs += *incDirIt; - } + + incs = cmJoin(includeDirs, ";"); std::set<std::string> defines; localGen->AddCompileDefinitions(defines, target, config); - sep = ""; - for(std::set<std::string>::const_iterator defIt = defines.begin(); - defIt != defines.end(); - ++defIt) - { - defs += sep; - sep = ";"; - defs += *defIt; - } + defs += cmJoin(defines, ";"); } void cmQtAutoGenerators::SetupAutoGenerateTarget(cmTarget const* target) @@ -879,16 +854,7 @@ static void GetUicOpts(cmTarget const* target, const std::string& config, { std::vector<std::string> opts; target->GetAutoUicOptions(opts, config); - - const char* sep = ""; - for(std::vector<std::string>::const_iterator optIt = opts.begin(); - optIt != opts.end(); - ++optIt) - { - optString += sep; - sep = ";"; - optString += *optIt; - } + optString = cmJoin(opts, ";"); } void cmQtAutoGenerators::SetupAutoUicTarget(cmTarget const* target, diff --git a/Source/cmRST.cxx b/Source/cmRST.cxx index cca995b..f4607c6 100644 --- a/Source/cmRST.cxx +++ b/Source/cmRST.cxx @@ -417,14 +417,7 @@ void cmRST::ProcessDirectiveReplace() { // Record markup lines as replacement text. std::string& replacement = this->Replace[this->ReplaceName]; - const char* sep = ""; - for(std::vector<std::string>::iterator i = this->MarkupLines.begin(); - i != this->MarkupLines.end(); ++i) - { - replacement += sep; - replacement += *i; - sep = " "; - } + replacement += cmJoin(this->MarkupLines, " "); this->ReplaceName = ""; } diff --git a/Source/cmStandardIncludes.h b/Source/cmStandardIncludes.h index f50771f..2d988c9 100644 --- a/Source/cmStandardIncludes.h +++ b/Source/cmStandardIncludes.h @@ -143,6 +143,33 @@ static thisClass* SafeDownCast(cmObject *c) \ } \ class cmTypeMacro_UseTrailingSemicolon +template<typename Range> +std::string cmJoin(Range const& r, const char* delimiter) +{ + if (r.empty()) + { + return std::string(); + } + std::ostringstream os; + typedef typename Range::value_type ValueType; + typedef typename Range::const_iterator InputIt; + InputIt first = r.begin(); + InputIt last = r.end(); + --last; + std::copy(first, last, + std::ostream_iterator<ValueType>(os, delimiter)); + + os << *last; + + return os.str(); +} + +template<typename Range> +std::string cmJoin(Range const& r, std::string delimiter) +{ + return cmJoin(r, delimiter.c_str()); +}; + inline bool cmHasLiteralPrefixImpl(const std::string &str1, const char *str2, size_t N) diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index eea4986..c769154 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -824,18 +824,12 @@ bool cmSystemTools::RunSingleCommand( std::string cmSystemTools::PrintSingleCommand(std::vector<std::string> const& command) { - std::string commandStr; - const char* sep = ""; - for(std::vector<std::string>::const_iterator i = command.begin(); - i != command.end(); ++i) - { - commandStr += sep; - commandStr += "\""; - commandStr += *i; - commandStr += "\""; - sep = " "; - } - return commandStr; + if (command.empty()) + { + return std::string(); + } + + return "\"" + cmJoin(command, "\" \"") + "\""; } bool cmSystemTools::DoesFileExistWithExtensions( diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index c7b2715..b138f0a 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -919,16 +919,7 @@ void cmTarget::GetSourceFiles(std::vector<cmSourceFile*> &files, //---------------------------------------------------------------------------- void cmTarget::AddTracedSources(std::vector<std::string> const& srcs) { - std::string srcFiles; - const char* sep = ""; - for(std::vector<std::string>::const_iterator i = srcs.begin(); - i != srcs.end(); ++i) - { - std::string filename = *i; - srcFiles += sep; - srcFiles += filename; - sep = ";"; - } + std::string srcFiles = cmJoin(srcs, ";"); if (!srcFiles.empty()) { this->Internal->SourceFilesMap.clear(); @@ -6076,24 +6067,8 @@ cmTargetInternals::ComputeLinkInterfaceLibraries( } if (ifaceLibs != iface.Libraries) { - std::string oldLibraries; - std::string newLibraries; - const char *sep = ""; - for(std::vector<cmLinkImplItem>::const_iterator it - = impl->Libraries.begin(); it != impl->Libraries.end(); ++it) - { - oldLibraries += sep; - oldLibraries += *it; - sep = ";"; - } - sep = ""; - for(std::vector<cmLinkItem>::const_iterator it - = ifaceLibs.begin(); it != ifaceLibs.end(); ++it) - { - newLibraries += sep; - newLibraries += *it; - sep = ";"; - } + std::string oldLibraries = cmJoin(impl->Libraries, ";"); + std::string newLibraries = cmJoin(ifaceLibs, ";"); if(oldLibraries.empty()) { oldLibraries = "(empty)"; } if(newLibraries.empty()) diff --git a/Source/cmTargetCompileFeaturesCommand.cxx b/Source/cmTargetCompileFeaturesCommand.cxx index 15a9a38..6ebc31e 100644 --- a/Source/cmTargetCompileFeaturesCommand.cxx +++ b/Source/cmTargetCompileFeaturesCommand.cxx @@ -40,15 +40,7 @@ void cmTargetCompileFeaturesCommand std::string cmTargetCompileFeaturesCommand ::Join(const std::vector<std::string> &content) { - std::string defs; - std::string sep; - for(std::vector<std::string>::const_iterator it = content.begin(); - it != content.end(); ++it) - { - defs += sep + *it; - sep = ";"; - } - return defs; + return cmJoin(content, ";"); } //---------------------------------------------------------------------------- diff --git a/Source/cmTargetCompileOptionsCommand.cxx b/Source/cmTargetCompileOptionsCommand.cxx index e16468b..8c6fc06 100644 --- a/Source/cmTargetCompileOptionsCommand.cxx +++ b/Source/cmTargetCompileOptionsCommand.cxx @@ -39,15 +39,7 @@ void cmTargetCompileOptionsCommand std::string cmTargetCompileOptionsCommand ::Join(const std::vector<std::string> &content) { - std::string defs; - std::string sep; - for(std::vector<std::string>::const_iterator it = content.begin(); - it != content.end(); ++it) - { - defs += sep + *it; - sep = ";"; - } - return defs; + return cmJoin(content, ";"); } //---------------------------------------------------------------------------- diff --git a/Source/cmTargetIncludeDirectoriesCommand.cxx b/Source/cmTargetIncludeDirectoriesCommand.cxx index 6dc58b1..b638e57 100644 --- a/Source/cmTargetIncludeDirectoriesCommand.cxx +++ b/Source/cmTargetIncludeDirectoriesCommand.cxx @@ -91,15 +91,7 @@ void cmTargetIncludeDirectoriesCommand if (system) { - std::string joined; - std::string sep; - for(std::vector<std::string>::const_iterator it = content.begin(); - it != content.end(); ++it) - { - joined += sep; - sep = ";"; - joined += *it; - } + std::string joined = cmJoin(content, ";"); tgt->AppendProperty("INTERFACE_SYSTEM_INCLUDE_DIRECTORIES", joined.c_str()); } diff --git a/Source/cmTargetSourcesCommand.cxx b/Source/cmTargetSourcesCommand.cxx index 5153926..0a44d6f 100644 --- a/Source/cmTargetSourcesCommand.cxx +++ b/Source/cmTargetSourcesCommand.cxx @@ -44,15 +44,7 @@ void cmTargetSourcesCommand std::string cmTargetSourcesCommand ::Join(const std::vector<std::string> &content) { - std::string srcs; - std::string sep; - for(std::vector<std::string>::const_iterator it = content.begin(); - it != content.end(); ++it) - { - srcs += sep + *it; - sep = ";"; - } - return srcs; + return cmJoin(content, ";"); } //---------------------------------------------------------------------------- diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 5edb7dd..5e48157 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -2320,14 +2320,7 @@ const char *cmake::GetProperty(const std::string& prop, { std::vector<std::string> enLangs; this->GlobalGenerator->GetEnabledLanguages(enLangs); - const char* sep = ""; - for(std::vector<std::string>::iterator i = enLangs.begin(); - i != enLangs.end(); ++i) - { - lang += sep; - sep = ";"; - lang += *i; - } + lang = cmJoin(enLangs, ";"); } this->SetProperty("ENABLED_LANGUAGES", lang.c_str()); } |