Chromium Code Reviews| Index: Source/core/dom/ElementTraversal.h |
| diff --git a/Source/core/dom/ElementTraversal.h b/Source/core/dom/ElementTraversal.h |
| index c5a39068ce5c6abc6801fbee57fdc919c7cd1865..3d24b383ad877ab32524b92c96a2615be8e11081 100644 |
| --- a/Source/core/dom/ElementTraversal.h |
| +++ b/Source/core/dom/ElementTraversal.h |
| @@ -34,6 +34,7 @@ namespace blink { |
| template <class ElementType> |
| class Traversal { |
| public: |
| + using TraversalNodeType = ElementType; |
| // First or last ElementType child of the node. |
| static ElementType* firstChild(const ContainerNode& current) { return firstChildTemplate(current); } |
| static ElementType* firstChild(const Node& current) { return firstChildTemplate(current); } |
| @@ -94,6 +95,11 @@ public: |
| template <class MatchFunc> |
| static ElementType* nextSibling(const Node&, MatchFunc); |
| + static TraversalRange<TraversalChildrenIterator<Traversal<ElementType>>> childrenOf(const Node&); |
| + static TraversalRange<TraversalDescendantIterator<Traversal<ElementType>>> descendantsOf(const Node&); |
| + static TraversalRange<TraversalInclusiveDescendantIterator<Traversal<ElementType>>> inclusiveDescendantsOf(const ElementType&); |
| + static TraversalRange<TraversalNextIterator<Traversal<ElementType>>> fromNext(const Node&); |
| + |
| private: |
| template <class NodeType> |
| static ElementType* firstChildTemplate(NodeType&); |
| @@ -113,6 +119,30 @@ private: |
| typedef Traversal<Element> ElementTraversal; |
| +template <class ElementType> |
| +inline TraversalRange<TraversalChildrenIterator<Traversal<ElementType>>> Traversal<ElementType>::childrenOf(const Node& start) |
| +{ |
| + return TraversalRange<TraversalChildrenIterator<Traversal<ElementType>>>(start); |
| +}; |
| + |
| +template <class ElementType> |
| +inline TraversalRange<TraversalDescendantIterator<Traversal<ElementType>>> Traversal<ElementType>::descendantsOf(const Node& root) |
| +{ |
| + return TraversalRange<TraversalDescendantIterator<Traversal<ElementType>>>(root); |
| +}; |
| + |
| +template <class ElementType> |
| +inline TraversalRange<TraversalInclusiveDescendantIterator<Traversal<ElementType>>> Traversal<ElementType>::inclusiveDescendantsOf(const ElementType& root) |
| +{ |
| + return TraversalRange<TraversalInclusiveDescendantIterator<Traversal<ElementType>>>(root); |
| +}; |
| + |
| +template <class ElementType> |
| +inline TraversalRange<TraversalNextIterator<Traversal<ElementType>>> Traversal<ElementType>::fromNext(const Node& start) |
|
dglazkov
2014/10/21 16:03:11
This name had stumped me a little bit. What does i
hayato
2014/10/22 05:15:18
NodeTraversal::startsFromNext might be better?
An
|
| +{ |
| + return TraversalRange<TraversalNextIterator<Traversal<ElementType>>>(start); |
| +}; |
| + |
| // Specialized for pure Element to exploit the fact that Elements parent is always either another Element or the root. |
| template <> |
| template <class NodeType> |