Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. pub struct A {
  2. pub val: Vec<u32>,
  3. }
  4.  
  5. impl A {
  6. pub fn iter(&self) -> AIter {
  7. AIter {
  8. a: self,
  9. index: 0,
  10. }
  11. }
  12. }
  13.  
  14. pub struct AIter<'a> {
  15. a: &'a A,
  16. index: usize,
  17. }
  18.  
  19. pub struct AIterMut<'a> {
  20. a: &'a mut A,
  21. index: usize,
  22. }
  23.  
  24.  
  25. impl<'a> Iterator for AIter<'a> {
  26. type Item = &'a u32;
  27.  
  28. fn next(&mut self) -> Option<Self::Item> {
  29. let item = if self.a.val.len() > self.index {
  30. Some(&self.a.val[self.index])
  31. } else {
  32. None
  33. };
  34. self.index += 1;
  35. item
  36. }
  37. }
  38.  
  39. impl<'a> Iterator for AIterMut<'a> {
  40. type Item = &'a mut u32;
  41.  
  42. fn next(&mut self) -> Option<Self::Item> {
  43. let item = if self.a.val.len() > self.index {
  44. Some(&mut self.a.val[self.index])
  45. } else {
  46. None
  47. };
  48. self.index += 1;
  49. item
  50. }
  51. }
  52.  
  53. fn main() {
  54.  
  55. let a: Vec<u32> = (0..10).collect();
  56. let struct_a = A { val: a };
  57. let iter = struct_a.iter();
  58.  
  59. iter.for_each(|x| println!("{}", x));
  60.  
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement