| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. | 3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. |
| 4 * All rights reserved. | 4 * All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 RuleFeatureSet(); | 69 RuleFeatureSet(); |
| 70 ~RuleFeatureSet(); | 70 ~RuleFeatureSet(); |
| 71 | 71 |
| 72 void add(const RuleFeatureSet&); | 72 void add(const RuleFeatureSet&); |
| 73 void clear(); | 73 void clear(); |
| 74 | 74 |
| 75 enum SelectorPreMatch { SelectorNeverMatches, SelectorMayMatch }; | 75 enum SelectorPreMatch { SelectorNeverMatches, SelectorMayMatch }; |
| 76 | 76 |
| 77 SelectorPreMatch collectFeaturesFromRuleData(const RuleData&); | 77 SelectorPreMatch collectFeaturesFromRuleData(const RuleData&); |
| 78 | 78 |
| 79 bool usesSiblingRules() const { return !siblingRules.isEmpty(); } | 79 bool usesSiblingRules() const { return !m_siblingRules.isEmpty(); } |
| 80 bool usesFirstLineRules() const { return m_metadata.usesFirstLineRules; } | 80 bool usesFirstLineRules() const { return m_metadata.usesFirstLineRules; } |
| 81 bool usesWindowInactiveSelector() const { | 81 bool usesWindowInactiveSelector() const { |
| 82 return m_metadata.usesWindowInactiveSelector; | 82 return m_metadata.usesWindowInactiveSelector; |
| 83 } | 83 } |
| 84 bool needsFullRecalcForRuleSetInvalidation() const { | 84 bool needsFullRecalcForRuleSetInvalidation() const { |
| 85 return m_metadata.needsFullRecalcForRuleSetInvalidation; | 85 return m_metadata.needsFullRecalcForRuleSetInvalidation; |
| 86 } | 86 } |
| 87 | 87 |
| 88 unsigned maxDirectAdjacentSelectors() const { | 88 unsigned maxDirectAdjacentSelectors() const { |
| 89 return m_metadata.maxDirectAdjacentSelectors; | 89 return m_metadata.maxDirectAdjacentSelectors; |
| 90 } | 90 } |
| 91 | 91 |
| 92 bool hasSelectorForAttribute(const AtomicString& attributeName) const { | 92 bool hasSelectorForAttribute(const AtomicString& attributeName) const { |
| 93 DCHECK(!attributeName.isEmpty()); | 93 DCHECK(!attributeName.isEmpty()); |
| 94 return m_attributeInvalidationSets.contains(attributeName); | 94 return m_attributeInvalidationSets.contains(attributeName); |
| 95 } | 95 } |
| 96 | 96 |
| 97 bool hasSelectorForClass(const AtomicString& classValue) const { | 97 bool hasSelectorForClass(const AtomicString& classValue) const { |
| 98 DCHECK(!classValue.isEmpty()); | 98 DCHECK(!classValue.isEmpty()); |
| 99 return m_classInvalidationSets.contains(classValue); | 99 return m_classInvalidationSets.contains(classValue); |
| 100 } | 100 } |
| 101 | 101 |
| 102 bool hasSelectorForId(const AtomicString& idValue) const { | 102 bool hasSelectorForId(const AtomicString& idValue) const { |
| 103 return m_idInvalidationSets.contains(idValue); | 103 return m_idInvalidationSets.contains(idValue); |
| 104 } | 104 } |
| 105 | 105 |
| 106 const HeapVector<RuleFeature>& siblingRules() const { return m_siblingRules; } |
| 107 const HeapVector<RuleFeature>& uncommonAttributeRules() const { |
| 108 return m_uncommonAttributeRules; |
| 109 } |
| 110 |
| 106 // Collect descendant and sibling invalidation sets. | 111 // Collect descendant and sibling invalidation sets. |
| 107 void collectInvalidationSetsForClass(InvalidationLists&, | 112 void collectInvalidationSetsForClass(InvalidationLists&, |
| 108 Element&, | 113 Element&, |
| 109 const AtomicString& className) const; | 114 const AtomicString& className) const; |
| 110 void collectInvalidationSetsForId(InvalidationLists&, | 115 void collectInvalidationSetsForId(InvalidationLists&, |
| 111 Element&, | 116 Element&, |
| 112 const AtomicString& id) const; | 117 const AtomicString& id) const; |
| 113 void collectInvalidationSetsForAttribute( | 118 void collectInvalidationSetsForAttribute( |
| 114 InvalidationLists&, | 119 InvalidationLists&, |
| 115 Element&, | 120 Element&, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 132 const QualifiedName& attributeName, | 137 const QualifiedName& attributeName, |
| 133 unsigned minDirectAdjacent) const; | 138 unsigned minDirectAdjacent) const; |
| 134 void collectUniversalSiblingInvalidationSet(InvalidationLists&, | 139 void collectUniversalSiblingInvalidationSet(InvalidationLists&, |
| 135 unsigned minDirectAdjacent) const; | 140 unsigned minDirectAdjacent) const; |
| 136 void collectNthInvalidationSet(InvalidationLists&) const; | 141 void collectNthInvalidationSet(InvalidationLists&) const; |
| 137 | 142 |
| 138 bool hasIdsInSelectors() const { return m_idInvalidationSets.size() > 0; } | 143 bool hasIdsInSelectors() const { return m_idInvalidationSets.size() > 0; } |
| 139 | 144 |
| 140 DECLARE_TRACE(); | 145 DECLARE_TRACE(); |
| 141 | 146 |
| 142 HeapVector<RuleFeature> siblingRules; | |
| 143 HeapVector<RuleFeature> uncommonAttributeRules; | |
| 144 | |
| 145 bool isAlive() const { return m_isAlive; } | 147 bool isAlive() const { return m_isAlive; } |
| 146 | 148 |
| 147 protected: | 149 protected: |
| 148 InvalidationSet* invalidationSetForSimpleSelector(const CSSSelector&, | 150 InvalidationSet* invalidationSetForSimpleSelector(const CSSSelector&, |
| 149 InvalidationType); | 151 InvalidationType); |
| 150 | 152 |
| 151 private: | 153 private: |
| 152 // Each map entry is either a DescendantInvalidationSet or | 154 // Each map entry is either a DescendantInvalidationSet or |
| 153 // SiblingInvalidationSet. | 155 // SiblingInvalidationSet. |
| 154 // When both are needed, we store the SiblingInvalidationSet, and use it to | 156 // When both are needed, we store the SiblingInvalidationSet, and use it to |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 | 268 |
| 267 void addClassToInvalidationSet(const AtomicString& className, Element&); | 269 void addClassToInvalidationSet(const AtomicString& className, Element&); |
| 268 | 270 |
| 269 FeatureMetadata m_metadata; | 271 FeatureMetadata m_metadata; |
| 270 InvalidationSetMap m_classInvalidationSets; | 272 InvalidationSetMap m_classInvalidationSets; |
| 271 InvalidationSetMap m_attributeInvalidationSets; | 273 InvalidationSetMap m_attributeInvalidationSets; |
| 272 InvalidationSetMap m_idInvalidationSets; | 274 InvalidationSetMap m_idInvalidationSets; |
| 273 PseudoTypeInvalidationSetMap m_pseudoInvalidationSets; | 275 PseudoTypeInvalidationSetMap m_pseudoInvalidationSets; |
| 274 RefPtr<SiblingInvalidationSet> m_universalSiblingInvalidationSet; | 276 RefPtr<SiblingInvalidationSet> m_universalSiblingInvalidationSet; |
| 275 RefPtr<DescendantInvalidationSet> m_nthInvalidationSet; | 277 RefPtr<DescendantInvalidationSet> m_nthInvalidationSet; |
| 278 HeapVector<RuleFeature> m_siblingRules; |
| 279 HeapVector<RuleFeature> m_uncommonAttributeRules; |
| 276 | 280 |
| 277 // If true, the RuleFeatureSet is alive and can be used. | 281 // If true, the RuleFeatureSet is alive and can be used. |
| 278 unsigned m_isAlive : 1; | 282 unsigned m_isAlive : 1; |
| 279 | 283 |
| 280 friend class RuleFeatureSetTest; | 284 friend class RuleFeatureSetTest; |
| 281 }; | 285 }; |
| 282 | 286 |
| 283 } // namespace blink | 287 } // namespace blink |
| 284 | 288 |
| 285 #endif // RuleFeature_h | 289 #endif // RuleFeature_h |
| OLD | NEW |