Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Unified Diff: base/strings/string_util.cc

Issue 2691193002: Added StringPiece overloads for base::JoinString. (Closed)
Patch Set: Document why we have an explicit initializer_list overload. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/strings/string_util.h ('k') | base/strings/string_util_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/strings/string_util.cc
diff --git a/base/strings/string_util.cc b/base/strings/string_util.cc
index cb668ed7fff4f60f76291a0a19d478fb9faaacd5..4c7f69493443c99424eb8481443ea3bff303cc45 100644
--- a/base/strings/string_util.cc
+++ b/base/strings/string_util.cc
@@ -853,7 +853,7 @@ char16* WriteInto(string16* str, size_t length_with_null) {
return WriteIntoT(str, length_with_null);
}
-template<typename STR>
+template <typename STR>
static STR JoinStringT(const std::vector<STR>& parts,
BasicStringPiece<STR> sep) {
if (parts.empty())
@@ -871,6 +871,43 @@ static STR JoinStringT(const std::vector<STR>& parts,
return result;
}
+template <typename STR>
+static STR JoinStringPieceT(const std::vector<BasicStringPiece<STR>>& parts,
+ BasicStringPiece<STR> sep) {
+ if (parts.empty())
+ return STR();
+
+ STR result(parts[0].data(), parts[0].size());
+ auto iter = parts.begin();
+ ++iter;
+
+ for (; iter != parts.end(); ++iter) {
+ sep.AppendToString(&result);
+ iter->AppendToString(&result);
+ }
+
+ return result;
+}
+
+template <typename STR>
+static STR JoinStringPieceT(
+ const std::initializer_list<BasicStringPiece<STR>>& parts,
Matt Giuca 2017/02/17 09:51:22 Upon further thought, I can probably template this
Matt Giuca 2017/02/20 23:55:41 Done. I managed to combine all 3 into one version
danakj 2017/02/21 23:47:15 I would say let's avoid temporary objects. You cou
Matt Giuca 2017/02/22 00:10:15 What temporary object do you mean? (Are you saying
Matt Giuca 2017/02/22 06:20:13 Done.
+ BasicStringPiece<STR> sep) {
+ if (parts.size() == 0)
+ return STR();
+
+ auto iter = parts.begin();
+ STR result(iter->data(), iter->size());
+ ++iter;
+
+ for (; iter != parts.end(); ++iter) {
+ sep.AppendToString(&result);
+ iter->AppendToString(&result);
+ }
+
+ return result;
+}
+
std::string JoinString(const std::vector<std::string>& parts,
StringPiece separator) {
return JoinStringT(parts, separator);
@@ -881,6 +918,26 @@ string16 JoinString(const std::vector<string16>& parts,
return JoinStringT(parts, separator);
}
+std::string JoinString(const std::vector<StringPiece>& parts,
+ StringPiece separator) {
+ return JoinStringPieceT(parts, separator);
+}
+
+string16 JoinString(const std::vector<StringPiece16>& parts,
+ StringPiece16 separator) {
+ return JoinStringPieceT(parts, separator);
+}
+
+std::string JoinString(const std::initializer_list<StringPiece>& parts,
+ StringPiece separator) {
+ return JoinStringPieceT(parts, separator);
+}
+
+string16 JoinString(const std::initializer_list<StringPiece16>& parts,
+ StringPiece16 separator) {
+ return JoinStringPieceT(parts, separator);
+}
+
template<class FormatStringType, class OutStringType>
OutStringType DoReplaceStringPlaceholders(
const FormatStringType& format_string,
« no previous file with comments | « base/strings/string_util.h ('k') | base/strings/string_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698