diff options
author | Corey Farwell <coreyf@rwell.org> | 2017-06-23 18:51:46 -0400 |
---|---|---|
committer | Corey Farwell <coreyf@rwell.org> | 2017-06-23 18:51:46 -0400 |
commit | 0cabc5c7fd1849fca9caf5668f6370e4c9e3ad4e (patch) | |
tree | 7e6c01cadb35245a2d9e3b95bb96cc7a2991464d /components/script/dom/htmlcollection.rs | |
parent | daed0a51839112054036f220ba1a6f03a8325b9b (diff) | |
download | servo-0cabc5c7fd1849fca9caf5668f6370e4c9e3ad4e.tar.gz servo-0cabc5c7fd1849fca9caf5668f6370e4c9e3ad4e.zip |
Replace iterator struct with anonymous return iterator types.
Similar to https://github.com/servo/servo/pull/17488.
Diffstat (limited to 'components/script/dom/htmlcollection.rs')
-rw-r--r-- | components/script/dom/htmlcollection.rs | 36 |
1 files changed, 6 insertions, 30 deletions
diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs index 814ea766f53..6cc3dbb8dc6 100644 --- a/components/script/dom/htmlcollection.rs +++ b/components/script/dom/htmlcollection.rs @@ -224,11 +224,9 @@ impl HTMLCollection { pub fn elements_iter_after<'a>(&'a self, after: &'a Node) -> impl Iterator<Item=Root<Element>> + 'a { // Iterate forwards from a node. - HTMLCollectionElementsIter { - node_iter: after.following_nodes(&self.root), - root: Root::from_ref(&self.root), - filter: &self.filter, - } + after.following_nodes(&self.root) + .filter_map(Root::downcast) + .filter(move |element| self.filter.filter(&element, &self.root)) } pub fn elements_iter<'a>(&'a self) -> impl Iterator<Item=Root<Element>> + 'a { @@ -238,11 +236,9 @@ impl HTMLCollection { pub fn elements_iter_before<'a>(&'a self, before: &'a Node) -> impl Iterator<Item=Root<Element>> + 'a { // Iterate backwards from a node. - HTMLCollectionElementsIter { - node_iter: before.preceding_nodes(&self.root), - root: Root::from_ref(&self.root), - filter: &self.filter, - } + before.preceding_nodes(&self.root) + .filter_map(Root::downcast) + .filter(move |element| self.filter.filter(&element, &self.root)) } pub fn root_node(&self) -> Root<Node> { @@ -250,26 +246,6 @@ impl HTMLCollection { } } -// TODO: Make this generic, and avoid code duplication -struct HTMLCollectionElementsIter<'a, I> { - node_iter: I, - root: Root<Node>, - filter: &'a Box<CollectionFilter>, -} - -impl<'a, I: Iterator<Item=Root<Node>>> Iterator for HTMLCollectionElementsIter<'a, I> { - type Item = Root<Element>; - - fn next(&mut self) -> Option<Self::Item> { - let filter = &self.filter; - let root = &self.root; - self.node_iter.by_ref() - .filter_map(Root::downcast) - .filter(|element| filter.filter(&element, root)) - .next() - } -} - impl HTMLCollectionMethods for HTMLCollection { // https://dom.spec.whatwg.org/#dom-htmlcollection-length fn Length(&self) -> u32 { |