summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorkuchhal@chromium.org <kuchhal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-26 23:18:17 +0000
committerkuchhal@chromium.org <kuchhal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-26 23:18:17 +0000
commit64340b1507129fc1f0cab1aca65ca30b63b89202 (patch)
tree3c9eb3b03b3a93da0df4bad837830453d097baaf /base
parent02bf7f27abb24a349f178d2faa2bdee635913f28 (diff)
downloadchromium_src-64340b1507129fc1f0cab1aca65ca30b63b89202.zip
chromium_src-64340b1507129fc1f0cab1aca65ca30b63b89202.tar.gz
chromium_src-64340b1507129fc1f0cab1aca65ca30b63b89202.tar.bz2
Revert "Revert "ASCII <-> UTF16 conversion functions. These are just copies of WideToASCII and""
This reverts commit 25b05025dae174c94e6de74fa697a3338175f957. Review URL: http://codereview.chromium.org/27243 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10521 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r--base/string_util.cc32
-rw-r--r--base/string_util.h5
2 files changed, 29 insertions, 8 deletions
diff --git a/base/string_util.cc b/base/string_util.cc
index 4ba8c4b..d84fadb 100644
--- a/base/string_util.cc
+++ b/base/string_util.cc
@@ -450,6 +450,16 @@ std::wstring ASCIIToWide(const std::string& ascii) {
return std::wstring(ascii.begin(), ascii.end());
}
+std::string UTF16ToASCII(const string16& utf16) {
+ DCHECK(IsStringASCII(utf16));
+ return std::string(utf16.begin(), utf16.end());
+}
+
+string16 ASCIIToUTF16(const std::string& ascii) {
+ DCHECK(IsStringASCII(ascii));
+ return string16(ascii.begin(), ascii.end());
+}
+
// Latin1 is just the low range of Unicode, so we can copy directly to convert.
bool WideToLatin1(const std::wstring& wide, std::string* latin1) {
std::string output;
@@ -472,20 +482,28 @@ bool IsString8Bit(const std::wstring& str) {
return true;
}
-bool IsStringASCII(const std::wstring& str) {
+template<class STR>
+static bool DoIsStringASCII(const STR& str) {
for (size_t i = 0; i < str.length(); i++) {
- if (str[i] > 0x7F)
+ typename ToUnsigned<typename STR::value_type>::Unsigned c = str[i];
+ if (c > 0x7F)
return false;
}
return true;
}
+bool IsStringASCII(const std::wstring& str) {
+ return DoIsStringASCII(str);
+}
+
+#if !defined(WCHAR_T_IS_UTF16)
+bool IsStringASCII(const string16& str) {
+ return DoIsStringASCII(str);
+}
+#endif
+
bool IsStringASCII(const std::string& str) {
- for (size_t i = 0; i < str.length(); i++) {
- if (static_cast<unsigned char>(str[i]) > 0x7F)
- return false;
- }
- return true;
+ return DoIsStringASCII(str);
}
// Helper functions that determine whether the given character begins a
diff --git a/base/string_util.h b/base/string_util.h
index 500a114..93b4898 100644
--- a/base/string_util.h
+++ b/base/string_util.h
@@ -156,9 +156,11 @@ TrimPositions TrimWhitespace(const std::string& input,
std::wstring CollapseWhitespace(const std::wstring& text,
bool trim_sequences_with_line_breaks);
-// These convert between ASCII (7-bit) and UTF16 strings.
+// These convert between ASCII (7-bit) and Wide/UTF16 strings.
std::string WideToASCII(const std::wstring& wide);
std::wstring ASCIIToWide(const std::string& ascii);
+std::string UTF16ToASCII(const string16& utf16);
+string16 ASCIIToUTF16(const std::string& ascii);
// These convert between UTF-8, -16, and -32 strings. They are potentially slow,
// so avoid unnecessary conversions. The low-level versions return a boolean
@@ -235,6 +237,7 @@ bool IsStringUTF8(const std::string& str);
bool IsStringWideUTF8(const std::wstring& str);
bool IsStringASCII(const std::wstring& str);
bool IsStringASCII(const std::string& str);
+bool IsStringASCII(const string16& str);
// ASCII-specific tolower. The standard library's tolower is locale sensitive,
// so we don't want to use it here.