Changeset 152418 in webkit
- Timestamp:
- Jul 5, 2013 10:25:08 AM (11 years ago)
- Location:
- trunk/Source/WTF
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r152415 r152418 1 2013-07-05 Mikhail Pozdnyakov <mikhail.pozdnyakov@intel.com> 2 3 A lot of code duplication within StringImpl 'equal' functions 4 https://bugs.webkit.org/show_bug.cgi?id=118415 5 6 Reviewed by Anders Carlsson. 7 8 There has been a lot of code duplication within StringImpl 'equal' functions: 9 the whole logic was copied to every overloaded 'equal' function. 10 Fixed now using templates and std::equal. 11 12 * wtf/text/StringImpl.cpp: 13 (WTF::equalInternal): 14 (WTF::equal): 15 * wtf/text/StringImpl.h: 16 (WTF::arraysEqual): 17 (WTF::equal): 18 1 19 2013-07-05 Mikhail Pozdnyakov <mikhail.pozdnyakov@intel.com> 2 20 -
trunk/Source/WTF/wtf/text/StringImpl.cpp
r152415 r152418 1719 1719 } 1720 1720 1721 bool equal(const StringImpl* a, const LChar* b, unsigned length) 1721 template <typename CharType> 1722 inline bool equalInternal(const StringImpl* a, const CharType* b, unsigned length) 1722 1723 { 1723 1724 if (!a) 1724 1725 return !b; 1725 1726 if (!b) 1726 return !a;1727 1728 if (length != a->length())1729 1727 return false; 1730 1728 1729 if (a->length() != length) 1730 return false; 1731 1731 if (a->is8Bit()) 1732 1732 return equal(a->characters8(), b, length); 1733 1733 return equal(a->characters16(), b, length); 1734 } 1735 1736 bool equal(const StringImpl* a, const LChar* b, unsigned length) 1737 { 1738 return equalInternal(a, b, length); 1739 } 1740 1741 bool equal(const StringImpl* a, const UChar* b, unsigned length) 1742 { 1743 return equalInternal(a, b, length); 1734 1744 } 1735 1745 … … 1767 1777 1768 1778 return !b[length]; 1769 }1770 1771 bool equal(const StringImpl* a, const UChar* b, unsigned length)1772 {1773 if (!a)1774 return !b;1775 if (!b)1776 return false;1777 1778 if (a->length() != length)1779 return false;1780 if (a->is8Bit())1781 return equal(a->characters8(), b, length);1782 return equal(a->characters16(), b, length);1783 1779 } 1784 1780 -
trunk/Source/WTF/wtf/text/StringImpl.h
r152415 r152418 869 869 inline bool equal(const StringImpl* a, const char* b) { return equal(a, reinterpret_cast<const LChar*>(b)); } 870 870 WTF_EXPORT_STRING_API bool equal(const StringImpl*, const LChar*, unsigned); 871 WTF_EXPORT_STRING_API bool equal(const StringImpl*, const UChar*, unsigned); 871 872 inline bool equal(const StringImpl* a, const char* b, unsigned length) { return equal(a, reinterpret_cast<const LChar*>(b), length); } 872 873 inline bool equal(const LChar* a, StringImpl* b) { return equal(b, a); } 873 874 inline bool equal(const char* a, StringImpl* b) { return equal(b, reinterpret_cast<const LChar*>(a)); } 874 WTF_EXPORT_STRING_API bool equal(const StringImpl*, const UChar*, unsigned);875 875 WTF_EXPORT_STRING_API bool equalNonNull(const StringImpl* a, const StringImpl* b); 876 876 … … 1078 1078 } 1079 1079 #else 1080 ALWAYS_INLINE bool equal(const LChar* a, const LChar* b, unsigned length) 1081 { 1082 for (unsigned i = 0; i != length; ++i) { 1083 if (a[i] != b[i]) 1084 return false; 1085 } 1086 1087 return true; 1088 } 1089 1090 ALWAYS_INLINE bool equal(const UChar* a, const UChar* b, unsigned length) 1091 { 1092 for (unsigned i = 0; i != length; ++i) { 1093 if (a[i] != b[i]) 1094 return false; 1095 } 1096 1097 return true; 1098 } 1099 #endif 1100 1101 ALWAYS_INLINE bool equal(const LChar* a, const UChar* b, unsigned length) 1102 { 1103 for (unsigned i = 0; i != length; ++i) { 1104 if (a[i] != b[i]) 1105 return false; 1106 } 1107 1108 return true; 1109 } 1110 1111 ALWAYS_INLINE bool equal(const UChar* a, const LChar* b, unsigned length) 1112 { 1113 for (unsigned i = 0; i != length; ++i) { 1114 if (a[i] != b[i]) 1115 return false; 1116 } 1117 1118 return true; 1119 } 1120 1080 ALWAYS_INLINE bool equal(const LChar* a, const LChar* b, unsigned length) { return std::equal(a, a + length, b); } 1081 ALWAYS_INLINE bool equal(const UChar* a, const UChar* b, unsigned length) { return std::equal(a, a + length, b); } 1082 #endif 1083 1084 ALWAYS_INLINE bool equal(const LChar* a, const UChar* b, unsigned length) { return std::equal(a, a + length, b); } 1085 ALWAYS_INLINE bool equal(const UChar* a, const LChar* b, unsigned length) { return std::equal(a, a + length, b); } 1121 1086 WTF_EXPORT_STRING_API bool equalIgnoringCase(const StringImpl*, const StringImpl*); 1122 1087 WTF_EXPORT_STRING_API bool equalIgnoringCase(const StringImpl*, const LChar*);
Note: See TracChangeset
for help on using the changeset viewer.