Changeset 135967 in webkit


Ignore:
Timestamp:
Nov 27, 2012, 8:37:21 PM (13 years ago)
Author:
shinyak@chromium.org
Message:

[Refactoring] HasSelectorForClassStyleFunctor in Element.cpp seems verbose
https://bugs.webkit.org/show_bug.cgi?id=103474

Reviewed by Hajime Morita.

The code introduced in r135174 looks verbose. We would like to make it simpler.
We have removed several inline functions and unnecessary structs.

No new tests, simple refactoring.

  • dom/Element.cpp:

(WebCore):
(WebCore::checkSelectorForClassChange):
(WebCore::Element::classAttributeChanged):
(WebCore::Element::shouldInvalidateDistributionWhenAttributeChanged):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r135965 r135967  
     12012-11-27  Shinya Kawanaka  <shinyak@chromium.org>
     2
     3        [Refactoring] HasSelectorForClassStyleFunctor in Element.cpp seems verbose
     4        https://bugs.webkit.org/show_bug.cgi?id=103474
     5
     6        Reviewed by Hajime Morita.
     7
     8        The code introduced in r135174 looks verbose. We would like to make it simpler.
     9        We have removed several inline functions and unnecessary structs.
     10
     11        No new tests, simple refactoring.
     12
     13        * dom/Element.cpp:
     14        (WebCore):
     15        (WebCore::checkSelectorForClassChange):
     16        (WebCore::Element::classAttributeChanged):
     17        (WebCore::Element::shouldInvalidateDistributionWhenAttributeChanged):
     18
    1192012-11-27  Julien Chaffraix  <jchaffraix@webkit.org>
    220
  • trunk/Source/WebCore/dom/Element.cpp

    r135914 r135967  
    826826}
    827827
    828 struct HasSelectorForClassStyleFunctor {
    829     explicit HasSelectorForClassStyleFunctor(StyleResolver* resolver)
    830         : styleResolver(resolver)
    831     { }
    832 
    833     bool operator()(const AtomicString& className) const
    834     {
    835         return styleResolver->hasSelectorForClass(className);
    836     }
    837 
    838     StyleResolver* styleResolver;
    839 };
    840 
    841 struct HasSelectorForClassDistributionFunctor {
    842     explicit HasSelectorForClassDistributionFunctor(ElementShadow* elementShadow)
    843         : elementShadow(elementShadow)
    844     { }
    845 
    846     bool operator()(const AtomicString& className) const
    847     {
    848         return elementShadow->selectRuleFeatureSet().hasSelectorForClass(className);
    849     }
    850 
    851     ElementShadow* elementShadow;
    852 };
    853 
    854 template<typename Functor>
    855 static bool checkFunctorForClassChange(const SpaceSplitString& changedClasses, Functor functor)
     828template<typename Checker>
     829static bool checkSelectorForClassChange(const SpaceSplitString& changedClasses, const Checker& checker)
    856830{
    857831    unsigned changedSize = changedClasses.size();
    858832    for (unsigned i = 0; i < changedSize; ++i) {
    859         if (functor(changedClasses[i]))
     833        if (checker.hasSelectorForClass(changedClasses[i]))
    860834            return true;
    861835    }
     
    863837}
    864838
    865 template<typename Functor>
    866 static bool checkFunctorForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, Functor functor)
     839template<typename Checker>
     840static bool checkSelectorForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, const Checker& checker)
    867841{
    868842    unsigned oldSize = oldClasses.size();
    869843    if (!oldSize)
    870         return checkFunctorForClassChange(newClasses, functor);
     844        return checkSelectorForClassChange(newClasses, checker);
    871845    BitVector remainingClassBits;
    872846    remainingClassBits.ensureSize(oldSize);
     
    880854            }
    881855        }
    882         if (functor(newClasses[i]))
     856        if (checker.hasSelectorForClass(newClasses[i]))
    883857            return true;
    884858    }
     
    887861        if (remainingClassBits.quickGet(i))
    888862            continue;
    889         if (functor(oldClasses[i]))
     863        if (checker.hasSelectorForClass(oldClasses[i]))
    890864            return true;
    891865    }
    892866    return false;
    893 }
    894 
    895 static inline bool checkNeedsStyleInvalidationForClassChange(const SpaceSplitString& changedClasses, StyleResolver* styleResolver)
    896 {
    897     return checkFunctorForClassChange(changedClasses, HasSelectorForClassStyleFunctor(styleResolver));
    898 }
    899 
    900 static inline bool checkNeedsStyleInvalidationForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, StyleResolver* styleResolver)
    901 {
    902     return checkFunctorForClassChange(oldClasses, newClasses, HasSelectorForClassStyleFunctor(styleResolver));
    903 }
    904 
    905 static inline bool checkNeedsDistributionInvalidationForClassChange(const SpaceSplitString& changedClasses, ElementShadow* elementShadow)
    906 {
    907     return checkFunctorForClassChange(changedClasses, HasSelectorForClassDistributionFunctor(elementShadow));
    908 }
    909 
    910 static inline bool checkNeedsDistributionInvalidationForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, ElementShadow* elementShadow)
    911 {
    912     return checkFunctorForClassChange(oldClasses, newClasses, HasSelectorForClassDistributionFunctor(elementShadow));
    913867}
    914868
     
    927881
    928882        const SpaceSplitString& newClasses = attributeData->classNames();
    929         shouldInvalidateStyle = testShouldInvalidateStyle && checkNeedsStyleInvalidationForClassChange(oldClasses, newClasses, styleResolver);
     883        shouldInvalidateStyle = testShouldInvalidateStyle && checkSelectorForClassChange(oldClasses, newClasses, *styleResolver);
    930884    } else if (const ElementAttributeData* attributeData = this->attributeData()) {
    931885        const SpaceSplitString& oldClasses = attributeData->classNames();
    932         shouldInvalidateStyle = testShouldInvalidateStyle && checkNeedsStyleInvalidationForClassChange(oldClasses, styleResolver);
     886        shouldInvalidateStyle = testShouldInvalidateStyle && checkSelectorForClassChange(oldClasses, *styleResolver);
    933887
    934888        attributeData->clearClass();
     
    965919            const SpaceSplitString& oldClasses = attributeData->classNames();
    966920            const SpaceSplitString newClasses(newClassString, shouldFoldCase);
    967             if (checkNeedsDistributionInvalidationForClassChange(oldClasses, newClasses, elementShadow))
     921            if (checkSelectorForClassChange(oldClasses, newClasses, elementShadow->selectRuleFeatureSet()))
    968922                return true;
    969923        } else if (const ElementAttributeData* attributeData = this->attributeData()) {
    970924            const SpaceSplitString& oldClasses = attributeData->classNames();
    971             if (checkNeedsDistributionInvalidationForClassChange(oldClasses, elementShadow))
     925            if (checkSelectorForClassChange(oldClasses, elementShadow->selectRuleFeatureSet()))
    972926                return true;
    973927        }
Note: See TracChangeset for help on using the changeset viewer.