| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/strings/string_util.h" | 5 #include "base/strings/string_util.h" |
| 6 | 6 |
| 7 #include <ctype.h> | 7 #include <ctype.h> |
| 8 #include <errno.h> | 8 #include <errno.h> |
| 9 #include <math.h> | 9 #include <math.h> |
| 10 #include <stdarg.h> | 10 #include <stdarg.h> |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 | 347 |
| 348 while (char_index < src_len) { | 348 while (char_index < src_len) { |
| 349 int32 code_point; | 349 int32 code_point; |
| 350 CBU8_NEXT(src, char_index, src_len, code_point); | 350 CBU8_NEXT(src, char_index, src_len, code_point); |
| 351 if (!IsValidCharacter(code_point)) | 351 if (!IsValidCharacter(code_point)) |
| 352 return false; | 352 return false; |
| 353 } | 353 } |
| 354 return true; | 354 return true; |
| 355 } | 355 } |
| 356 | 356 |
| 357 template<typename StringType> | 357 } // namespace base |
| 358 static inline bool DoLowerCaseEqualsASCII(BasicStringPiece<StringType> str, | 358 |
| 359 const char* lower_cased_cmp) { | 359 template<typename Iter> |
| 360 for (typename BasicStringPiece<StringType>::const_iterator it = str.begin(); | 360 static inline bool DoLowerCaseEqualsASCII(Iter a_begin, |
| 361 it != str.end(); ++it, ++lower_cased_cmp) { | 361 Iter a_end, |
| 362 if (!*lower_cased_cmp || base::ToLowerASCII(*it) != *lower_cased_cmp) | 362 const char* b) { |
| 363 for (Iter it = a_begin; it != a_end; ++it, ++b) { |
| 364 if (!*b || base::ToLowerASCII(*it) != *b) |
| 363 return false; | 365 return false; |
| 364 } | 366 } |
| 365 return *lower_cased_cmp == 0; | 367 return *b == 0; |
| 366 } | 368 } |
| 367 | 369 |
| 368 // Front-ends for LowerCaseEqualsASCII. | 370 // Front-ends for LowerCaseEqualsASCII. |
| 369 bool LowerCaseEqualsASCII(StringPiece str, const char* lower_cased_cmp) { | 371 bool LowerCaseEqualsASCII(const std::string& a, const char* b) { |
| 370 return DoLowerCaseEqualsASCII(str, lower_cased_cmp); | 372 return DoLowerCaseEqualsASCII(a.begin(), a.end(), b); |
| 371 } | 373 } |
| 372 | 374 |
| 373 bool LowerCaseEqualsASCII(StringPiece16 str, const char* lower_cased_cmp) { | 375 bool LowerCaseEqualsASCII(const string16& a, const char* b) { |
| 374 return DoLowerCaseEqualsASCII(str, lower_cased_cmp); | 376 return DoLowerCaseEqualsASCII(a.begin(), a.end(), b); |
| 375 } | 377 } |
| 376 | 378 |
| 377 bool LowerCaseEqualsASCII(std::string::const_iterator a_begin, | 379 bool LowerCaseEqualsASCII(std::string::const_iterator a_begin, |
| 378 std::string::const_iterator a_end, | 380 std::string::const_iterator a_end, |
| 379 const char* b) { | 381 const char* b) { |
| 380 const char* a = &*a_begin; | 382 return DoLowerCaseEqualsASCII(a_begin, a_end, b); |
| 381 return LowerCaseEqualsASCII(StringPiece(a, a_end - a_begin), b); | |
| 382 } | 383 } |
| 383 | 384 |
| 384 bool LowerCaseEqualsASCII(string16::const_iterator a_begin, | 385 bool LowerCaseEqualsASCII(string16::const_iterator a_begin, |
| 385 string16::const_iterator a_end, | 386 string16::const_iterator a_end, |
| 386 const char* b) { | 387 const char* b) { |
| 387 const char16* a = &*a_begin; | 388 return DoLowerCaseEqualsASCII(a_begin, a_end, b); |
| 388 return LowerCaseEqualsASCII(StringPiece16(a, a_end - a_begin), b); | |
| 389 } | 389 } |
| 390 | 390 |
| 391 // TODO(port): Resolve wchar_t/iterator issues that require OS_ANDROID here. | 391 // TODO(port): Resolve wchar_t/iterator issues that require OS_ANDROID here. |
| 392 #if !defined(OS_ANDROID) | 392 #if !defined(OS_ANDROID) |
| 393 bool LowerCaseEqualsASCII(const char* a_begin, | 393 bool LowerCaseEqualsASCII(const char* a_begin, |
| 394 const char* a_end, | 394 const char* a_end, |
| 395 const char* b) { | 395 const char* b) { |
| 396 return DoLowerCaseEqualsASCII(StringPiece(a_begin, a_end - a_begin), b); | 396 return DoLowerCaseEqualsASCII(a_begin, a_end, b); |
| 397 } | 397 } |
| 398 | 398 |
| 399 bool LowerCaseEqualsASCII(const char16* a_begin, | 399 bool LowerCaseEqualsASCII(const char16* a_begin, |
| 400 const char16* a_end, | 400 const char16* a_end, |
| 401 const char* b) { | 401 const char* b) { |
| 402 return DoLowerCaseEqualsASCII(StringPiece16(a_begin, a_end - a_begin), b); | 402 return DoLowerCaseEqualsASCII(a_begin, a_end, b); |
| 403 } | 403 } |
| 404 |
| 404 #endif // !defined(OS_ANDROID) | 405 #endif // !defined(OS_ANDROID) |
| 405 | 406 |
| 406 } // namespace base | |
| 407 | |
| 408 bool EqualsASCII(const string16& a, const base::StringPiece& b) { | 407 bool EqualsASCII(const string16& a, const base::StringPiece& b) { |
| 409 if (a.length() != b.length()) | 408 if (a.length() != b.length()) |
| 410 return false; | 409 return false; |
| 411 return std::equal(b.begin(), b.end(), a.begin()); | 410 return std::equal(b.begin(), b.end(), a.begin()); |
| 412 } | 411 } |
| 413 | 412 |
| 414 bool StartsWithASCII(const std::string& str, | 413 bool StartsWithASCII(const std::string& str, |
| 415 const std::string& search, | 414 const std::string& search, |
| 416 bool case_sensitive) { | 415 bool case_sensitive) { |
| 417 if (case_sensitive) | 416 if (case_sensitive) |
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 884 } | 883 } |
| 885 | 884 |
| 886 } // namespace | 885 } // namespace |
| 887 | 886 |
| 888 size_t base::strlcpy(char* dst, const char* src, size_t dst_size) { | 887 size_t base::strlcpy(char* dst, const char* src, size_t dst_size) { |
| 889 return lcpyT<char>(dst, src, dst_size); | 888 return lcpyT<char>(dst, src, dst_size); |
| 890 } | 889 } |
| 891 size_t base::wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) { | 890 size_t base::wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) { |
| 892 return lcpyT<wchar_t>(dst, src, dst_size); | 891 return lcpyT<wchar_t>(dst, src, dst_size); |
| 893 } | 892 } |
| OLD | NEW |