grit_bitvec/
static_proto_bitvec_iter.rs1use crate::{
2 BitProto,
3 RawBitVecIter,
4 RawBitVecDrain,
5};
6
7pub struct SProtoBitVecIter {
8 pub(crate) proto: &'static BitProto,
9 pub(crate) iter: RawBitVecIter
10}
11
12impl Iterator for SProtoBitVecIter {
13 type Item = usize;
14
15 #[inline(always)]
16 fn next(&mut self) -> Option<Self::Item> {
17 unsafe {self.iter.next(*self.proto)}
18 }
19
20 #[inline(always)]
21 fn size_hint(&self) -> (usize, Option<usize>) {
22 let len = self.iter.len();
23 (len, Some(len))
24 }
25}
26
27impl DoubleEndedIterator for SProtoBitVecIter {
28 #[inline(always)]
29 fn next_back(&mut self) -> Option<Self::Item> {
30 unsafe {self.iter.next_back(*self.proto)}
31 }
32}
33
34impl ExactSizeIterator for SProtoBitVecIter {
35 #[inline(always)]
36 fn len(&self) -> usize {
37 self.iter.len()
38 }
39}
40
41impl Drop for SProtoBitVecIter {
42 #[inline(always)]
43 fn drop(&mut self) {}
44}
45
46pub struct SProtoBitVecDrain<'vec>{
47 pub(crate) proto: &'static BitProto,
48 pub(crate) drain: RawBitVecDrain<'vec>
49}
50
51impl<'vec> Iterator for SProtoBitVecDrain<'vec> {
52 type Item = usize;
53
54 #[inline(always)]
55 fn next(&mut self) -> Option<Self::Item> {
56 unsafe {self.drain.next(*self.proto)}
57 }
58
59 #[inline(always)]
60 fn size_hint(&self) -> (usize, Option<usize>) {
61 let len = self.drain.len();
62 (len, Some(len))
63 }
64}
65
66impl<'vec> DoubleEndedIterator for SProtoBitVecDrain<'vec> {
67 #[inline(always)]
68 fn next_back(&mut self) -> Option<Self::Item> {
69 unsafe {self.drain.next_back(*self.proto)}
70 }
71}
72
73impl<'vec> ExactSizeIterator for SProtoBitVecDrain<'vec> {
74 #[inline(always)]
75 fn len(&self) -> usize {
76 self.drain.len()
77 }
78}
79
80impl<'vec> Drop for SProtoBitVecDrain<'vec> {
81 #[inline(always)]
82 fn drop(&mut self) {}
83}