Chromium Code Reviews| Index: xfa/fde/css/cfde_cssrulecollection.cpp |
| diff --git a/xfa/fde/css/cfde_cssrulecollection.cpp b/xfa/fde/css/cfde_cssrulecollection.cpp |
| index 2f91c136286609dc6b3ca210fca53a124361edc4..5a439724a092b16c731f797732d9211b4d091b07 100644 |
| --- a/xfa/fde/css/cfde_cssrulecollection.cpp |
| +++ b/xfa/fde/css/cfde_cssrulecollection.cpp |
| @@ -7,6 +7,7 @@ |
| #include "xfa/fde/css/fde_cssstyleselector.h" |
| #include <algorithm> |
| +#include <map> |
| #include <memory> |
| #include "xfa/fde/css/fde_csscache.h" |
| @@ -18,9 +19,9 @@ |
| #define FDE_CSSUNIVERSALHASH ('*') |
| void CFDE_CSSRuleCollection::Clear() { |
| - m_IDRules.RemoveAll(); |
| - m_TagRules.RemoveAll(); |
| - m_ClassRules.RemoveAll(); |
| + m_IDRules.clear(); |
| + m_TagRules.clear(); |
| + m_ClassRules.clear(); |
| m_pUniversalRules = nullptr; |
| m_pStaticStore = nullptr; |
| m_iSelectors = 0; |
| @@ -29,7 +30,7 @@ void CFDE_CSSRuleCollection::Clear() { |
| CFDE_CSSRuleCollection::CFDE_CSSRuleCollection() |
| : m_pStaticStore(nullptr), |
| m_pUniversalRules(nullptr), |
| - m_pPersudoRules(nullptr), |
| + m_pPseudoRules(nullptr), |
| m_iSelectors(0) {} |
| CFDE_CSSRuleCollection::~CFDE_CSSRuleCollection() { |
| @@ -62,33 +63,34 @@ void CFDE_CSSRuleCollection::AddRulesFrom(IFDE_CSSStyleSheet* pStyleSheet, |
| int32_t iSelectors = pStyleRule->CountSelectorLists(); |
| for (int32_t i = 0; i < iSelectors; ++i) { |
| CFDE_CSSSelector* pSelector = pStyleRule->GetSelectorList(i); |
| - if (pSelector->GetType() == FDE_CSSSELECTORTYPE_Persudo) { |
| + if (pSelector->GetType() == FDE_CSSSELECTORTYPE_Pseudo) { |
| FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration); |
| - AddRuleTo(m_pPersudoRules, pData); |
| + AddRuleTo(&m_pPseudoRules, pData); |
| continue; |
| } |
| if (pSelector->GetNameHash() != FDE_CSSUNIVERSALHASH) { |
| - AddRuleTo(m_TagRules, pSelector->GetNameHash(), pSelector, |
| + AddRuleTo(&m_TagRules, pSelector->GetNameHash(), pSelector, |
| pDeclaration); |
| continue; |
| } |
| CFDE_CSSSelector* pNext = pSelector->GetNextSelector(); |
| if (!pNext) { |
| FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration); |
| - AddRuleTo(m_pUniversalRules, pData); |
| + AddRuleTo(&m_pUniversalRules, pData); |
| continue; |
| } |
| switch (pNext->GetType()) { |
| case FDE_CSSSELECTORTYPE_ID: |
| - AddRuleTo(m_IDRules, pNext->GetNameHash(), pSelector, pDeclaration); |
| + AddRuleTo(&m_IDRules, pNext->GetNameHash(), pSelector, |
| + pDeclaration); |
| break; |
| case FDE_CSSSELECTORTYPE_Class: |
| - AddRuleTo(m_ClassRules, pNext->GetNameHash(), pSelector, |
| + AddRuleTo(&m_ClassRules, pNext->GetNameHash(), pSelector, |
| pDeclaration); |
| break; |
| case FDE_CSSSELECTORTYPE_Descendant: |
| case FDE_CSSSELECTORTYPE_Element: |
| - AddRuleTo(m_pUniversalRules, NewRuleData(pSelector, pDeclaration)); |
| + AddRuleTo(&m_pUniversalRules, NewRuleData(pSelector, pDeclaration)); |
| break; |
| default: |
| ASSERT(false); |
| @@ -111,29 +113,28 @@ void CFDE_CSSRuleCollection::AddRulesFrom(IFDE_CSSStyleSheet* pStyleSheet, |
| } |
| } |
| -void CFDE_CSSRuleCollection::AddRuleTo(CFX_MapPtrToPtr& map, |
| - uint32_t dwKey, |
| - CFDE_CSSSelector* pSel, |
| - CFDE_CSSDeclaration* pDecl) { |
| - void* pKey = (void*)(uintptr_t)dwKey; |
| +void CFDE_CSSRuleCollection::AddRuleTo( |
| + std::map<uint32_t, FDE_CSSRuleData*>* pMap, |
| + uint32_t dwKey, |
| + CFDE_CSSSelector* pSel, |
| + CFDE_CSSDeclaration* pDecl) { |
| FDE_CSSRuleData* pData = NewRuleData(pSel, pDecl); |
| - FDE_CSSRuleData* pList = nullptr; |
| - if (!map.Lookup(pKey, (void*&)pList)) { |
| - map.SetAt(pKey, pData); |
| - } else if (AddRuleTo(pList, pData)) { |
| - map.SetAt(pKey, pList); |
| + FDE_CSSRuleData* pList = (*pMap)[dwKey]; |
| + if (!pList) { |
| + (*pMap)[dwKey] = pData; |
| + } else if (AddRuleTo(&pList, pData)) { |
| + (*pMap)[dwKey] = pList; |
| } |
| } |
| -bool CFDE_CSSRuleCollection::AddRuleTo(FDE_CSSRuleData*& pList, |
|
Tom Sepez
2017/01/05 01:29:35
note: insane, puts element into second position in
|
| +bool CFDE_CSSRuleCollection::AddRuleTo(FDE_CSSRuleData** pList, |
| FDE_CSSRuleData* pData) { |
| - if (pList) { |
| - pData->pNext = pList->pNext; |
| - pList->pNext = pData; |
| + if (*pList) { |
| + pData->pNext = (*pList)->pNext; |
| + (*pList)->pNext = pData; |
| return false; |
| } |
| - |
| - pList = pData; |
| + *pList = pData; |
| return true; |
| } |