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

Side by Side Diff: base/strings/string_util.cc

Issue 2691193002: Added StringPiece overloads for base::JoinString. (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/strings/string_util.h" 5 #include "base/strings/string_util.h"
6 6
7 #include <ctype.h> 7 #include <ctype.h>
8 #include <errno.h> 8 #include <errno.h>
9 #include <math.h> 9 #include <math.h>
10 #include <stdarg.h> 10 #include <stdarg.h>
(...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 } 846 }
847 847
848 char* WriteInto(std::string* str, size_t length_with_null) { 848 char* WriteInto(std::string* str, size_t length_with_null) {
849 return WriteIntoT(str, length_with_null); 849 return WriteIntoT(str, length_with_null);
850 } 850 }
851 851
852 char16* WriteInto(string16* str, size_t length_with_null) { 852 char16* WriteInto(string16* str, size_t length_with_null) {
853 return WriteIntoT(str, length_with_null); 853 return WriteIntoT(str, length_with_null);
854 } 854 }
855 855
856 template<typename STR> 856 template <typename STR>
857 static STR JoinStringT(const std::vector<STR>& parts, 857 static STR JoinStringT(const std::vector<STR>& parts,
858 BasicStringPiece<STR> sep) { 858 BasicStringPiece<STR> sep) {
859 if (parts.empty()) 859 if (parts.empty())
860 return STR(); 860 return STR();
861 861
862 STR result(parts[0]); 862 STR result(parts[0]);
863 auto iter = parts.begin(); 863 auto iter = parts.begin();
864 ++iter; 864 ++iter;
865 865
866 for (; iter != parts.end(); ++iter) { 866 for (; iter != parts.end(); ++iter) {
867 sep.AppendToString(&result); 867 sep.AppendToString(&result);
868 result += *iter; 868 result += *iter;
869 } 869 }
870 870
871 return result; 871 return result;
872 } 872 }
873 873
874 template <typename STR>
875 static STR JoinStringPieceT(const std::vector<BasicStringPiece<STR>>& parts,
876 BasicStringPiece<STR> sep) {
877 if (parts.empty())
878 return STR();
879
880 STR result(parts[0].data(), parts[0].size());
881 auto iter = parts.begin();
882 ++iter;
883
884 for (; iter != parts.end(); ++iter) {
885 sep.AppendToString(&result);
danakj 2017/02/16 16:34:32 Just throwing it out there, not for this CL, but:
danakj 2017/02/16 16:36:21 Ohh I see actually at the site that you deleted th
Matt Giuca 2017/02/16 23:51:11 Yes! Maybe you missed this in my original email:
danakj 2017/02/16 23:53:28 Oops, ya I missed that. I super doubt walking the
886 iter->AppendToString(&result);
887 }
888
889 return result;
890 }
891
874 std::string JoinString(const std::vector<std::string>& parts, 892 std::string JoinString(const std::vector<std::string>& parts,
875 StringPiece separator) { 893 StringPiece separator) {
876 return JoinStringT(parts, separator); 894 return JoinStringT(parts, separator);
877 } 895 }
878 896
879 string16 JoinString(const std::vector<string16>& parts, 897 string16 JoinString(const std::vector<string16>& parts,
880 StringPiece16 separator) { 898 StringPiece16 separator) {
881 return JoinStringT(parts, separator); 899 return JoinStringT(parts, separator);
882 } 900 }
883 901
902 std::string JoinStringPiece(const std::vector<StringPiece>& parts,
903 StringPiece separator) {
904 return JoinStringPieceT(parts, separator);
905 }
906
907 string16 JoinStringPiece(const std::vector<StringPiece16>& parts,
908 StringPiece16 separator) {
909 return JoinStringPieceT(parts, separator);
910 }
911
884 template<class FormatStringType, class OutStringType> 912 template<class FormatStringType, class OutStringType>
885 OutStringType DoReplaceStringPlaceholders( 913 OutStringType DoReplaceStringPlaceholders(
886 const FormatStringType& format_string, 914 const FormatStringType& format_string,
887 const std::vector<OutStringType>& subst, 915 const std::vector<OutStringType>& subst,
888 std::vector<size_t>* offsets) { 916 std::vector<size_t>* offsets) {
889 size_t substitutions = subst.size(); 917 size_t substitutions = subst.size();
890 DCHECK_LT(substitutions, 10U); 918 DCHECK_LT(substitutions, 10U);
891 919
892 size_t sub_length = 0; 920 size_t sub_length = 0;
893 for (const auto& cur : subst) 921 for (const auto& cur : subst)
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 } // namespace 1016 } // namespace
989 1017
990 size_t strlcpy(char* dst, const char* src, size_t dst_size) { 1018 size_t strlcpy(char* dst, const char* src, size_t dst_size) {
991 return lcpyT<char>(dst, src, dst_size); 1019 return lcpyT<char>(dst, src, dst_size);
992 } 1020 }
993 size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) { 1021 size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) {
994 return lcpyT<wchar_t>(dst, src, dst_size); 1022 return lcpyT<wchar_t>(dst, src, dst_size);
995 } 1023 }
996 1024
997 } // namespace base 1025 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698