Skip to content

Commit e56c561

Browse files
Lubrsiawesomekling
authored andcommitted
LibWeb: Add non-inclusive variants of subtree traversal
1 parent ca71ac4 commit e56c561

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

Userland/Libraries/LibWeb/TreeNode.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,46 @@ class TreeNode : public Weakable<T> {
191191
return IterationDecision::Continue;
192192
}
193193

194+
template<typename Callback>
195+
IterationDecision for_each_in_subtree(Callback callback) const
196+
{
197+
for (auto* child = first_child(); child; child = child->next_sibling()) {
198+
if (child->for_each_in_inclusive_subtree(callback) == IterationDecision::Break)
199+
return IterationDecision::Break;
200+
}
201+
return IterationDecision::Continue;
202+
}
203+
204+
template<typename Callback>
205+
IterationDecision for_each_in_subtree(Callback callback)
206+
{
207+
for (auto* child = first_child(); child; child = child->next_sibling()) {
208+
if (child->for_each_in_inclusive_subtree(callback) == IterationDecision::Break)
209+
return IterationDecision::Break;
210+
}
211+
return IterationDecision::Continue;
212+
}
213+
214+
template<typename U, typename Callback>
215+
IterationDecision for_each_in_subtree_of_type(Callback callback)
216+
{
217+
for (auto* child = first_child(); child; child = child->next_sibling()) {
218+
if (child->template for_each_in_inclusive_subtree_of_type<U>(callback) == IterationDecision::Break)
219+
return IterationDecision::Break;
220+
}
221+
return IterationDecision::Continue;
222+
}
223+
224+
template<typename U, typename Callback>
225+
IterationDecision for_each_in_subtree_of_type(Callback callback) const
226+
{
227+
for (auto* child = first_child(); child; child = child->next_sibling()) {
228+
if (child->template for_each_in_inclusive_subtree_of_type<U>(callback) == IterationDecision::Break)
229+
return IterationDecision::Break;
230+
}
231+
return IterationDecision::Continue;
232+
}
233+
194234
template<typename Callback>
195235
void for_each_child(Callback callback) const
196236
{

0 commit comments

Comments
 (0)