wasmer_types/entity/
iter.rs1use crate::entity::EntityRef;
7use crate::lib::std::iter::Enumerate;
8use crate::lib::std::marker::PhantomData;
9use crate::lib::std::slice;
10use crate::lib::std::vec;
11
12pub struct Iter<'a, K: EntityRef, V>
14where
15 V: 'a,
16{
17 enumerate: Enumerate<slice::Iter<'a, V>>,
18 unused: PhantomData<K>,
19}
20
21impl<'a, K: EntityRef, V> Iter<'a, K, V> {
22 pub fn new(iter: slice::Iter<'a, V>) -> Self {
25 Self {
26 enumerate: iter.enumerate(),
27 unused: PhantomData,
28 }
29 }
30}
31
32impl<'a, K: EntityRef, V> Iterator for Iter<'a, K, V> {
33 type Item = (K, &'a V);
34
35 fn next(&mut self) -> Option<Self::Item> {
36 self.enumerate.next().map(|(i, v)| (K::new(i), v))
37 }
38
39 fn size_hint(&self) -> (usize, Option<usize>) {
40 self.enumerate.size_hint()
41 }
42}
43
44impl<'a, K: EntityRef, V> DoubleEndedIterator for Iter<'a, K, V> {
45 fn next_back(&mut self) -> Option<Self::Item> {
46 self.enumerate.next_back().map(|(i, v)| (K::new(i), v))
47 }
48}
49
50impl<'a, K: EntityRef, V> ExactSizeIterator for Iter<'a, K, V> {}
51
52pub struct IterMut<'a, K: EntityRef, V>
54where
55 V: 'a,
56{
57 enumerate: Enumerate<slice::IterMut<'a, V>>,
58 unused: PhantomData<K>,
59}
60
61impl<'a, K: EntityRef, V> IterMut<'a, K, V> {
62 pub fn new(iter: slice::IterMut<'a, V>) -> Self {
65 Self {
66 enumerate: iter.enumerate(),
67 unused: PhantomData,
68 }
69 }
70}
71
72impl<'a, K: EntityRef, V> Iterator for IterMut<'a, K, V> {
73 type Item = (K, &'a mut V);
74
75 fn next(&mut self) -> Option<Self::Item> {
76 self.enumerate.next().map(|(i, v)| (K::new(i), v))
77 }
78
79 fn size_hint(&self) -> (usize, Option<usize>) {
80 self.enumerate.size_hint()
81 }
82}
83
84impl<'a, K: EntityRef, V> DoubleEndedIterator for IterMut<'a, K, V> {
85 fn next_back(&mut self) -> Option<Self::Item> {
86 self.enumerate.next_back().map(|(i, v)| (K::new(i), v))
87 }
88}
89
90impl<'a, K: EntityRef, V> ExactSizeIterator for IterMut<'a, K, V> {}
91
92pub struct IntoIter<K: EntityRef, V> {
94 enumerate: Enumerate<vec::IntoIter<V>>,
95 unused: PhantomData<K>,
96}
97
98impl<K: EntityRef, V> IntoIter<K, V> {
99 pub fn new(iter: vec::IntoIter<V>) -> Self {
102 Self {
103 enumerate: iter.enumerate(),
104 unused: PhantomData,
105 }
106 }
107}
108
109impl<K: EntityRef, V> Iterator for IntoIter<K, V> {
110 type Item = (K, V);
111
112 fn next(&mut self) -> Option<Self::Item> {
113 self.enumerate.next().map(|(i, v)| (K::new(i), v))
114 }
115
116 fn size_hint(&self) -> (usize, Option<usize>) {
117 self.enumerate.size_hint()
118 }
119}
120
121impl<K: EntityRef, V> DoubleEndedIterator for IntoIter<K, V> {
122 fn next_back(&mut self) -> Option<Self::Item> {
123 self.enumerate.next_back().map(|(i, v)| (K::new(i), v))
124 }
125}
126
127impl<K: EntityRef, V> ExactSizeIterator for IntoIter<K, V> {}