Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLCollection.h

Issue 2765653002: Remove a level of indirection in HTMLCollection. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All
5 * rights reserved. 5 * rights reserved.
6 * Copyright (C) 2014 Samsung Electronics. All rights reserved. 6 * Copyright (C) 2014 Samsung Electronics. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 115
116 DECLARE_VIRTUAL_TRACE(); 116 DECLARE_VIRTUAL_TRACE();
117 117
118 protected: 118 protected:
119 HTMLCollection(ContainerNode& base, CollectionType, ItemAfterOverrideType); 119 HTMLCollection(ContainerNode& base, CollectionType, ItemAfterOverrideType);
120 120
121 class NamedItemCache final : public GarbageCollected<NamedItemCache> { 121 class NamedItemCache final : public GarbageCollected<NamedItemCache> {
122 public: 122 public:
123 static NamedItemCache* create() { return new NamedItemCache; } 123 static NamedItemCache* create() { return new NamedItemCache; }
124 124
125 HeapVector<Member<Element>>* getElementsById(const AtomicString& id) const { 125 const HeapVector<Member<Element>>* getElementsById(
126 return m_idCache.at(id.impl()); 126 const AtomicString& id) const {
127 auto it = m_idCache.find(id.impl());
128 if (it == m_idCache.end())
129 return nullptr;
130 return &it->value;
127 } 131 }
128 HeapVector<Member<Element>>* getElementsByName( 132 const HeapVector<Member<Element>>* getElementsByName(
129 const AtomicString& name) const { 133 const AtomicString& name) const {
130 return m_nameCache.at(name.impl()); 134 auto it = m_nameCache.find(name.impl());
135 if (it == m_nameCache.end())
136 return nullptr;
137 return &it->value;
131 } 138 }
132 void addElementWithId(const AtomicString& id, Element* element) { 139 void addElementWithId(const AtomicString& id, Element* element) {
133 addElementToMap(m_idCache, id, element); 140 addElementToMap(m_idCache, id, element);
134 } 141 }
135 void addElementWithName(const AtomicString& name, Element* element) { 142 void addElementWithName(const AtomicString& name, Element* element) {
136 addElementToMap(m_nameCache, name, element); 143 addElementToMap(m_nameCache, name, element);
137 } 144 }
138 145
139 DEFINE_INLINE_TRACE() { 146 DEFINE_INLINE_TRACE() {
140 visitor->trace(m_idCache); 147 visitor->trace(m_idCache);
141 visitor->trace(m_nameCache); 148 visitor->trace(m_nameCache);
142 } 149 }
143 150
144 private: 151 private:
145 NamedItemCache(); 152 NamedItemCache();
146 typedef HeapHashMap<StringImpl*, Member<HeapVector<Member<Element>>>> 153 typedef HeapHashMap<StringImpl*, HeapVector<Member<Element>>>
147 StringToElementsMap; 154 StringToElementsMap;
148 static void addElementToMap(StringToElementsMap& map, 155 static void addElementToMap(StringToElementsMap& map,
149 const AtomicString& key, 156 const AtomicString& key,
150 Element* element) { 157 Element* element) {
151 Member<HeapVector<Member<Element>>>& vector = 158 HeapVector<Member<Element>>& vector =
152 map.insert(key.impl(), nullptr).storedValue->value; 159 map.insert(key.impl(), HeapVector<Member<Element>>())
153 if (!vector) 160 .storedValue->value;
154 vector = new HeapVector<Member<Element>>; 161 vector.push_back(element);
155 vector->push_back(element);
156 } 162 }
157 163
158 StringToElementsMap m_idCache; 164 StringToElementsMap m_idCache;
159 StringToElementsMap m_nameCache; 165 StringToElementsMap m_nameCache;
160 }; 166 };
161 167
162 bool overridesItemAfter() const { return m_overridesItemAfter; } 168 bool overridesItemAfter() const { return m_overridesItemAfter; }
163 virtual Element* virtualItemAfter(Element*) const; 169 virtual Element* virtualItemAfter(Element*) const;
164 bool shouldOnlyIncludeDirectChildren() const { 170 bool shouldOnlyIncludeDirectChildren() const {
165 return m_shouldOnlyIncludeDirectChildren; 171 return m_shouldOnlyIncludeDirectChildren;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 if (!attrName || 226 if (!attrName ||
221 shouldInvalidateTypeOnAttributeChange(invalidationType(), *attrName)) 227 shouldInvalidateTypeOnAttributeChange(invalidationType(), *attrName))
222 invalidateCache(); 228 invalidateCache();
223 else if (*attrName == HTMLNames::idAttr || *attrName == HTMLNames::nameAttr) 229 else if (*attrName == HTMLNames::idAttr || *attrName == HTMLNames::nameAttr)
224 invalidateIdNameCacheMaps(); 230 invalidateIdNameCacheMaps();
225 } 231 }
226 232
227 } // namespace blink 233 } // namespace blink
228 234
229 #endif // HTMLCollection_h 235 #endif // HTMLCollection_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLAllCollection.cpp ('k') | third_party/WebKit/Source/core/html/HTMLCollection.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698