diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2017-01-27 20:09:40 -0800 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2017-01-30 21:52:42 -0800 |
| commit | 0f0698dc18ec162666ed92b4ac181e512b439b83 (patch) | |
| tree | ab19e1de3c1a9291a2db4f0fe6db517f91cfaf3f /toolsrc/src | |
| parent | 4059d4a6b9f9467ff5c58594f7304eef7ba79664 (diff) | |
| download | vcpkg-0f0698dc18ec162666ed92b4ac181e512b439b83.tar.gz vcpkg-0f0698dc18ec162666ed92b4ac181e512b439b83.zip | |
Introduce Strings::Joiner
Diffstat (limited to 'toolsrc/src')
| -rw-r--r-- | toolsrc/src/SourceParagraph.cpp | 4 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg_Strings.cpp | 41 |
2 files changed, 29 insertions, 16 deletions
diff --git a/toolsrc/src/SourceParagraph.cpp b/toolsrc/src/SourceParagraph.cpp index eef4a4734..8bfe8e84d 100644 --- a/toolsrc/src/SourceParagraph.cpp +++ b/toolsrc/src/SourceParagraph.cpp @@ -53,8 +53,8 @@ namespace vcpkg const std::vector<std::string> remaining_fields = Maps::extract_keys(fields); const std::vector<std::string>& valid_fields = get_list_of_valid_fields(); - const std::string remaining_fields_as_string = Strings::join(remaining_fields, "\n "); - const std::string valid_fields_as_string = Strings::join(valid_fields, "\n "); + const std::string remaining_fields_as_string = Strings::Joiner::on("\n ").join(remaining_fields); + const std::string valid_fields_as_string = Strings::Joiner::on("\n ").join(valid_fields); System::println(System::color::error, "Error: There are invalid fields in the Source Paragraph of %s", this->name); System::println("The following fields were not expected:\n\n %s\n\n", remaining_fields_as_string); diff --git a/toolsrc/src/vcpkg_Strings.cpp b/toolsrc/src/vcpkg_Strings.cpp index 5b6d9967c..3b9d6a859 100644 --- a/toolsrc/src/vcpkg_Strings.cpp +++ b/toolsrc/src/vcpkg_Strings.cpp @@ -67,25 +67,38 @@ namespace vcpkg::Strings return output; } - std::string join(const std::vector<std::string>& v, const std::string& delimiter) + std::string join(const std::vector<std::string>& v, const std::string& prefix, const std::string& delimiter, const std::string& suffix) { - if (v.empty()) + return join(v, prefix, delimiter, suffix, [](const std::string& i) -> std::string { - return std::string(); - } + return i; + }); + } - std::string output; - size_t size = v.size(); + Joiner Joiner::on(const std::string& delimiter) + { + return Joiner(delimiter); + } - output.append(v.at(0)); + Joiner& Joiner::prefix(const std::string& prefix) + { + this->m_prefix = prefix; + return *this; + } - for (size_t i = 1; i < size; ++i) - { - output.append(delimiter); - output.append(v.at(i)); - } + Joiner& Joiner::suffix(const std::string& suffix) + { + this->m_suffix = suffix; + return *this; + } - return output; + std::string Joiner::join(const std::vector<std::string>& v) const + { + return Strings::join(v, this->m_prefix, this->m_delimiter, this->m_suffix); + } + + Joiner::Joiner(const std::string& delimiter) : m_prefix(""), m_delimiter(delimiter), m_suffix("") + { } void trim(std::string* s) @@ -119,7 +132,7 @@ namespace vcpkg::Strings std::vector<std::string> output; size_t i = 0; - for (size_t pos = s.find(delimiter); pos != std::string::npos; pos = s.find(delimiter, pos)) + for (size_t pos = s.find(delimiter); pos != std::string::npos; pos = s.find(delimiter, pos)) { output.push_back(s.substr(i, pos - i)); i = ++pos; |
