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

Unified Diff: Source/core/dom/ElementTraversal.h

Issue 642973003: Introduce typed Node/Element iterators for range-based for loops of C++11. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Experimental iterators for range-based for loop Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/dom/ElementTraversal.h
diff --git a/Source/core/dom/ElementTraversal.h b/Source/core/dom/ElementTraversal.h
index c5a39068ce5c6abc6801fbee57fdc919c7cd1865..8ab8374aa0ced3dc37c73ce5ecd46d17a4d5f049 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,10 @@ public:
template <class MatchFunc>
static ElementType* nextSibling(const Node&, MatchFunc);
+ static TraversalRange<TraversalChildrenIterator<Traversal<ElementType>>> childrenOf(Node&);
+ static TraversalRange<TraversalDescendantIterator<Traversal<ElementType>>> descendantsOf(Node&);
+ static TraversalRange<TraversalNextIterator<Traversal<ElementType>>> from(Node&);
+
private:
template <class NodeType>
static ElementType* firstChildTemplate(NodeType&);
@@ -113,6 +118,24 @@ private:
typedef Traversal<Element> ElementTraversal;
+template <class ElementType>
+inline TraversalRange<TraversalChildrenIterator<Traversal<ElementType>>> Traversal<ElementType>::childrenOf(Node& start)
+{
+ return TraversalRange<TraversalChildrenIterator<Traversal<ElementType>>>(start);
+};
+
+template <class ElementType>
+inline TraversalRange<TraversalDescendantIterator<Traversal<ElementType>>> Traversal<ElementType>::descendantsOf(Node& root)
+{
+ return TraversalRange<TraversalDescendantIterator<Traversal<ElementType>>>(root);
+};
+
+template <class ElementType>
+inline TraversalRange<TraversalNextIterator<Traversal<ElementType>>> Traversal<ElementType>::from(Node& start)
+{
+ 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>

Powered by Google App Engine
This is Rietveld 408576698