senax-common 0.4.8

Senax common library
Documentation
use bytes::BytesMut;
use tokio_uring::buf::{IoBuf, IoBufMut};

pub const LINKER_VER: u16 = 1;
pub const SENDER: u16 = 0;
pub const RECEIVER: u16 = 1;

pub(crate) struct IoBytesMut(BytesMut, usize, usize);
impl IoBytesMut {
    pub fn new(capacity: usize) -> Self {
        Self(BytesMut::with_capacity(capacity), 0, capacity)
    }
    pub fn advance(&mut self, cnt: usize) {
        self.1 += cnt;
    }
    pub fn get(self) -> BytesMut {
        self.0
    }
}
unsafe impl IoBuf for IoBytesMut {
    fn stable_ptr(&self) -> *const u8 {
        self.0.as_ptr()
    }

    fn bytes_init(&self) -> usize {
        self.0.len()
    }

    fn bytes_total(&self) -> usize {
        self.2 - self.1
    }
}
unsafe impl IoBufMut for IoBytesMut {
    fn stable_mut_ptr(&mut self) -> *mut u8 {
        unsafe { self.0.as_mut_ptr().add(self.1) }
    }

    unsafe fn set_init(&mut self, init_len: usize) {
        if self.0.len() < init_len + self.1 {
            unsafe {
                self.0.set_len(init_len + self.1);
            }
        }
    }
}