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;
}
}