wasmer_types/entity/
keys.rs1use crate::entity::EntityRef;
10use crate::lib::std::marker::PhantomData;
11
12pub struct Keys<K: EntityRef> {
14 pos: usize,
15 rev_pos: usize,
16 unused: PhantomData<K>,
17}
18
19impl<K: EntityRef> Keys<K> {
20 pub fn with_len(len: usize) -> Self {
22 Self {
23 pos: 0,
24 rev_pos: len,
25 unused: PhantomData,
26 }
27 }
28}
29
30impl<K: EntityRef> Iterator for Keys<K> {
31 type Item = K;
32
33 fn next(&mut self) -> Option<Self::Item> {
34 if self.pos < self.rev_pos {
35 let k = K::new(self.pos);
36 self.pos += 1;
37 Some(k)
38 } else {
39 None
40 }
41 }
42
43 fn size_hint(&self) -> (usize, Option<usize>) {
44 let size = self.rev_pos - self.pos;
45 (size, Some(size))
46 }
47}
48
49impl<K: EntityRef> DoubleEndedIterator for Keys<K> {
50 fn next_back(&mut self) -> Option<Self::Item> {
51 if self.rev_pos > self.pos {
52 let k = K::new(self.rev_pos - 1);
53 self.rev_pos -= 1;
54 Some(k)
55 } else {
56 None
57 }
58 }
59}
60
61impl<K: EntityRef> ExactSizeIterator for Keys<K> {}