浏览代码

LibHTML: Add TreeNode::next_in_pre_order()

This function allows you to traverse in pre-order without recursing.
Andreas Kling 5 年之前
父节点
当前提交
1466a7364c
共有 1 个文件被更改,包括 20 次插入0 次删除
  1. 20 0
      Libraries/LibHTML/TreeNode.h

+ 20 - 0
Libraries/LibHTML/TreeNode.h

@@ -53,6 +53,26 @@ public:
 
     bool is_child_allowed(const T&) const { return true; }
 
+    T* next_in_pre_order()
+    {
+        if (first_child())
+            return first_child();
+        T* node;
+        if (!(node = next_sibling())) {
+            node = parent();
+            while (node && !node->next_sibling())
+                node = node->parent();
+            if (node)
+                node = node->next_sibling();
+        }
+        return node;
+    }
+
+    const T* next_in_pre_order() const
+    {
+        return const_cast<TreeNode*>(this)->next_in_pre_order();
+    }
+
     template<typename Callback>
     IterationDecision for_each_in_subtree(Callback callback) const
     {