Changeset 128363 in webkit


Ignore:
Timestamp:
Sep 12, 2012 2:40:26 PM (12 years ago)
Author:
msaboff@apple.com
Message:

Element::classAttributeChanged should use characters8/16 to find first non-whitespace
https://bugs.webkit.org/show_bug.cgi?id=96446

Reviewed by Benjamin Poulain.

Source/WebCore:

Made two new static templated methods to handle 8 or 16 bit class names.

No functional change, so no new tests.

  • dom/Element.cpp:

(WebCore::classStringHasClassName):
(WebCore::Element::classAttributeChanged):

Source/WTF:

Added bit size related string accessors to AtomicString to support change.

  • wtf/text/AtomicString.h:

(AtomicString):
(WTF::AtomicString::is8Bit):
(WTF::AtomicString::characters8):
(WTF::AtomicString::characters16):

Location:
trunk/Source
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r128340 r128363  
     12012-09-11  Michael Saboff  <msaboff@apple.com>
     2
     3        Element::classAttributeChanged should use characters8/16 to find first non-whitespace
     4        https://bugs.webkit.org/show_bug.cgi?id=96446
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Added bit size related string accessors to AtomicString to support change.
     9
     10        * wtf/text/AtomicString.h:
     11        (AtomicString):
     12        (WTF::AtomicString::is8Bit):
     13        (WTF::AtomicString::characters8):
     14        (WTF::AtomicString::characters16):
     15
    1162012-09-12  Michael Saboff  <msaboff@apple.com>
    217
  • trunk/Source/WTF/wtf/text/AtomicString.h

    r128300 r128363  
    8787
    8888    AtomicStringImpl* impl() const { return static_cast<AtomicStringImpl *>(m_string.impl()); }
    89    
     89
     90    bool is8Bit() const { return m_string.is8Bit(); }
    9091    const UChar* characters() const { return m_string.characters(); }
     92    const LChar* characters8() const { return m_string.characters8(); }
     93    const UChar* characters16() const { return m_string.characters16(); }
    9194    unsigned length() const { return m_string.length(); }
    9295   
  • trunk/Source/WebCore/ChangeLog

    r128361 r128363  
     12012-09-12  Michael Saboff  <msaboff@apple.com>
     2
     3        Element::classAttributeChanged should use characters8/16 to find first non-whitespace
     4        https://bugs.webkit.org/show_bug.cgi?id=96446
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Made two new static templated methods to handle 8 or 16 bit class names.
     9
     10        No functional change, so no new tests.
     11
     12        * dom/Element.cpp:
     13        (WebCore::classStringHasClassName):
     14        (WebCore::Element::classAttributeChanged):
     15
    1162012-09-12  Adam Barth  <abarth@chromium.org>
    217
  • trunk/Source/WebCore/dom/Element.cpp

    r128239 r128363  
    756756}
    757757
    758 void Element::classAttributeChanged(const AtomicString& newClassString)
    759 {
    760     const UChar* characters = newClassString.characters();
    761     unsigned length = newClassString.length();
    762     unsigned i;
    763     for (i = 0; i < length; ++i) {
     758template <typename CharacterType>
     759static inline bool classStringHasClassName(const CharacterType* characters, unsigned length)
     760{
     761    ASSERT(length > 0);
     762
     763    unsigned i = 0;
     764    do {
    764765        if (isNotHTMLSpace(characters[i]))
    765766            break;
    766     }
    767     bool hasClass = i < length;
    768     if (hasClass) {
     767        ++i;
     768    } while (i < length);
     769
     770    return i < length;
     771}
     772
     773static inline bool classStringHasClassName(const AtomicString& newClassString)
     774{
     775    unsigned length = newClassString.length();
     776
     777    if (!length)
     778        return false;
     779
     780    if (newClassString.is8Bit())
     781        return classStringHasClassName(newClassString.characters8(), length);
     782    return classStringHasClassName(newClassString.characters16(), length);
     783}
     784
     785void Element::classAttributeChanged(const AtomicString& newClassString)
     786{
     787    if (classStringHasClassName(newClassString)) {
    769788        const bool shouldFoldCase = document()->inQuirksMode();
    770789        ensureAttributeData()->setClass(newClassString, shouldFoldCase);
Note: See TracChangeset for help on using the changeset viewer.