LibHTML: Add TreeNode::next_in_pre_order()

This function allows you to traverse in pre-order without recursing.
This commit is contained in:
Andreas Kling 2019-11-05 18:36:06 +01:00
parent 17752b2973
commit 1466a7364c
Notes: sideshowbarker 2024-07-19 11:22:14 +09:00

View file

@ -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
{