| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/dom/NthIndexCache.h" | 5 #include "core/dom/NthIndexCache.h" |
| 6 | 6 |
| 7 #include "core/dom/Document.h" | 7 #include "core/dom/Document.h" |
| 8 #include "core/dom/ElementTraversal.h" | 8 #include "core/dom/ElementTraversal.h" |
| 9 | 9 |
| 10 namespace blink { | 10 namespace blink { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 } | 77 } |
| 78 | 78 |
| 79 } // namespace | 79 } // namespace |
| 80 | 80 |
| 81 unsigned NthIndexCache::nthChildIndex(Element& element) { | 81 unsigned NthIndexCache::nthChildIndex(Element& element) { |
| 82 if (element.isPseudoElement() || !element.parentNode()) | 82 if (element.isPseudoElement() || !element.parentNode()) |
| 83 return 1; | 83 return 1; |
| 84 NthIndexCache* nthIndexCache = element.document().nthIndexCache(); | 84 NthIndexCache* nthIndexCache = element.document().nthIndexCache(); |
| 85 NthIndexData* nthIndexData = nullptr; | 85 NthIndexData* nthIndexData = nullptr; |
| 86 if (nthIndexCache && nthIndexCache->m_parentMap) | 86 if (nthIndexCache && nthIndexCache->m_parentMap) |
| 87 nthIndexData = nthIndexCache->m_parentMap->get(element.parentNode()); | 87 nthIndexData = nthIndexCache->m_parentMap->at(element.parentNode()); |
| 88 if (nthIndexData) | 88 if (nthIndexData) |
| 89 return nthIndexData->nthIndex(element); | 89 return nthIndexData->nthIndex(element); |
| 90 unsigned index = uncachedNthChildIndex(element); | 90 unsigned index = uncachedNthChildIndex(element); |
| 91 if (nthIndexCache && index > kCachedSiblingCountLimit) | 91 if (nthIndexCache && index > kCachedSiblingCountLimit) |
| 92 nthIndexCache->cacheNthIndexDataForParent(element); | 92 nthIndexCache->cacheNthIndexDataForParent(element); |
| 93 return index; | 93 return index; |
| 94 } | 94 } |
| 95 | 95 |
| 96 unsigned NthIndexCache::nthLastChildIndex(Element& element) { | 96 unsigned NthIndexCache::nthLastChildIndex(Element& element) { |
| 97 if (element.isPseudoElement() && !element.parentNode()) | 97 if (element.isPseudoElement() && !element.parentNode()) |
| 98 return 1; | 98 return 1; |
| 99 NthIndexCache* nthIndexCache = element.document().nthIndexCache(); | 99 NthIndexCache* nthIndexCache = element.document().nthIndexCache(); |
| 100 NthIndexData* nthIndexData = nullptr; | 100 NthIndexData* nthIndexData = nullptr; |
| 101 if (nthIndexCache && nthIndexCache->m_parentMap) | 101 if (nthIndexCache && nthIndexCache->m_parentMap) |
| 102 nthIndexData = nthIndexCache->m_parentMap->get(element.parentNode()); | 102 nthIndexData = nthIndexCache->m_parentMap->at(element.parentNode()); |
| 103 if (nthIndexData) | 103 if (nthIndexData) |
| 104 return nthIndexData->nthLastIndex(element); | 104 return nthIndexData->nthLastIndex(element); |
| 105 unsigned index = uncachedNthLastChildIndex(element); | 105 unsigned index = uncachedNthLastChildIndex(element); |
| 106 if (nthIndexCache && index > kCachedSiblingCountLimit) | 106 if (nthIndexCache && index > kCachedSiblingCountLimit) |
| 107 nthIndexCache->cacheNthIndexDataForParent(element); | 107 nthIndexCache->cacheNthIndexDataForParent(element); |
| 108 return index; | 108 return index; |
| 109 } | 109 } |
| 110 | 110 |
| 111 NthIndexData* NthIndexCache::nthTypeIndexDataForParent(Element& element) const { | 111 NthIndexData* NthIndexCache::nthTypeIndexDataForParent(Element& element) const { |
| 112 DCHECK(element.parentNode()); | 112 DCHECK(element.parentNode()); |
| 113 if (!m_parentMapForType) | 113 if (!m_parentMapForType) |
| 114 return nullptr; | 114 return nullptr; |
| 115 if (const IndexByType* map = m_parentMapForType->get(element.parentNode())) | 115 if (const IndexByType* map = m_parentMapForType->at(element.parentNode())) |
| 116 return map->get(element.tagName()); | 116 return map->at(element.tagName()); |
| 117 return nullptr; | 117 return nullptr; |
| 118 } | 118 } |
| 119 | 119 |
| 120 unsigned NthIndexCache::nthOfTypeIndex(Element& element) { | 120 unsigned NthIndexCache::nthOfTypeIndex(Element& element) { |
| 121 if (element.isPseudoElement() || !element.parentNode()) | 121 if (element.isPseudoElement() || !element.parentNode()) |
| 122 return 1; | 122 return 1; |
| 123 NthIndexCache* nthIndexCache = element.document().nthIndexCache(); | 123 NthIndexCache* nthIndexCache = element.document().nthIndexCache(); |
| 124 if (nthIndexCache) { | 124 if (nthIndexCache) { |
| 125 if (NthIndexData* nthIndexData = | 125 if (NthIndexData* nthIndexData = |
| 126 nthIndexCache->nthTypeIndexDataForParent(element)) | 126 nthIndexCache->nthTypeIndexDataForParent(element)) |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 } | 254 } |
| 255 DCHECK(count); | 255 DCHECK(count); |
| 256 m_count = count; | 256 m_count = count; |
| 257 } | 257 } |
| 258 | 258 |
| 259 DEFINE_TRACE(NthIndexData) { | 259 DEFINE_TRACE(NthIndexData) { |
| 260 visitor->trace(m_elementIndexMap); | 260 visitor->trace(m_elementIndexMap); |
| 261 } | 261 } |
| 262 | 262 |
| 263 } // namespace blink | 263 } // namespace blink |
| OLD | NEW |