use crate::socket::{_RX, _TX, Commit_, RingError, Socket};
impl Commit_<_TX> for Socket<_TX> {
fn commit_(&mut self, count: usize) -> Result<(), RingError> {
#[cfg(not(feature = "no_safety_checks"))]
if self.available < count as u32 {
return Err(RingError::NotAvailable);
}
self.available -= count as u32;
self.producer = self.producer.wrapping_add(count as u32);
self.x_ring.update_producer(self.producer);
Ok(())
}
}
impl Commit_<_RX> for Socket<_RX> {
fn commit_(&mut self, count: usize) -> Result<(), RingError> {
#[cfg(not(feature = "no_safety_checks"))]
if self.available < count as u32 {
return Err(RingError::NotAvailable);
}
let f_ring = &mut self.u_ring;
let x_ring = &mut self.x_ring;
for _ in 0..(count as u32) {
let addr = x_ring.desc_at(self.consumer & x_ring.mod_mask).addr;
*f_ring.mut_desc_at(self.producer & x_ring.mod_mask) = addr;
self.consumer = self.consumer.wrapping_add(1);
self.producer = self.producer.wrapping_add(1);
}
self.available -= count as u32;
x_ring.update_consumer(self.consumer);
f_ring.update_producer(self.producer);
Ok(())
}
}