vec_collections/
iterators.rs1pub struct VecSetIter<I> {
3 i: I,
4}
5
6impl<I> sorted_iter::sorted_iterator::SortedByItem for VecSetIter<I> {}
7
8impl<I: Iterator> VecSetIter<I> {
9 pub(crate) fn new(i: I) -> Self {
10 Self { i }
11 }
12}
13
14impl<I: Iterator> Iterator for VecSetIter<I> {
15 type Item = I::Item;
16
17 fn next(&mut self) -> Option<Self::Item> {
18 self.i.next()
19 }
20
21 fn size_hint(&self) -> (usize, Option<usize>) {
22 self.i.size_hint()
23 }
24}
25
26pub struct VecMapIter<I> {
28 i: I,
29}
30
31impl<I> sorted_iter::sorted_pair_iterator::SortedByKey for VecMapIter<I> {}
32
33impl<I: Iterator> VecMapIter<I> {
34 pub(crate) fn new(i: I) -> Self {
35 Self { i }
36 }
37}
38
39impl<I: Iterator> Iterator for VecMapIter<I> {
40 type Item = I::Item;
41
42 fn next(&mut self) -> Option<Self::Item> {
43 self.i.next()
44 }
45
46 fn size_hint(&self) -> (usize, Option<usize>) {
47 self.i.size_hint()
48 }
49}
50
51pub(crate) struct SliceIterator<'a, T>(pub &'a [T]);
52
53impl<'a, T> Iterator for SliceIterator<'a, T> {
54 type Item = &'a T;
55
56 fn next(&mut self) -> Option<Self::Item> {
57 if self.0.is_empty() {
58 None
59 } else {
60 let res: Self::Item = &self.0[0];
61 self.0 = &self.0[1..];
62 Some(res)
63 }
64 }
65}
66
67impl<'a, T> SliceIterator<'a, T> {
68 pub fn as_slice(&self) -> &[T] {
69 self.0
70 }
71
72 pub(crate) fn drop_front(&mut self, n: usize) {
73 self.0 = &self.0[n..];
74 }
75
76 pub(crate) fn take_front(&mut self, n: usize) -> &'a [T] {
77 let res = &self.0[..n];
78 self.0 = &self.0[n..];
79 res
80 }
81}