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

Side by Side Diff: Source/core/html/HTMLCollection.cpp

Issue 305963014: Introduce and use type casting functions for several HTMLCollection types (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/html/HTMLAllCollection.cpp ('k') | Source/core/html/HTMLFormControlsCollection.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 r ights reserved. 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All r ights reserved.
5 * Copyright (C) 2014 Samsung Electronics. All rights reserved. 5 * Copyright (C) 2014 Samsung Electronics. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 template <> inline bool isMatchingElement(const HTMLCollection& htmlCollection, const Element& element) 194 template <> inline bool isMatchingElement(const HTMLCollection& htmlCollection, const Element& element)
195 { 195 {
196 CollectionType type = htmlCollection.type(); 196 CollectionType type = htmlCollection.type();
197 197
198 // These collections apply to any kind of Elements, not just HTMLElements. 198 // These collections apply to any kind of Elements, not just HTMLElements.
199 switch (type) { 199 switch (type) {
200 case DocAll: 200 case DocAll:
201 case NodeChildren: 201 case NodeChildren:
202 return true; 202 return true;
203 case ClassCollectionType: 203 case ClassCollectionType:
204 return static_cast<const ClassCollection&>(htmlCollection).elementMatche s(element); 204 return toClassCollection(htmlCollection).elementMatches(element);
205 case TagCollectionType: 205 case TagCollectionType:
206 return static_cast<const TagCollection&>(htmlCollection).elementMatches( element); 206 return toTagCollection(htmlCollection).elementMatches(element);
207 case HTMLTagCollectionType: 207 case HTMLTagCollectionType:
208 return static_cast<const HTMLTagCollection&>(htmlCollection).elementMatc hes(element); 208 return toHTMLTagCollection(htmlCollection).elementMatches(element);
209 default: 209 default:
210 break; 210 break;
211 } 211 }
212 212
213 // The following only applies to HTMLElements. 213 // The following only applies to HTMLElements.
214 if (!element.isHTMLElement()) 214 if (!element.isHTMLElement())
215 return false; 215 return false;
216 216
217 switch (type) { 217 switch (type) {
218 case DocImages: 218 case DocImages:
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 do { 332 do {
333 previous = ElementTraversal::previousSibling(*previous); 333 previous = ElementTraversal::previousSibling(*previous);
334 } while (previous && !isMatchingElement(nodeList, *previous)); 334 } while (previous && !isMatchingElement(nodeList, *previous));
335 return previous; 335 return previous;
336 } 336 }
337 337
338 Element* HTMLCollection::traverseToFirstElement() const 338 Element* HTMLCollection::traverseToFirstElement() const
339 { 339 {
340 switch (type()) { 340 switch (type()) {
341 case HTMLTagCollectionType: 341 case HTMLTagCollectionType:
342 return firstMatchingElement(static_cast<const HTMLTagCollection&>(*this) ); 342 return firstMatchingElement(toHTMLTagCollection(*this));
343 case ClassCollectionType: 343 case ClassCollectionType:
344 return firstMatchingElement(static_cast<const ClassCollection&>(*this)); 344 return firstMatchingElement(toClassCollection(*this));
345 default: 345 default:
346 if (overridesItemAfter()) 346 if (overridesItemAfter())
347 return virtualItemAfter(0); 347 return virtualItemAfter(0);
348 if (shouldOnlyIncludeDirectChildren()) 348 if (shouldOnlyIncludeDirectChildren())
349 return firstMatchingChildElement(*this); 349 return firstMatchingChildElement(*this);
350 return firstMatchingElement(*this); 350 return firstMatchingElement(*this);
351 } 351 }
352 } 352 }
353 353
354 Element* HTMLCollection::traverseToLastElement() const 354 Element* HTMLCollection::traverseToLastElement() const
(...skipping 11 matching lines...) Expand all
366 if (shouldOnlyIncludeDirectChildren()) 366 if (shouldOnlyIncludeDirectChildren())
367 return nextMatchingChildElement(*this, previous); 367 return nextMatchingChildElement(*this, previous);
368 return nextMatchingElement(*this, previous); 368 return nextMatchingElement(*this, previous);
369 } 369 }
370 370
371 Element* HTMLCollection::traverseForwardToOffset(unsigned offset, Element& curre ntElement, unsigned& currentOffset) const 371 Element* HTMLCollection::traverseForwardToOffset(unsigned offset, Element& curre ntElement, unsigned& currentOffset) const
372 { 372 {
373 ASSERT(currentOffset < offset); 373 ASSERT(currentOffset < offset);
374 switch (type()) { 374 switch (type()) {
375 case HTMLTagCollectionType: 375 case HTMLTagCollectionType:
376 return traverseMatchingElementsForwardToOffset(static_cast<const HTMLTag Collection&>(*this), offset, currentElement, currentOffset); 376 return traverseMatchingElementsForwardToOffset(toHTMLTagCollection(*this ), offset, currentElement, currentOffset);
377 case ClassCollectionType: 377 case ClassCollectionType:
378 return traverseMatchingElementsForwardToOffset(static_cast<const ClassCo llection&>(*this), offset, currentElement, currentOffset); 378 return traverseMatchingElementsForwardToOffset(toClassCollection(*this), offset, currentElement, currentOffset);
379 default: 379 default:
380 if (overridesItemAfter()) { 380 if (overridesItemAfter()) {
381 Element* next = &currentElement; 381 Element* next = &currentElement;
382 while ((next = virtualItemAfter(next))) { 382 while ((next = virtualItemAfter(next))) {
383 if (++currentOffset == offset) 383 if (++currentOffset == offset)
384 return next; 384 return next;
385 } 385 }
386 return 0; 386 return 0;
387 } 387 }
388 if (shouldOnlyIncludeDirectChildren()) { 388 if (shouldOnlyIncludeDirectChildren()) {
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 } 516 }
517 517
518 void HTMLCollection::trace(Visitor* visitor) 518 void HTMLCollection::trace(Visitor* visitor)
519 { 519 {
520 visitor->trace(m_namedItemCache); 520 visitor->trace(m_namedItemCache);
521 visitor->trace(m_collectionIndexCache); 521 visitor->trace(m_collectionIndexCache);
522 LiveNodeListBase::trace(visitor); 522 LiveNodeListBase::trace(visitor);
523 } 523 }
524 524
525 } // namespace WebCore 525 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/html/HTMLAllCollection.cpp ('k') | Source/core/html/HTMLFormControlsCollection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698