Update String::containsOnlyLatin1() to avoid converting to 16 bits
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 5 Dec 2011 20:27:47 +0000 (20:27 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 5 Dec 2011 20:27:47 +0000 (20:27 +0000)
https://bugs.webkit.org/show_bug.cgi?id=73797

Reviewed by Andreas Kling.

When the String use 8bits StringImpl, there is no need to iterate
over the string.

The function charactersAreAllLatin1() is removed because it is not
used anywhere.

* wtf/text/WTFString.h:
(WTF::String::containsOnlyLatin1):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@102028 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/wtf/text/WTFString.h

index 96a42481aae85e9e59d533cf312fc95ecd0b880b..49bffba73d868e9b8a7bff806889d86b7f685a43 100644 (file)
@@ -1,3 +1,19 @@
+2011-12-05  Benjamin Poulain  <benjamin@webkit.org>
+
+        Update String::containsOnlyLatin1() to avoid converting to 16 bits
+        https://bugs.webkit.org/show_bug.cgi?id=73797
+
+        Reviewed by Andreas Kling.
+
+        When the String use 8bits StringImpl, there is no need to iterate
+        over the string.
+
+        The function charactersAreAllLatin1() is removed because it is not
+        used anywhere.
+
+        * wtf/text/WTFString.h:
+        (WTF::String::containsOnlyLatin1):
+
 2011-12-05  Michael Saboff  <msaboff@apple.com>
 
         8 bit string work slows down Kraken json-stringify-tinderbox
index 58ce1264f033f8bcd36893c51633e26cfa37a099..bc5ebdbd97b85e3af86c0b60585de8ff8b88e9bc 100644 (file)
@@ -62,7 +62,6 @@ struct StringHash;
 // Declarations of string operations
 
 bool charactersAreAllASCII(const UChar*, size_t);
-bool charactersAreAllLatin1(const UChar*, size_t);
 WTF_EXPORT_PRIVATE int charactersToIntStrict(const LChar*, size_t, bool* ok = 0, int base = 10);
 WTF_EXPORT_PRIVATE int charactersToIntStrict(const UChar*, size_t, bool* ok = 0, int base = 10);
 WTF_EXPORT_PRIVATE unsigned charactersToUIntStrict(const LChar*, size_t, bool* ok = 0, int base = 10);
@@ -375,7 +374,7 @@ public:
     }
 
     bool containsOnlyASCII() const { return charactersAreAllASCII(characters(), length()); }
-    bool containsOnlyLatin1() const { return charactersAreAllLatin1(characters(), length()); }
+    bool containsOnlyLatin1() const;
     bool containsOnlyWhitespace() const { return !m_impl || m_impl->containsOnlyWhitespace(); }
 
     // Hash table deleted values, which are only constructed and never copied or destroyed.
@@ -460,6 +459,21 @@ inline const UChar* String::getCharacters<UChar>() const
     return characters16();
 }
 
+inline bool String::containsOnlyLatin1() const
+{
+    if (isEmpty())
+        return true;
+
+    if (is8Bit())
+        return true;
+
+    const UChar* characters = characters16();
+    UChar ored = 0;
+    for (size_t i = 0; i < m_impl->length(); ++i)
+        ored |= characters[i];
+    return !(ored & 0xFF00);
+}
+
 
 #ifdef __OBJC__
 // This is for situations in WebKit where the long standing behavior has been
@@ -476,14 +490,6 @@ inline bool charactersAreAllASCII(const UChar* characters, size_t length)
     return !(ored & 0xFF80);
 }
 
-inline bool charactersAreAllLatin1(const UChar* characters, size_t length)
-{
-    UChar ored = 0;
-    for (size_t i = 0; i < length; ++i)
-        ored |= characters[i];
-    return !(ored & 0xFF00);
-}
-
 WTF_EXPORT_PRIVATE int codePointCompare(const String&, const String&);
 
 inline size_t find(const LChar* characters, unsigned length, LChar matchCharacter, unsigned index = 0)
@@ -610,7 +616,6 @@ using WTF::emptyString;
 using WTF::append;
 using WTF::appendNumber;
 using WTF::charactersAreAllASCII;
-using WTF::charactersAreAllLatin1;
 using WTF::charactersToIntStrict;
 using WTF::charactersToUIntStrict;
 using WTF::charactersToInt64Strict;