Index: third_party/WebKit/Source/wtf/text/StringImpl.cpp |
diff --git a/third_party/WebKit/Source/wtf/text/StringImpl.cpp b/third_party/WebKit/Source/wtf/text/StringImpl.cpp |
index ef28e2bf4a2e01fcc1f29acdaefeb7d7f9854f48..094f70c4a6d0ac193c243db5e172d35b533e2b6a 100644 |
--- a/third_party/WebKit/Source/wtf/text/StringImpl.cpp |
+++ b/third_party/WebKit/Source/wtf/text/StringImpl.cpp |
@@ -651,21 +651,11 @@ upconvert: |
return newImpl.release(); |
} |
-ALWAYS_INLINE static bool startsWithIgnoringCase(const StringImpl* stringImpl, const LChar* prefix, unsigned prefixLength) |
-{ |
- ASSERT(stringImpl); |
- if (prefixLength > stringImpl->length()) |
- return false; |
- if (stringImpl->is8Bit()) |
- return equalIgnoringCase(stringImpl->characters8(), prefix, prefixLength); |
- return equalIgnoringCase(stringImpl->characters16(), prefix, prefixLength); |
-} |
- |
static inline bool localeIdMatchesLang(const AtomicString& localeId, const char* lang) |
{ |
size_t langLength = strlen(lang); |
RELEASE_ASSERT(langLength >= 2 && langLength <= 3); |
- if (!localeId.impl() || !startsWithIgnoringCase(localeId.impl(), reinterpret_cast<const LChar*>(lang), langLength)) |
+ if (!localeId.impl() || !localeId.impl()->startsWithIgnoringCase(lang, langLength)) |
return false; |
if (localeId.impl()->length() == langLength) |
return true; |
@@ -1470,7 +1460,7 @@ size_t StringImpl::reverseFind(StringImpl* matchString, unsigned index) |
return reverseFindInner(characters16(), matchString->characters16(), index, ourLength, matchLength); |
} |
-ALWAYS_INLINE static bool equalInner(const StringImpl* stringImpl, unsigned startOffset, const LChar* matchString, unsigned matchLength) |
+ALWAYS_INLINE static bool equalSubstring(const StringImpl* stringImpl, unsigned startOffset, const LChar* matchString, unsigned matchLength) |
{ |
ASSERT(stringImpl); |
ASSERT(matchLength <= stringImpl->length()); |
@@ -1486,12 +1476,12 @@ bool StringImpl::startsWith(UChar character) const |
return m_length && (*this)[0] == character; |
} |
-bool StringImpl::startsWith(const char* matchString, unsigned matchLength) const |
+bool StringImpl::startsWith(const char* prefixString, unsigned prefixLength) const |
{ |
- ASSERT(matchLength); |
- if (matchLength > length()) |
+ ASSERT(prefixLength); |
+ if (prefixLength > length()) |
return false; |
- return equalInner(this, 0, reinterpret_cast<const LChar*>(matchString), matchLength); |
+ return equalSubstring(this, 0, reinterpret_cast<const LChar*>(prefixString), prefixLength); |
} |
ALWAYS_INLINE static bool equalSubstring(const StringImpl* stringImpl, unsigned startOffset, const StringImpl* matchString) |
@@ -1502,16 +1492,11 @@ ALWAYS_INLINE static bool equalSubstring(const StringImpl* stringImpl, unsigned |
ASSERT(startOffset + matchString->length() <= stringImpl->length()); |
unsigned matchLength = matchString->length(); |
- if (stringImpl->is8Bit()) { |
- const LChar* start = stringImpl->characters8() + startOffset; |
- if (matchString->is8Bit()) |
- return equal(start, matchString->characters8(), matchLength); |
- return equal(start, matchString->characters16(), matchLength); |
- } |
- const UChar* start = stringImpl->characters16() + startOffset; |
if (matchString->is8Bit()) |
- return equal(start, matchString->characters8(), matchLength); |
- return equal(start, matchString->characters16(), matchLength); |
+ return equalSubstring(stringImpl, startOffset, matchString->characters8(), matchLength); |
+ if (stringImpl->is8Bit()) |
+ return equal(stringImpl->characters8() + startOffset, matchString->characters16(), matchLength); |
+ return equal(stringImpl->characters16() + startOffset, matchString->characters16(), matchLength); |
} |
bool StringImpl::startsWith(const StringImpl* prefix) const |
@@ -1522,6 +1507,25 @@ bool StringImpl::startsWith(const StringImpl* prefix) const |
return equalSubstring(this, 0, prefix); |
} |
+ALWAYS_INLINE static bool equalSubstringIgnoringCase(const StringImpl* stringImpl, unsigned startOffset, const LChar* matchString, unsigned matchLength) |
+{ |
+ ASSERT(stringImpl); |
+ ASSERT(matchLength <= stringImpl->length()); |
+ ASSERT(startOffset + matchLength <= stringImpl->length()); |
+ |
+ if (stringImpl->is8Bit()) |
+ return equalIgnoringCase(stringImpl->characters8() + startOffset, matchString, matchLength); |
+ return equalIgnoringCase(stringImpl->characters16() + startOffset, matchString, matchLength); |
+} |
+ |
+bool StringImpl::startsWithIgnoringCase(const char* prefixString, unsigned prefixLength) const |
+{ |
+ ASSERT(prefixLength); |
+ if (prefixLength > length()) |
+ return false; |
+ return equalSubstringIgnoringCase(this, 0, reinterpret_cast<const LChar*>(prefixString), prefixLength); |
+} |
+ |
ALWAYS_INLINE static bool equalSubstringIgnoringCase(const StringImpl* stringImpl, unsigned startOffset, const StringImpl* matchString) |
{ |
ASSERT(stringImpl); |
@@ -1530,16 +1534,11 @@ ALWAYS_INLINE static bool equalSubstringIgnoringCase(const StringImpl* stringImp |
ASSERT(startOffset + matchString->length() <= stringImpl->length()); |
unsigned matchLength = matchString->length(); |
- if (stringImpl->is8Bit()) { |
- const LChar* start = stringImpl->characters8() + startOffset; |
- if (matchString->is8Bit()) |
- return equalIgnoringCase(start, matchString->characters8(), matchLength); |
- return equalIgnoringCase(start, matchString->characters16(), matchLength); |
- } |
- const UChar* start = stringImpl->characters16() + startOffset; |
if (matchString->is8Bit()) |
- return equalIgnoringCase(start, matchString->characters8(), matchLength); |
- return equalIgnoringCase(start, matchString->characters16(), matchLength); |
+ return equalSubstringIgnoringCase(stringImpl, startOffset, matchString->characters8(), matchLength); |
+ if (stringImpl->is8Bit()) |
+ return equalIgnoringCase(stringImpl->characters8() + startOffset, matchString->characters16(), matchLength); |
+ return equalIgnoringCase(stringImpl->characters16() + startOffset, matchString->characters16(), matchLength); |
} |
bool StringImpl::startsWithIgnoringCase(const StringImpl* prefix) const |
@@ -1550,6 +1549,25 @@ bool StringImpl::startsWithIgnoringCase(const StringImpl* prefix) const |
return equalSubstringIgnoringCase(this, 0, prefix); |
} |
+ALWAYS_INLINE static bool equalSubstringIgnoringASCIICase(const StringImpl* stringImpl, unsigned startOffset, const LChar* matchString, unsigned matchLength) |
+{ |
+ ASSERT(stringImpl); |
+ ASSERT(matchLength <= stringImpl->length()); |
+ ASSERT(startOffset + matchLength <= stringImpl->length()); |
+ |
+ if (stringImpl->is8Bit()) |
+ return equalIgnoringASCIICase(stringImpl->characters8() + startOffset, matchString, matchLength); |
+ return equalIgnoringASCIICase(stringImpl->characters16() + startOffset, matchString, matchLength); |
+} |
+ |
+bool StringImpl::startsWithIgnoringASCIICase(const char* prefixString, unsigned prefixLength) const |
+{ |
+ ASSERT(prefixLength); |
+ if (prefixLength > length()) |
+ return false; |
+ return equalSubstringIgnoringASCIICase(this, 0, reinterpret_cast<const LChar*>(prefixString), prefixLength); |
+} |
+ |
ALWAYS_INLINE static bool equalSubstringIgnoringASCIICase(const StringImpl* stringImpl, unsigned startOffset, const StringImpl* matchString) |
{ |
ASSERT(stringImpl); |
@@ -1558,16 +1576,11 @@ ALWAYS_INLINE static bool equalSubstringIgnoringASCIICase(const StringImpl* stri |
ASSERT(startOffset + matchString->length() <= stringImpl->length()); |
unsigned matchLength = matchString->length(); |
- if (stringImpl->is8Bit()) { |
- const LChar* start = stringImpl->characters8() + startOffset; |
- if (matchString->is8Bit()) |
- return equalIgnoringASCIICase(start, matchString->characters8(), matchLength); |
- return equalIgnoringASCIICase(start, matchString->characters16(), matchLength); |
- } |
- const UChar* start = stringImpl->characters16() + startOffset; |
if (matchString->is8Bit()) |
- return equalIgnoringASCIICase(start, matchString->characters8(), matchLength); |
- return equalIgnoringASCIICase(start, matchString->characters16(), matchLength); |
+ return equalSubstringIgnoringASCIICase(stringImpl, startOffset, matchString->characters8(), matchLength); |
+ if (stringImpl->is8Bit()) |
+ return equalIgnoringASCIICase(stringImpl->characters8() + startOffset, matchString->characters16(), matchLength); |
+ return equalIgnoringASCIICase(stringImpl->characters16() + startOffset, matchString->characters16(), matchLength); |
} |
bool StringImpl::startsWithIgnoringASCIICase(const StringImpl* prefix) const |
@@ -1583,12 +1596,12 @@ bool StringImpl::endsWith(UChar character) const |
return m_length && (*this)[m_length - 1] == character; |
} |
-bool StringImpl::endsWith(const char* matchString, unsigned matchLength) const |
+bool StringImpl::endsWith(const char* suffixString, unsigned suffixLength) const |
{ |
- ASSERT(matchLength); |
- if (matchLength > length()) |
+ ASSERT(suffixLength); |
+ if (suffixLength > length()) |
return false; |
- return equalInner(this, length() - matchLength, reinterpret_cast<const LChar*>(matchString), matchLength); |
+ return equalSubstring(this, length() - suffixLength, reinterpret_cast<const LChar*>(suffixString), suffixLength); |
} |
bool StringImpl::endsWith(const StringImpl* suffix) const |
@@ -1600,6 +1613,14 @@ bool StringImpl::endsWith(const StringImpl* suffix) const |
return equalSubstring(this, length() - suffixLength, suffix); |
} |
+bool StringImpl::endsWithIgnoringCase(const char* suffixString, unsigned suffixLength) const |
+{ |
+ ASSERT(suffixLength); |
+ if (suffixLength > length()) |
+ return false; |
+ return equalSubstringIgnoringCase(this, length() - suffixLength, reinterpret_cast<const LChar*>(suffixString), suffixLength); |
+} |
+ |
bool StringImpl::endsWithIgnoringCase(const StringImpl* suffix) const |
{ |
ASSERT(suffix); |
@@ -1609,6 +1630,14 @@ bool StringImpl::endsWithIgnoringCase(const StringImpl* suffix) const |
return equalSubstringIgnoringCase(this, length() - suffixLength, suffix); |
} |
+bool StringImpl::endsWithIgnoringASCIICase(const char* suffixString, unsigned suffixLength) const |
+{ |
+ ASSERT(suffixLength); |
+ if (suffixLength > length()) |
+ return false; |
+ return equalSubstringIgnoringASCIICase(this, length() - suffixLength, reinterpret_cast<const LChar*>(suffixString), suffixLength); |
+} |
+ |
bool StringImpl::endsWithIgnoringASCIICase(const StringImpl* suffix) const |
{ |
ASSERT(suffix); |