| 1 | use std::{marker::PhantomData, ops::Index}; |
| 2 | |
| 3 | /// Internal class used to iterate over a [`QList`][] |
| 4 | /// |
| 5 | /// [`QList`]: https://doc.qt.io/qt-5/qlist.html |
| 6 | pub struct QListIterator<'a, T, I> |
| 7 | where |
| 8 | T: Index<usize, Output = I>, |
| 9 | { |
| 10 | list: &'a T, |
| 11 | index: usize, |
| 12 | size: usize, |
| 13 | item: PhantomData<&'a I>, |
| 14 | } |
| 15 | |
| 16 | impl<'a, T, I> QListIterator<'a, T, I> |
| 17 | where |
| 18 | T: Index<usize, Output = I>, |
| 19 | { |
| 20 | pub fn new(list: &'a T, index: usize, size: usize) -> Self { |
| 21 | Self { list, index, size, item: PhantomData } |
| 22 | } |
| 23 | } |
| 24 | |
| 25 | impl<'a, T, I> Iterator for QListIterator<'a, T, I> |
| 26 | where |
| 27 | T: Index<usize, Output = I>, |
| 28 | { |
| 29 | type Item = &'a I; |
| 30 | |
| 31 | fn next(&mut self) -> Option<Self::Item> { |
| 32 | if self.index == self.size { |
| 33 | None |
| 34 | } else { |
| 35 | self.index += 1; |
| 36 | Some(&self.list[self.index - 1]) |
| 37 | } |
| 38 | } |
| 39 | } |
| 40 | |