Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. struct ChunkedIterator<T, R> where T:Iterator<Item = R> {
  2. source: T,
  3. inner: Vec<R>,
  4. size: usize
  5. }
  6. impl<T, R> ChunkedIterator<T, R> where T:Iterator<Item = R> {
  7. fn new(source: T, size: usize) -> Self {
  8. ChunkedIterator {
  9. size: size-1,
  10. inner: vec![],
  11. source: source
  12. }
  13. }
  14. }
  15. impl<T, R> Iterator for ChunkedIterator<T, R> where T:Iterator<Item = R> {
  16.  
  17. type Item = Vec<R>;
  18.  
  19. fn next(&mut self) -> Option<Vec<R>> {
  20. while let inner_opt = self.source.next() {
  21. match inner_opt {
  22. Some(inner_item) => {
  23. self.inner.push(inner_item);
  24. if self.inner.len() > self.size {
  25. return Some(self.inner.split_off(0))
  26. }
  27. },
  28. None => match self.inner.len() {
  29. 0 => return None,
  30. _ => return Some(self.inner.split_off(0))
  31. }
  32. }
  33. }
  34. None
  35. }
  36. }
  37.  
  38. #[test]
  39. fn lazy_iter_works() {
  40. let results:Vec<Vec<i32>> = ChunkedIterator::new((0..20), 3).collect();
  41. assert_eq!(results, vec![
  42. vec![0, 1, 2],
  43. vec![3, 4, 5],
  44. vec![6, 7, 8],
  45. vec![9, 10, 11],
  46. vec![12, 13, 14],
  47. vec![15, 16, 17],
  48. vec![18, 19]
  49. ]);
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement