use mdflib_sys as ffi;
use std::marker::PhantomData;
use std::ops::Deref;
#[derive(Debug, Clone, Copy)]
pub struct ChannelArrayRef<'a> {
pub(crate) inner: *const ffi::IChannelArray,
_marker: PhantomData<&'a ()>,
}
impl std::fmt::Display for ChannelArrayRef<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"ChannelArray {{ index: {}, type: {}, storage: {}, flags: {}, nof_elements: {} }}",
self.get_index(),
self.get_type(),
self.get_storage(),
self.get_flags(),
self.get_nof_elements()
)
}
}
impl<'a> ChannelArrayRef<'a> {
#[allow(dead_code)]
pub(crate) fn new(inner: *const ffi::IChannelArray) -> Self {
Self {
inner,
_marker: PhantomData,
}
}
pub fn get_index(&self) -> u64 {
unsafe { ffi::ChannelArrayGetIndex(self.inner) }
}
pub fn get_type(&self) -> u8 {
unsafe { ffi::ChannelArrayGetType(self.inner) }
}
pub fn get_storage(&self) -> u8 {
unsafe { ffi::ChannelArrayGetStorage(self.inner) }
}
pub fn get_flags(&self) -> u32 {
unsafe { ffi::ChannelArrayGetFlags(self.inner) }
}
pub fn get_nof_elements(&self) -> u64 {
unsafe { ffi::ChannelArrayGetNofElements(self.inner) }
}
}
#[derive(Debug)]
pub struct ChannelArray<'a> {
pub(crate) inner: *mut ffi::IChannelArray,
inner_ref: ChannelArrayRef<'a>,
}
impl<'a> ChannelArray<'a> {
#[allow(dead_code)]
pub(crate) fn new(inner: *mut ffi::IChannelArray) -> Self {
Self {
inner,
inner_ref: ChannelArrayRef::new(inner),
}
}
pub fn set_type(&mut self, array_type: u8) {
unsafe {
ffi::ChannelArraySetType(self.inner, array_type);
}
}
pub fn set_storage(&mut self, storage: u8) {
unsafe {
ffi::ChannelArraySetStorage(self.inner, storage);
}
}
pub fn set_flags(&mut self, flags: u32) {
unsafe {
ffi::ChannelArraySetFlags(self.inner, flags);
}
}
}
impl<'a> Deref for ChannelArray<'a> {
type Target = ChannelArrayRef<'a>;
fn deref(&self) -> &Self::Target {
&self.inner_ref
}
}