#[derive(Debug, Clone)]
pub struct EmbeddedReadSlice {
pub(super) bytes: bytes::Bytes,
}
impl EmbeddedReadSlice {
#[inline(always)]
pub(super) fn from_slice(value: &[u8]) -> Self {
Self {
bytes: bytes::Bytes::copy_from_slice(value),
}
}
#[inline(always)]
pub(crate) fn into_bytes(self) -> bytes::Bytes {
self.bytes
}
#[inline(always)]
pub fn len(&self) -> usize {
self.bytes.len()
}
#[inline(always)]
pub fn is_empty(&self) -> bool {
self.bytes.is_empty()
}
#[inline(always)]
pub fn as_ptr(&self) -> *const u8 {
self.bytes.as_ptr()
}
#[inline(always)]
pub fn as_slice(&self) -> &[u8] {
self.bytes.as_ref()
}
}
#[derive(Debug)]
pub struct EmbeddedReadView {
pub(super) item: Option<EmbeddedReadSlice>,
}
impl EmbeddedReadView {
#[inline(always)]
pub fn is_hit(&self) -> bool {
self.item.is_some()
}
#[inline(always)]
pub fn len(&self) -> usize {
self.item.as_ref().map_or(0, EmbeddedReadSlice::len)
}
#[inline(always)]
pub fn is_empty(&self) -> bool {
self.len() == 0
}
#[inline(always)]
pub fn slice(&self) -> Option<&[u8]> {
self.item.as_ref().map(EmbeddedReadSlice::as_slice)
}
#[inline(always)]
pub fn slice_meta(&self) -> Option<EmbeddedReadSlice> {
self.item.clone()
}
}
#[derive(Debug)]
pub struct EmbeddedBatchReadView {
pub(super) items: Vec<Option<EmbeddedReadSlice>>,
pub(super) hit_count: usize,
pub(super) total_bytes: usize,
}
impl EmbeddedBatchReadView {
#[inline(always)]
pub fn item_count(&self) -> usize {
self.items.len()
}
#[inline(always)]
pub fn hit_count(&self) -> usize {
self.hit_count
}
#[inline(always)]
pub fn total_bytes(&self) -> usize {
self.total_bytes
}
#[inline(always)]
pub fn all_hit(&self) -> bool {
self.hit_count == self.items.len()
}
#[inline(always)]
pub fn slice(&self, index: usize) -> Option<&[u8]> {
self.items
.get(index)
.and_then(|item| item.as_ref())
.map(EmbeddedReadSlice::as_slice)
}
#[inline(always)]
pub fn slice_meta(&self, index: usize) -> Option<EmbeddedReadSlice> {
self.items.get(index).cloned().flatten()
}
#[inline(always)]
pub fn lengths(&self) -> Vec<usize> {
self.items
.iter()
.map(|item| item.as_ref().map_or(0, EmbeddedReadSlice::len))
.collect()
}
}
pub type EmbeddedSessionBatchView = EmbeddedBatchReadView;
#[derive(Debug)]
pub struct OwnedEmbeddedReadView {
pub(super) item: Option<EmbeddedReadSlice>,
}
impl OwnedEmbeddedReadView {
#[inline(always)]
pub fn is_hit(&self) -> bool {
self.item.is_some()
}
#[inline(always)]
pub fn len(&self) -> usize {
self.item.as_ref().map_or(0, EmbeddedReadSlice::len)
}
#[inline(always)]
pub fn is_empty(&self) -> bool {
self.len() == 0
}
#[inline(always)]
pub fn slice(&self) -> Option<&[u8]> {
self.item.as_ref().map(EmbeddedReadSlice::as_slice)
}
#[inline(always)]
pub fn slice_meta(&self) -> Option<EmbeddedReadSlice> {
self.item.clone()
}
}
#[derive(Debug)]
pub struct OwnedEmbeddedBatchReadView {
pub(super) items: Vec<Option<EmbeddedReadSlice>>,
pub(super) hit_count: usize,
pub(super) total_bytes: usize,
}
impl OwnedEmbeddedBatchReadView {
#[inline(always)]
pub fn item_count(&self) -> usize {
self.items.len()
}
#[inline(always)]
pub fn hit_count(&self) -> usize {
self.hit_count
}
#[inline(always)]
pub fn total_bytes(&self) -> usize {
self.total_bytes
}
#[inline(always)]
pub fn all_hit(&self) -> bool {
self.hit_count == self.items.len()
}
#[inline(always)]
pub fn slice(&self, index: usize) -> Option<&[u8]> {
self.items
.get(index)
.and_then(|item| item.as_ref())
.map(EmbeddedReadSlice::as_slice)
}
#[inline(always)]
pub fn slice_meta(&self, index: usize) -> Option<EmbeddedReadSlice> {
self.items.get(index).cloned().flatten()
}
#[inline(always)]
pub fn lengths(&self) -> Vec<usize> {
self.items
.iter()
.map(|item| item.as_ref().map_or(0, EmbeddedReadSlice::len))
.collect()
}
}
pub type OwnedEmbeddedSessionBatchView = OwnedEmbeddedBatchReadView;
#[derive(Debug)]
pub struct OwnedEmbeddedSessionPackedView {
pub(super) buffer: EmbeddedReadSlice,
pub(super) offsets: Vec<usize>,
pub(super) lengths: Vec<usize>,
pub(super) hit_count: usize,
pub(super) total_bytes: usize,
}
impl OwnedEmbeddedSessionPackedView {
#[inline(always)]
pub fn item_count(&self) -> usize {
self.offsets.len()
}
#[inline(always)]
pub fn hit_count(&self) -> usize {
self.hit_count
}
#[inline(always)]
pub fn total_bytes(&self) -> usize {
self.total_bytes
}
#[inline(always)]
pub fn all_hit(&self) -> bool {
self.hit_count == self.offsets.len()
}
#[inline(always)]
pub fn buffer(&self) -> &[u8] {
self.buffer.as_slice()
}
#[inline(always)]
pub fn buffer_meta(&self) -> EmbeddedReadSlice {
self.buffer.clone()
}
#[inline(always)]
pub fn offsets(&self) -> &[usize] {
&self.offsets
}
#[inline(always)]
pub fn lengths(&self) -> &[usize] {
&self.lengths
}
}