1use crate::common::*;
2
3#[derive(Debug)]
5pub struct Iter<S, T> {
6 pub(super) owner: OwningRef<S, [T]>,
7 pub(super) index: usize,
8}
9
10impl<S, T> Clone for Iter<S, T>
11where
12 S: CloneStableAddress,
13{
14 fn clone(&self) -> Self {
15 Self {
16 owner: self.owner.clone(),
17 index: self.index,
18 }
19 }
20}
21
22impl<S, T> Iterator for Iter<S, T>
23where
24 S: CloneStableAddress,
25{
26 type Item = OwningRef<S, T>;
27
28 fn next(&mut self) -> Option<Self::Item> {
29 if self.index == self.owner.len() {
30 return None;
31 }
32
33 let item = self.owner.clone().map(|slice| &slice[self.index]);
34 self.index += 1;
35 Some(item)
36 }
37
38 fn size_hint(&self) -> (usize, Option<usize>) {
39 let len = self.owner.len();
40 (len, Some(len))
41 }
42}
43
44impl<S, T> ExactSizeIterator for Iter<S, T> where S: CloneStableAddress {}