o3 0.13.0

shared-nothing primitives
Documentation
use std::{marker, ptr};

use crate::buffer::pool::core;

pub struct Frozen {
    pub(super) core: ptr::NonNull<core::Core>,
    pub(super) index: u32,
    pub(super) len: u32,
    pub(super) marker: marker::PhantomData<*mut ()>,
}

impl Frozen {
    pub fn len(&self) -> usize {
        self.len as usize
    }

    pub fn is_empty(&self) -> bool {
        self.len == 0
    }

    pub fn as_slice(&self) -> &[u8] {
        core::Core::slice(self.core, self.index, self.len())
    }
}

impl Clone for Frozen {
    fn clone(&self) -> Self {
        core::Core::retain_slot(self.core, self.index);
        Self {
            core: self.core,
            index: self.index,
            len: self.len,
            marker: marker::PhantomData,
        }
    }
}

impl AsRef<[u8]> for Frozen {
    fn as_ref(&self) -> &[u8] {
        self.as_slice()
    }
}

impl Drop for Frozen {
    fn drop(&mut self) {
        core::Core::release_slot(self.core, self.index);
    }
}