| Index: base/string_util.cc
|
| diff --git a/base/string_util.cc b/base/string_util.cc
|
| index 4ba8c4b98d5aeb059d2d9fd0030d9b1e4a8fec82..d84fadb75e6558a1e5b3cb0a870c059890b9b242 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
|
|
|