Clean up node_traversal and element_traversal |
|
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.
,
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
,
Sep 11
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 |
|
Comment 1 by bugdroid1@chromium.org
, Sep 7