grit_bitvec/
local_proto_bitvec_iter.rs

1use 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) {/* RawBitVecIter will handle the deallocation */}
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) {/* RawBitVecIter will handle the deallocation */}
82}