aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2017-01-27 20:09:40 -0800
committerAlexander Karatarakis <alkarata@microsoft.com>2017-01-30 21:52:42 -0800
commit0f0698dc18ec162666ed92b4ac181e512b439b83 (patch)
treeab19e1de3c1a9291a2db4f0fe6db517f91cfaf3f /toolsrc/src
parent4059d4a6b9f9467ff5c58594f7304eef7ba79664 (diff)
downloadvcpkg-0f0698dc18ec162666ed92b4ac181e512b439b83.tar.gz
vcpkg-0f0698dc18ec162666ed92b4ac181e512b439b83.zip
Introduce Strings::Joiner
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/SourceParagraph.cpp4
-rw-r--r--toolsrc/src/vcpkg_Strings.cpp41
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;