New issue
Advanced search Search tips

Issue 880052 link

Starred by 1 user

Issue metadata

Status: Assigned
Owner:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Bug



Sign in to add a comment

Clean up node_traversal and element_traversal

Project Member Reported by hayato@chromium.org, Sep 3

Issue description

core/dom/{node_traversal.h, element_traversal.h} provide very basic fundamentals on which various traversal functions can be defined, however, these files are getting messy; their usages are difficult to understand because they use complex templates.

It would be better to simplify these somehow without sacrificing performance; We must keep zero-cost abstraction here.

 
Project Member

Comment 2 by bugdroid1@chromium.org, Sep 10

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/aa8def6bbae55ff50a43a091b22cce71ddd1e23e

commit aa8def6bbae55ff50a43a091b22cce71ddd1e23e
Author: Hayato Ito <hayato@chromium.org>
Date: Mon Sep 10 06:29:09 2018

Rewrite range-based node traversal foundations for better ergonomics

Remove several TraversalXXXIterator, such as TraversalAncestorIterator, TraversalChildrenIterator,
in favor of reusing TraversalIterator with TraversalXXX wrapper, such as TraversalParent or
TraversalSibling.

This CL also introduces several short names for some common traversal patterns, such as:
TraversalAncestorRange = TraversalRange<TraversalIterator<TraversalParent<T>>>,
for better ergonomics.

No behavior change.

Bug: 880052
Change-Id: I0ccf2a0de672932cff2df38591b8376df9d52175
Reviewed-on: https://chromium-review.googlesource.com/1205924
Commit-Queue: Hayato Ito <hayato@chromium.org>
Reviewed-by: Yoichi Osato <yoichio@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589836}
[modify] https://crrev.com/aa8def6bbae55ff50a43a091b22cce71ddd1e23e/third_party/blink/renderer/core/dom/element_traversal.h
[modify] https://crrev.com/aa8def6bbae55ff50a43a091b22cce71ddd1e23e/third_party/blink/renderer/core/dom/flat_tree_traversal.h
[modify] https://crrev.com/aa8def6bbae55ff50a43a091b22cce71ddd1e23e/third_party/blink/renderer/core/dom/node_traversal.h
[modify] https://crrev.com/aa8def6bbae55ff50a43a091b22cce71ddd1e23e/third_party/blink/renderer/core/dom/traversal_range.h

I have a further idea to make it more ergonomics, like:

for (Node& element : AncestorsOf<Node>(start)) { ... }
for (Element& element : AncestorsOf<HTMLSlotElement>(start)) { ... }
for (auto& n : ChildrenOf<FlatTreeTraversal>>(start)) { ... }

so each XXXTraversal doesn't have to define their own range-based utility functions.

Sign in to add a comment