OLD | NEW |
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 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 if (type() == DocAll && !nameShouldBeVisibleInDocumentAll(e)) | 522 if (type() == DocAll && !nameShouldBeVisibleInDocumentAll(e)) |
523 return false; | 523 return false; |
524 | 524 |
525 return e->getNameAttribute() == name && e->getIdAttribute() != name; | 525 return e->getNameAttribute() == name && e->getIdAttribute() != name; |
526 } | 526 } |
527 | 527 |
528 inline Element* firstMatchingChildElement(const HTMLCollection* nodeList, Contai
nerNode* root) | 528 inline Element* firstMatchingChildElement(const HTMLCollection* nodeList, Contai
nerNode* root) |
529 { | 529 { |
530 Element* element = ElementTraversal::firstWithin(root); | 530 Element* element = ElementTraversal::firstWithin(root); |
531 while (element && !isMatchingElement(nodeList, element)) | 531 while (element && !isMatchingElement(nodeList, element)) |
532 element = ElementTraversal::nextSkippingChildren(element, root); | 532 element = ElementTraversal::nextSkippingChildren(*element, root); |
533 return element; | 533 return element; |
534 } | 534 } |
535 | 535 |
536 inline Element* nextMatchingChildElement(const HTMLCollection* nodeList, Element
* current, ContainerNode* root) | 536 inline Element* nextMatchingChildElement(const HTMLCollection* nodeList, Element
& current, ContainerNode* root) |
537 { | 537 { |
| 538 Element* next = ¤t; |
538 do { | 539 do { |
539 current = ElementTraversal::nextSkippingChildren(current, root); | 540 next = ElementTraversal::nextSkippingChildren(*next, root); |
540 } while (current && !isMatchingElement(nodeList, current)); | 541 } while (next && !isMatchingElement(nodeList, next)); |
541 return current; | 542 return next; |
542 } | 543 } |
543 | 544 |
544 inline Element* HTMLCollection::traverseFirstElement(unsigned& offsetInArray, Co
ntainerNode* root) const | 545 inline Element* HTMLCollection::traverseFirstElement(unsigned& offsetInArray, Co
ntainerNode* root) const |
545 { | 546 { |
546 if (overridesItemAfter()) | 547 if (overridesItemAfter()) |
547 return virtualItemAfter(offsetInArray, 0); | 548 return virtualItemAfter(offsetInArray, 0); |
548 ASSERT(!offsetInArray); | 549 ASSERT(!offsetInArray); |
549 if (shouldOnlyIncludeDirectChildren()) | 550 if (shouldOnlyIncludeDirectChildren()) |
550 return firstMatchingChildElement(static_cast<const HTMLCollection*>(this
), root); | 551 return firstMatchingChildElement(static_cast<const HTMLCollection*>(this
), root); |
551 return firstMatchingElement(static_cast<const HTMLCollection*>(this), root); | 552 return firstMatchingElement(static_cast<const HTMLCollection*>(this), root); |
552 } | 553 } |
553 | 554 |
554 inline Element* HTMLCollection::traverseNextElement(unsigned& offsetInArray, Ele
ment& previous, ContainerNode* root) const | 555 inline Element* HTMLCollection::traverseNextElement(unsigned& offsetInArray, Ele
ment& previous, ContainerNode* root) const |
555 { | 556 { |
556 if (overridesItemAfter()) | 557 if (overridesItemAfter()) |
557 return virtualItemAfter(offsetInArray, &previous); | 558 return virtualItemAfter(offsetInArray, &previous); |
558 ASSERT(!offsetInArray); | 559 ASSERT(!offsetInArray); |
559 if (shouldOnlyIncludeDirectChildren()) | 560 if (shouldOnlyIncludeDirectChildren()) |
560 return nextMatchingChildElement(this, &previous, root); | 561 return nextMatchingChildElement(this, previous, root); |
561 return nextMatchingElement(this, previous, root); | 562 return nextMatchingElement(this, previous, root); |
562 } | 563 } |
563 | 564 |
564 inline Element* HTMLCollection::traverseForwardToOffset(unsigned offset, Element
& currentElement, unsigned& currentOffset, unsigned& offsetInArray, ContainerNod
e* root) const | 565 inline Element* HTMLCollection::traverseForwardToOffset(unsigned offset, Element
& currentElement, unsigned& currentOffset, unsigned& offsetInArray, ContainerNod
e* root) const |
565 { | 566 { |
566 ASSERT(currentOffset < offset); | 567 ASSERT(currentOffset < offset); |
567 if (overridesItemAfter()) { | 568 if (overridesItemAfter()) { |
568 offsetInArray = m_cachedElementsArrayOffset; | 569 offsetInArray = m_cachedElementsArrayOffset; |
569 Element* next = ¤tElement; | 570 Element* next = ¤tElement; |
570 while ((next = virtualItemAfter(offsetInArray, next))) { | 571 while ((next = virtualItemAfter(offsetInArray, next))) { |
571 if (++currentOffset == offset) | 572 if (++currentOffset == offset) |
572 return next; | 573 return next; |
573 } | 574 } |
574 return 0; | 575 return 0; |
575 } | 576 } |
576 if (shouldOnlyIncludeDirectChildren()) { | 577 if (shouldOnlyIncludeDirectChildren()) { |
577 Element* next = ¤tElement; | 578 Element* next = ¤tElement; |
578 while ((next = nextMatchingChildElement(this, next, root))) { | 579 while ((next = nextMatchingChildElement(this, *next, root))) { |
579 if (++currentOffset == offset) | 580 if (++currentOffset == offset) |
580 return next; | 581 return next; |
581 } | 582 } |
582 return 0; | 583 return 0; |
583 } | 584 } |
584 return traverseMatchingElementsForwardToOffset(this, offset, currentElement,
currentOffset, root); | 585 return traverseMatchingElementsForwardToOffset(this, offset, currentElement,
currentOffset, root); |
585 } | 586 } |
586 | 587 |
587 Node* HTMLCollection::namedItem(const AtomicString& name) const | 588 Node* HTMLCollection::namedItem(const AtomicString& name) const |
588 { | 589 { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 | 683 |
683 void HTMLCollection::append(NodeCacheMap& map, const AtomicString& key, Element*
element) | 684 void HTMLCollection::append(NodeCacheMap& map, const AtomicString& key, Element*
element) |
684 { | 685 { |
685 OwnPtr<Vector<Element*> >& vector = map.add(key.impl(), nullptr).iterator->v
alue; | 686 OwnPtr<Vector<Element*> >& vector = map.add(key.impl(), nullptr).iterator->v
alue; |
686 if (!vector) | 687 if (!vector) |
687 vector = adoptPtr(new Vector<Element*>); | 688 vector = adoptPtr(new Vector<Element*>); |
688 vector->append(element); | 689 vector->append(element); |
689 } | 690 } |
690 | 691 |
691 } // namespace WebCore | 692 } // namespace WebCore |
OLD | NEW |