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 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 CompareCase case_sensitivity) { | 580 CompareCase case_sensitivity) { |
581 return StartsWithT<std::string>(str, search_for, case_sensitivity); | 581 return StartsWithT<std::string>(str, search_for, case_sensitivity); |
582 } | 582 } |
583 | 583 |
584 bool StartsWith(StringPiece16 str, | 584 bool StartsWith(StringPiece16 str, |
585 StringPiece16 search_for, | 585 StringPiece16 search_for, |
586 CompareCase case_sensitivity) { | 586 CompareCase case_sensitivity) { |
587 return StartsWithT<string16>(str, search_for, case_sensitivity); | 587 return StartsWithT<string16>(str, search_for, case_sensitivity); |
588 } | 588 } |
589 | 589 |
590 bool StartsWith(const string16& str, | |
591 const string16& search, | |
592 bool case_sensitive) { | |
593 if (!case_sensitive) { | |
594 // This function was originally written using the current locale functions | |
595 // for case-insensitive comparisons. Emulate this behavior until callers | |
596 // can be converted either to use the case-insensitive ASCII one (most | |
597 // callers) or ICU functions in base_i18n. | |
598 if (search.size() > str.size()) | |
599 return false; | |
600 return std::equal(search.begin(), search.end(), str.begin(), | |
601 CaseInsensitiveCompareDeprecated()); | |
602 } | |
603 return StartsWith(StringPiece16(str), StringPiece16(search), | |
604 CompareCase::SENSITIVE); | |
605 } | |
606 | |
607 template <typename Str> | 590 template <typename Str> |
608 bool EndsWithT(BasicStringPiece<Str> str, | 591 bool EndsWithT(BasicStringPiece<Str> str, |
609 BasicStringPiece<Str> search_for, | 592 BasicStringPiece<Str> search_for, |
610 CompareCase case_sensitivity) { | 593 CompareCase case_sensitivity) { |
611 if (search_for.size() > str.size()) | 594 if (search_for.size() > str.size()) |
612 return false; | 595 return false; |
613 | 596 |
614 BasicStringPiece<Str> source = str.substr(str.size() - search_for.size(), | 597 BasicStringPiece<Str> source = str.substr(str.size() - search_for.size(), |
615 search_for.size()); | 598 search_for.size()); |
616 | 599 |
(...skipping 14 matching lines...) Expand all Loading... |
631 } | 614 } |
632 | 615 |
633 bool EndsWith(StringPiece str, | 616 bool EndsWith(StringPiece str, |
634 StringPiece search_for, | 617 StringPiece search_for, |
635 CompareCase case_sensitivity) { | 618 CompareCase case_sensitivity) { |
636 return EndsWithT<std::string>(str, search_for, case_sensitivity); | 619 return EndsWithT<std::string>(str, search_for, case_sensitivity); |
637 } | 620 } |
638 | 621 |
639 bool EndsWith(StringPiece16 str, | 622 bool EndsWith(StringPiece16 str, |
640 StringPiece16 search_for, | 623 StringPiece16 search_for, |
641 CompareCase case_sensitivity) { | 624 CompareCase case_sensitivity) { |
642 return EndsWithT<string16>(str, search_for, case_sensitivity); | 625 return EndsWithT<string16>(str, search_for, case_sensitivity); |
643 } | 626 } |
644 | 627 |
645 bool EndsWith(const string16& str, | |
646 const string16& search, | |
647 bool case_sensitive) { | |
648 if (!case_sensitive) { | |
649 // This function was originally written using the current locale functions | |
650 // for case-insensitive comparisons. Emulate this behavior until callers | |
651 // can be converted either to use the case-insensitive ASCII one (most | |
652 // callers) or ICU functions in base_i18n. | |
653 if (search.size() > str.size()) | |
654 return false; | |
655 return std::equal(search.begin(), search.end(), | |
656 str.begin() + (str.size() - search.size()), | |
657 CaseInsensitiveCompareDeprecated()); | |
658 } | |
659 return EndsWith(StringPiece16(str), StringPiece16(search), | |
660 CompareCase::SENSITIVE); | |
661 } | |
662 | |
663 char HexDigitToInt(wchar_t c) { | 628 char HexDigitToInt(wchar_t c) { |
664 DCHECK(IsHexDigit(c)); | 629 DCHECK(IsHexDigit(c)); |
665 if (c >= '0' && c <= '9') | 630 if (c >= '0' && c <= '9') |
666 return static_cast<char>(c - '0'); | 631 return static_cast<char>(c - '0'); |
667 if (c >= 'A' && c <= 'F') | 632 if (c >= 'A' && c <= 'F') |
668 return static_cast<char>(c - 'A' + 10); | 633 return static_cast<char>(c - 'A' + 10); |
669 if (c >= 'a' && c <= 'f') | 634 if (c >= 'a' && c <= 'f') |
670 return static_cast<char>(c - 'a' + 10); | 635 return static_cast<char>(c - 'a' + 10); |
671 return 0; | 636 return 0; |
672 } | 637 } |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
997 } // namespace | 962 } // namespace |
998 | 963 |
999 size_t strlcpy(char* dst, const char* src, size_t dst_size) { | 964 size_t strlcpy(char* dst, const char* src, size_t dst_size) { |
1000 return lcpyT<char>(dst, src, dst_size); | 965 return lcpyT<char>(dst, src, dst_size); |
1001 } | 966 } |
1002 size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) { | 967 size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) { |
1003 return lcpyT<wchar_t>(dst, src, dst_size); | 968 return lcpyT<wchar_t>(dst, src, dst_size); |
1004 } | 969 } |
1005 | 970 |
1006 } // namespace base | 971 } // namespace base |
OLD | NEW |