impl<'a, I> Iterator for DfsIterStateHolder<'a, I>
where I: Traverseable<'a, Item=I> + Eq + Hash
{
type Item = &'a I;
fn next(&mut self) -> Option<Self::Item> {
let current = self.bypass_buff.pop_front();
match current {
Some(v) => {
for el in v.traverser() {
if self.visited.insert(el) {
self.bypass_buff.push_back(el);
}
}
return current;
}
None => {
return None;
}
}
}
}