pub struct IterStateHolder<'a, T> {
con: &'a RingBuffer<T>,
cur: usize,
}
impl<'a, T> Iterator for IterStateHolder<'a, T> {
type Item = &'a T;
fn next(&mut self) -> Option<Self::Item> {
if self.con.internal_array().is_linearized() {
if self.cur == self.con.last {
return None;
}
unsafe {
let mut ptr = self.con.buf.as_ptr().offset(self.cur as isize);
RingBuffer::<T>::increment(0, self.con.last, &mut self.cur);
return Some(&*ptr);
}
}
return None;
}
}
impl<'a, T> IntoIterator for &'a RingBuffer<T> {
type Item = &'a T;
type IntoIter = IterStateHolder<'a, T>;
fn into_iter(self) -> Self::IntoIter {
return IterStateHolder{
con: &self,
cur: self.first,
}
}
}
не считается