Index: Source/core/css/RuleSet.h |
diff --git a/Source/core/css/RuleSet.h b/Source/core/css/RuleSet.h |
index 4ce7582c4d1335d157bb485a52b33338a167543b..d0339f38cfd880e618b30105762a6905bfd3f805 100644 |
--- a/Source/core/css/RuleSet.h |
+++ b/Source/core/css/RuleSet.h |
@@ -51,6 +51,7 @@ class StyleRuleRegion; |
class StyleSheetContents; |
class RuleData { |
+ NEW_DELETE_SAME_AS_MALLOC_FREE; |
public: |
RuleData(StyleRule*, unsigned selectorIndex, unsigned position, AddRuleFlags); |
@@ -59,6 +60,9 @@ public: |
const CSSSelector* selector() const { return m_rule->selectorList().selectorAt(m_selectorIndex); } |
unsigned selectorIndex() const { return m_selectorIndex; } |
+ bool isLastInArray() const { return m_isLastInArray; } |
+ void setLastInArray(bool flag) { m_isLastInArray = flag; } |
+ |
bool hasFastCheckableSelector() const { return m_hasFastCheckableSelector; } |
bool hasMultipartSelector() const { return m_hasMultipartSelector; } |
bool hasRightmostSelectorMatchingHTMLBasedOnRuleHash() const { return m_hasRightmostSelectorMatchingHTMLBasedOnRuleHash; } |
@@ -75,7 +79,8 @@ public: |
private: |
StyleRule* m_rule; |
- unsigned m_selectorIndex : 13; |
+ unsigned m_selectorIndex : 12; |
+ unsigned m_isLastInArray : 1; // We store an array of RuleData objects in a primitive array. |
// This number was picked fairly arbitrarily. We can probably lower it if we need to. |
// Some simple testing showed <100,000 RuleData's on large sites. |
unsigned m_position : 18; |
@@ -111,10 +116,10 @@ public: |
const RuleFeatureSet& features() const { return m_features; } |
- const Vector<RuleData>* idRules(AtomicStringImpl* key) const { ASSERT(!m_pendingRules); return m_idRules.get(key); } |
- const Vector<RuleData>* classRules(AtomicStringImpl* key) const { ASSERT(!m_pendingRules); return m_classRules.get(key); } |
- const Vector<RuleData>* tagRules(AtomicStringImpl* key) const { ASSERT(!m_pendingRules); return m_tagRules.get(key); } |
- const Vector<RuleData>* shadowPseudoElementRules(AtomicStringImpl* key) const { ASSERT(!m_pendingRules); return m_shadowPseudoElementRules.get(key); } |
+ const RuleData* idRules(AtomicStringImpl* key) const { ASSERT(!m_pendingRules); return m_idRules.get(key); } |
+ const RuleData* classRules(AtomicStringImpl* key) const { ASSERT(!m_pendingRules); return m_classRules.get(key); } |
+ const RuleData* tagRules(AtomicStringImpl* key) const { ASSERT(!m_pendingRules); return m_tagRules.get(key); } |
+ const RuleData* shadowPseudoElementRules(AtomicStringImpl* key) const { ASSERT(!m_pendingRules); return m_shadowPseudoElementRules.get(key); } |
const Vector<RuleData>* linkPseudoClassRules() const { ASSERT(!m_pendingRules); return &m_linkPseudoClassRules; } |
const Vector<RuleData>* cuePseudoRules() const { ASSERT(!m_pendingRules); return &m_cuePseudoRules; } |
const Vector<RuleData>* focusPseudoClassRules() const { ASSERT(!m_pendingRules); return &m_focusPseudoClassRules; } |
@@ -145,7 +150,7 @@ public: |
private: |
typedef HashMap<AtomicStringImpl*, OwnPtr<LinkedStack<RuleData> > > PendingRuleMap; |
- typedef HashMap<AtomicStringImpl*, OwnPtr<Vector<RuleData> > > CompactRuleMap; |
+ typedef HashMap<AtomicStringImpl*, OwnPtr<RuleData> > CompactRuleMap; |
RuleSet() |
: m_ruleCount(0) |