summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authortony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-29 21:32:01 +0000
committertony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-29 21:32:01 +0000
commite4dad5bd72ddd563b84eede80cf2b414ea688b2c (patch)
tree24aa18551de46887173b800c33e8882bf31e712d /base
parent69877c29ce86be61d54007e5b515415fb05d78f8 (diff)
downloadchromium_src-e4dad5bd72ddd563b84eede80cf2b414ea688b2c.zip
chromium_src-e4dad5bd72ddd563b84eede80cf2b414ea688b2c.tar.gz
chromium_src-e4dad5bd72ddd563b84eede80cf2b414ea688b2c.tar.bz2
Add a version of ReplaceStringPlaceholders that operates on std::string
instead of string16. BUG=none TEST=base unit tests Original patch by avd@google.com at: http://codereview.chromium.org/245046 Review URL: http://codereview.chromium.org/242061 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27532 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r--base/string_util.cc25
-rw-r--r--base/string_util.h4
-rw-r--r--base/string_util_unittest.cc19
3 files changed, 42 insertions, 6 deletions
diff --git a/base/string_util.cc b/base/string_util.cc
index fd33ef0..ee0a9a5 100644
--- a/base/string_util.cc
+++ b/base/string_util.cc
@@ -1310,24 +1310,25 @@ void SplitStringAlongWhitespace(const std::wstring& str,
}
}
-string16 ReplaceStringPlaceholders(const string16& format_string,
- const std::vector<string16>& subst,
- std::vector<size_t>* offsets) {
+template<class StringType>
+StringType DoReplaceStringPlaceholders(const StringType& format_string,
+ const std::vector<StringType>& subst,
+ std::vector<size_t>* offsets) {
int substitutions = subst.size();
DCHECK(substitutions < 10);
int sub_length = 0;
- for (std::vector<string16>::const_iterator iter = subst.begin();
+ for (typename std::vector<StringType>::const_iterator iter = subst.begin();
iter != subst.end();
++iter) {
sub_length += (*iter).length();
}
- string16 formatted;
+ StringType formatted;
formatted.reserve(format_string.length() + sub_length);
std::vector<ReplacementOffset> r_offsets;
- for (string16::const_iterator i = format_string.begin();
+ for (typename StringType::const_iterator i = format_string.begin();
i != format_string.end(); ++i) {
if ('$' == *i) {
if (i + 1 != format_string.end()) {
@@ -1363,6 +1364,18 @@ string16 ReplaceStringPlaceholders(const string16& format_string,
}
string16 ReplaceStringPlaceholders(const string16& format_string,
+ const std::vector<string16>& subst,
+ std::vector<size_t>* offsets) {
+ return DoReplaceStringPlaceholders(format_string, subst, offsets);
+}
+
+std::string ReplaceStringPlaceholders(const std::string& format_string,
+ const std::vector<std::string>& subst,
+ std::vector<size_t>* offsets) {
+ return DoReplaceStringPlaceholders(format_string, subst, offsets);
+}
+
+string16 ReplaceStringPlaceholders(const string16& format_string,
const string16& a,
size_t* offset) {
std::vector<size_t> offsets;
diff --git a/base/string_util.h b/base/string_util.h
index 9143346..64c1f60 100644
--- a/base/string_util.h
+++ b/base/string_util.h
@@ -607,6 +607,10 @@ string16 ReplaceStringPlaceholders(const string16& format_string,
const std::vector<string16>& subst,
std::vector<size_t>* offsets);
+std::string ReplaceStringPlaceholders(const std::string& format_string,
+ const std::vector<std::string>& subst,
+ std::vector<size_t>* offsets);
+
// Single-string shortcut for ReplaceStringHolders.
string16 ReplaceStringPlaceholders(const string16& format_string,
const string16& a,
diff --git a/base/string_util_unittest.cc b/base/string_util_unittest.cc
index b11a999..2723541 100644
--- a/base/string_util_unittest.cc
+++ b/base/string_util_unittest.cc
@@ -1652,6 +1652,25 @@ TEST(StringUtilTest, ReplaceStringPlaceholdersTooFew) {
EXPECT_EQ(formatted, ASCIIToUTF16("9aa,8bb,7cc,d,e,f,9ag,8bh,7ci"));
}
+TEST(StringUtilTest, StdStringReplaceStringPlaceholders) {
+ std::vector<std::string> subst;
+ subst.push_back("9a");
+ subst.push_back("8b");
+ subst.push_back("7c");
+ subst.push_back("6d");
+ subst.push_back("5e");
+ subst.push_back("4f");
+ subst.push_back("3g");
+ subst.push_back("2h");
+ subst.push_back("1i");
+
+ std::string formatted =
+ ReplaceStringPlaceholders(
+ "$1a,$2b,$3c,$4d,$5e,$6f,$7g,$8h,$9i", subst, NULL);
+
+ EXPECT_EQ(formatted, "9aa,8bb,7cc,6dd,5ee,4ff,3gg,2hh,1ii");
+}
+
TEST(StringUtilTest, SplitStringAlongWhitespace) {
struct TestData {
const std::wstring input;