use crate::AnyBin;
#[derive(Debug)]
pub struct IntoIter<T> {
pos: usize,
inner: T,
len: usize,
}
impl<T: AnyBin> IntoIter<T> {
pub(crate) fn new(inner: T, pos: usize) -> Self {
let len = inner.len();
Self { inner, pos, len }
}
pub fn into_inner(self) -> T {
self.inner
}
}
impl<T: AnyBin> Iterator for IntoIter<T> {
type Item = u8;
#[inline]
fn next(&mut self) -> Option<u8> {
let current_pos = self.pos;
if current_pos < self.len {
self.pos += 1;
Some(self.inner.as_slice()[current_pos])
} else {
None
}
}
#[inline]
fn size_hint(&self) -> (usize, Option<usize>) {
let rem = if self.pos < self.len {
self.len - self.pos
} else {
0
};
(rem, Some(rem))
}
}
impl<T: AnyBin> ExactSizeIterator for IntoIter<T> {}