Title: [135967] trunk/Source/WebCore
Revision
135967
Author
shin...@chromium.org
Date
2012-11-27 20:37:21 -0800 (Tue, 27 Nov 2012)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (135966 => 135967)


--- trunk/Source/WebCore/ChangeLog	2012-11-28 03:18:03 UTC (rev 135966)
+++ trunk/Source/WebCore/ChangeLog	2012-11-28 04:37:21 UTC (rev 135967)
@@ -1,3 +1,21 @@
+2012-11-27  Shinya Kawanaka  <shin...@chromium.org>
+
+        [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):
+
 2012-11-27  Julien Chaffraix  <jchaffr...@webkit.org>
 
         Support proper <percent> / calc() resolution for grid items

Modified: trunk/Source/WebCore/dom/Element.cpp (135966 => 135967)


--- trunk/Source/WebCore/dom/Element.cpp	2012-11-28 03:18:03 UTC (rev 135966)
+++ trunk/Source/WebCore/dom/Element.cpp	2012-11-28 04:37:21 UTC (rev 135967)
@@ -825,49 +825,23 @@
     return classStringHasClassName(newClassString.characters16(), length);
 }
 
-struct HasSelectorForClassStyleFunctor {
-    explicit HasSelectorForClassStyleFunctor(StyleResolver* resolver)
-        : styleResolver(resolver)
-    { }
-
-    bool operator()(const AtomicString& className) const
-    {
-        return styleResolver->hasSelectorForClass(className);
-    }
-
-    StyleResolver* styleResolver;
-};
-
-struct HasSelectorForClassDistributionFunctor {
-    explicit HasSelectorForClassDistributionFunctor(ElementShadow* elementShadow)
-        : elementShadow(elementShadow)
-    { }
-
-    bool operator()(const AtomicString& className) const
-    {
-        return elementShadow->selectRuleFeatureSet().hasSelectorForClass(className);
-    }
-
-    ElementShadow* elementShadow;
-};
-
-template<typename Functor>
-static bool checkFunctorForClassChange(const SpaceSplitString& changedClasses, Functor functor)
+template<typename Checker>
+static bool checkSelectorForClassChange(const SpaceSplitString& changedClasses, const Checker& checker)
 {
     unsigned changedSize = changedClasses.size();
     for (unsigned i = 0; i < changedSize; ++i) {
-        if (functor(changedClasses[i]))
+        if (checker.hasSelectorForClass(changedClasses[i]))
             return true;
     }
     return false;
 }
 
-template<typename Functor>
-static bool checkFunctorForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, Functor functor)
+template<typename Checker>
+static bool checkSelectorForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, const Checker& checker)
 {
     unsigned oldSize = oldClasses.size();
     if (!oldSize)
-        return checkFunctorForClassChange(newClasses, functor);
+        return checkSelectorForClassChange(newClasses, checker);
     BitVector remainingClassBits;
     remainingClassBits.ensureSize(oldSize);
     // Class vectors tend to be very short. This is faster than using a hash table.
@@ -879,39 +853,19 @@
                 continue;
             }
         }
-        if (functor(newClasses[i]))
+        if (checker.hasSelectorForClass(newClasses[i]))
             return true;
     }
     for (unsigned i = 0; i < oldSize; ++i) {
         // If the bit is not set the the corresponding class has been removed.
         if (remainingClassBits.quickGet(i))
             continue;
-        if (functor(oldClasses[i]))
+        if (checker.hasSelectorForClass(oldClasses[i]))
             return true;
     }
     return false;
 }
 
-static inline bool checkNeedsStyleInvalidationForClassChange(const SpaceSplitString& changedClasses, StyleResolver* styleResolver)
-{
-    return checkFunctorForClassChange(changedClasses, HasSelectorForClassStyleFunctor(styleResolver));
-}
-
-static inline bool checkNeedsStyleInvalidationForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, StyleResolver* styleResolver)
-{
-    return checkFunctorForClassChange(oldClasses, newClasses, HasSelectorForClassStyleFunctor(styleResolver));
-}
-
-static inline bool checkNeedsDistributionInvalidationForClassChange(const SpaceSplitString& changedClasses, ElementShadow* elementShadow)
-{
-    return checkFunctorForClassChange(changedClasses, HasSelectorForClassDistributionFunctor(elementShadow));
-}
-
-static inline bool checkNeedsDistributionInvalidationForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, ElementShadow* elementShadow)
-{
-    return checkFunctorForClassChange(oldClasses, newClasses, HasSelectorForClassDistributionFunctor(elementShadow));
-}
-
 void Element::classAttributeChanged(const AtomicString& newClassString)
 {
     StyleResolver* styleResolver = document()->styleResolverIfExists();
@@ -926,10 +880,10 @@
         attributeData->setClass(newClassString, shouldFoldCase);
 
         const SpaceSplitString& newClasses = attributeData->classNames();
-        shouldInvalidateStyle = testShouldInvalidateStyle && checkNeedsStyleInvalidationForClassChange(oldClasses, newClasses, styleResolver);
+        shouldInvalidateStyle = testShouldInvalidateStyle && checkSelectorForClassChange(oldClasses, newClasses, *styleResolver);
     } else if (const ElementAttributeData* attributeData = this->attributeData()) {
         const SpaceSplitString& oldClasses = attributeData->classNames();
-        shouldInvalidateStyle = testShouldInvalidateStyle && checkNeedsStyleInvalidationForClassChange(oldClasses, styleResolver);
+        shouldInvalidateStyle = testShouldInvalidateStyle && checkSelectorForClassChange(oldClasses, *styleResolver);
 
         attributeData->clearClass();
     }
@@ -964,11 +918,11 @@
             const bool shouldFoldCase = document()->inQuirksMode();
             const SpaceSplitString& oldClasses = attributeData->classNames();
             const SpaceSplitString newClasses(newClassString, shouldFoldCase);
-            if (checkNeedsDistributionInvalidationForClassChange(oldClasses, newClasses, elementShadow))
+            if (checkSelectorForClassChange(oldClasses, newClasses, elementShadow->selectRuleFeatureSet()))
                 return true;
         } else if (const ElementAttributeData* attributeData = this->attributeData()) {
             const SpaceSplitString& oldClasses = attributeData->classNames();
-            if (checkNeedsDistributionInvalidationForClassChange(oldClasses, elementShadow))
+            if (checkSelectorForClassChange(oldClasses, elementShadow->selectRuleFeatureSet()))
                 return true;
         }
     }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to