#[derive(Debug)]
pub struct BytesIndices<'a, T> {
offset: usize,
bytes: &'a [T],
}
impl<'a, T> Clone for BytesIndices<'a, T> {
fn clone(&self) -> Self {
*self
}
}
impl<'a, T> Copy for BytesIndices<'a, T> {}
impl<'a, T> BytesIndices<'a, T> {
pub const fn new(bytes: &'a [T]) -> Self {
Self { offset: 0, bytes }
}
}
impl<T> Iterator for BytesIndices<'_, T>
where
T: Copy,
{
type Item = (usize, T);
fn next(&mut self) -> Option<Self::Item> {
if self.offset < self.bytes.len() {
let offset = self.offset;
self.offset += 1;
Some((offset, self.bytes[offset]))
} else {
None
}
}
fn size_hint(&self) -> (usize, Option<usize>) {
let size = self.bytes.len() - self.offset;
(size, Some(size))
}
}
impl<T> ExactSizeIterator for BytesIndices<'_, T> where T: Copy {}