use crate::service::static_config::message_type_details::MessageTypeDetails;
use iceoryx2_cal::{shared_memory::ShmPointer, shm_allocator::PointerOffset};
#[derive(Debug)]
pub struct Chunk {
pub(crate) header: *const u8,
pub(crate) user_header: *const u8,
pub(crate) payload: *const u8,
}
impl Chunk {
pub(crate) fn new(message_type_details: &MessageTypeDetails, offset: usize) -> Self {
let header = offset as *const u8;
Self {
user_header: message_type_details.user_header_ptr_from_header(header),
payload: message_type_details.payload_ptr_from_header(header),
header: offset as *const u8,
}
}
pub fn header_ptr(&self) -> *const u8 {
self.header
}
pub fn user_header_ptr(&self) -> *const u8 {
self.user_header
}
pub fn payload_ptr(&self) -> *const u8 {
self.payload
}
}
#[derive(Debug, Clone)]
pub struct ChunkMut {
pub(crate) offset: PointerOffset,
pub(crate) header: *mut u8,
pub(crate) user_header: *mut u8,
pub(crate) payload: *mut u8,
pub(crate) size: usize,
}
impl ChunkMut {
pub fn new(
message_type_details: &MessageTypeDetails,
shm_pointer: ShmPointer,
size: usize,
) -> Self {
Self {
user_header: message_type_details
.user_header_ptr_from_header(shm_pointer.data_ptr)
.cast_mut(),
payload: message_type_details
.payload_ptr_from_header(shm_pointer.data_ptr)
.cast_mut(),
header: shm_pointer.data_ptr,
offset: shm_pointer.offset,
size,
}
}
pub fn offset(&self) -> PointerOffset {
self.offset
}
pub fn header_ptr(&self) -> *const u8 {
self.header
}
pub fn header_mut_ptr(&mut self) -> *mut u8 {
self.header
}
pub fn user_header_ptr(&self) -> *const u8 {
self.user_header
}
pub fn user_header_mut_ptr(&mut self) -> *mut u8 {
self.user_header
}
pub fn payload_ptr(&self) -> *const u8 {
self.payload
}
pub fn payload_mut_ptr(&mut self) -> *mut u8 {
self.payload
}
pub fn to_shm_pointer(&self) -> ShmPointer {
ShmPointer {
offset: self.offset,
data_ptr: self.header,
}
}
pub fn size(&self) -> usize {
self.size
}
}