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