Guest User

Untitled

a guest
May 22nd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.55 KB | None | 0 0
  1. struct DoubleIfNextOdd<I: Iterator>(std::iter::Peekable<I>);
  2.  
  3. impl<I: Iterator<Item = i32>> Iterator for DoubleIfNextOdd<I> {
  4. type Item = I::Item;
  5.  
  6. fn next(&mut self) -> Option<Self::Item> {
  7. let double = match self.0.peek() {
  8. Some(i) if i % 2 != 0 => true,
  9. _ => false,
  10. };
  11. if double {
  12. self.0.next().map(|i| i * 2)
  13. }
  14. else {
  15. self.0.next()
  16. }
  17. }
  18. }
  19.  
  20. fn main() {
  21. for i in DoubleIfNextOdd(vec![1, 2, 3].into_iter().peekable()) {
  22. println!("{}", i);
  23. }
  24. }
Add Comment
Please, Sign In to add comment