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