use crate::segment::Segment;
const PARTIAL_RING: usize = 8;
#[derive(Clone, Copy)]
pub(crate) struct PartialRing {
entries: [(usize, u8); PARTIAL_RING],
len: u8,
}
impl PartialRing {
pub(crate) const EMPTY: Self = Self { entries: [(0, 0); PARTIAL_RING], len: 0 };
pub(crate) fn push(&mut self, seg: *mut Segment, ix: usize) {
if (self.len as usize) < PARTIAL_RING {
self.entries[self.len as usize] = (seg as usize, ix as u8);
self.len += 1;
}
}
pub(crate) fn pop(&mut self) -> Option<(*mut Segment, usize)> {
if self.len == 0 {
return None;
}
self.len -= 1;
let (s, ix) = self.entries[self.len as usize];
Some((s as *mut Segment, ix as usize))
}
}