use crate::ffi::libscamperctrl::{self, ScamperMuxT};
use crate::vp::ScamperVp;
pub struct ScamperMux {
pub(crate) inner: *mut ScamperMuxT,
}
impl ScamperMux {
pub(crate) unsafe fn from_ptr(ptr: *mut ScamperMuxT) -> Option<Self> {
if ptr.is_null() { return None; }
Some(ScamperMux { inner: ptr })
}
pub fn vps(&self) -> Vec<ScamperVp> {
let mut vps = Vec::new();
let vpset = unsafe { libscamperctrl::scamper_vpset_get(self.inner) };
if vpset.is_null() { return vps; }
let count = unsafe { libscamperctrl::scamper_vpset_vp_count(vpset) };
for i in 0..count {
let vp_ptr = unsafe { libscamperctrl::scamper_vpset_vp_get(vpset, i) };
if let Some(vp) = unsafe { ScamperVp::from_ptr(vp_ptr) } {
vps.push(vp);
}
}
unsafe { libscamperctrl::scamper_vpset_free(vpset) };
vps
}
}
unsafe impl Send for ScamperMux {}
unsafe impl Sync for ScamperMux {}