From 5cc99b645197cc6fb20bcbaddd33bdf8395c0286 Mon Sep 17 00:00:00 2001 From: Yuya Nishihara Date: Tue, 29 Nov 2022 18:17:46 +0900 Subject: [PATCH] revset: inline ChildrenRevsetIterator by using .filter() --- lib/src/revset.rs | 38 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/lib/src/revset.rs b/lib/src/revset.rs index f987b5a3a..f209e1a85 100644 --- a/lib/src/revset.rs +++ b/lib/src/revset.rs @@ -32,7 +32,7 @@ use thiserror::Error; use crate::backend::{BackendError, BackendResult, CommitId}; use crate::commit::Commit; -use crate::index::{HexPrefix, IndexEntry, IndexPosition, PrefixResolution, RevWalk}; +use crate::index::{HexPrefix, IndexEntry, PrefixResolution, RevWalk}; use crate::matchers::{EverythingMatcher, Matcher, PrefixMatcher}; use crate::op_store::WorkspaceId; use crate::repo::RepoRef; @@ -1391,38 +1391,20 @@ struct ChildrenRevset<'revset, 'repo: 'revset> { impl<'repo> Revset<'repo> for ChildrenRevset<'_, 'repo> { fn iter<'revset>(&'revset self) -> RevsetIterator<'revset, 'repo> { - let roots = self + let roots: HashSet<_> = self .root_set .iter() .map(|parent| parent.position()) .collect(); - RevsetIterator::new(Box::new(ChildrenRevsetIterator { - candidate_iter: self.candidate_set.iter(), - roots, - })) - } -} - -struct ChildrenRevsetIterator<'revset, 'repo> { - candidate_iter: RevsetIterator<'revset, 'repo>, - roots: HashSet, -} - -impl<'repo> Iterator for ChildrenRevsetIterator<'_, 'repo> { - type Item = IndexEntry<'repo>; - - fn next(&mut self) -> Option { - loop { - let candidate = self.candidate_iter.next()?; - if candidate - .parent_positions() - .iter() - .any(|parent_pos| self.roots.contains(parent_pos)) - { - return Some(candidate); - } - } + RevsetIterator::new(Box::new(self.candidate_set.iter().filter( + move |candidate| { + candidate + .parent_positions() + .iter() + .any(|parent_pos| roots.contains(parent_pos)) + }, + ))) } }