Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. use std::collections::HashSet;
  2. use std::iter;
  3.  
  4. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
  5. struct Id(pub usize);
  6.  
  7. type View = Vec<Id>;
  8. type IdSet = HashSet<Id>;
  9.  
  10. fn find_stuff(view: View, ids: &IdSet) -> impl Iterator<Item=Id> {
  11. let mut ids = ids.iter();
  12. iter::from_fn(move || {
  13. while let Some(id) = ids.next() {
  14. if view.contains(id) {
  15. return Some(*id);
  16. }
  17. }
  18. None
  19. })
  20. }
  21.  
  22. fn set_from_seed(id: Id) -> IdSet {
  23. let mut result = IdSet::with_capacity(1);
  24. result.insert(id);
  25. result
  26. }
  27.  
  28. fn main() {
  29. let view = vec![Id(0), Id(1), Id(2), Id(3)];
  30. for x in find_stuff(view, &set_from_seed(Id(2))) {
  31. println!("{:?}", x);
  32. }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement