diff options
author | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-29 21:32:01 +0000 |
---|---|---|
committer | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-29 21:32:01 +0000 |
commit | e4dad5bd72ddd563b84eede80cf2b414ea688b2c (patch) | |
tree | 24aa18551de46887173b800c33e8882bf31e712d /base | |
parent | 69877c29ce86be61d54007e5b515415fb05d78f8 (diff) | |
download | chromium_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.cc | 25 | ||||
-rw-r--r-- | base/string_util.h | 4 | ||||
-rw-r--r-- | base/string_util_unittest.cc | 19 |
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; |