From 64340b1507129fc1f0cab1aca65ca30b63b89202 Mon Sep 17 00:00:00 2001 From: "kuchhal@chromium.org" Date: Thu, 26 Feb 2009 23:18:17 +0000 Subject: 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 --- base/string_util.cc | 32 +++++++++++++++++++++++++------- base/string_util.h | 5 ++++- 2 files changed, 29 insertions(+), 8 deletions(-) (limited to 'base') 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 +static bool DoIsStringASCII(const STR& str) { for (size_t i = 0; i < str.length(); i++) { - if (str[i] > 0x7F) + typename ToUnsigned::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(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. -- cgit v1.1