use crate::sys;
use crate::SBMemoryRegionInfo;
#[derive(Debug)]
pub struct SBMemoryRegionInfoList {
pub raw: sys::SBMemoryRegionInfoListRef,
}
impl SBMemoryRegionInfoList {
pub(crate) fn wrap(raw: sys::SBMemoryRegionInfoListRef) -> SBMemoryRegionInfoList {
SBMemoryRegionInfoList { raw }
}
#[allow(missing_docs)]
pub fn append(&self, region: SBMemoryRegionInfo) {
unsafe { sys::SBMemoryRegionInfoListAppend(self.raw, region.raw) };
}
#[allow(missing_docs)]
pub fn append_list(&self, region_list: SBMemoryRegionInfoList) {
unsafe { sys::SBMemoryRegionInfoListAppendList(self.raw, region_list.raw) };
}
pub fn is_empty(&self) -> bool {
unsafe { sys::SBMemoryRegionInfoListGetSize(self.raw) == 0 }
}
pub fn clear(&self) {
unsafe { sys::SBMemoryRegionInfoListClear(self.raw) };
}
pub fn iter(&self) -> SBMemoryRegionInfoListIter {
SBMemoryRegionInfoListIter { list: self, idx: 0 }
}
}
impl Clone for SBMemoryRegionInfoList {
fn clone(&self) -> Self {
Self {
raw: unsafe { sys::CloneSBMemoryRegionInfoList(self.raw) },
}
}
}
impl Drop for SBMemoryRegionInfoList {
fn drop(&mut self) {
unsafe { sys::DisposeSBMemoryRegionInfoList(self.raw) };
}
}
impl<'d> IntoIterator for &'d SBMemoryRegionInfoList {
type IntoIter = SBMemoryRegionInfoListIter<'d>;
type Item = SBMemoryRegionInfo;
fn into_iter(self) -> Self::IntoIter {
self.iter()
}
}
unsafe impl Send for SBMemoryRegionInfoList {}
unsafe impl Sync for SBMemoryRegionInfoList {}
pub struct SBMemoryRegionInfoListIter<'d> {
list: &'d SBMemoryRegionInfoList,
idx: u32,
}
impl Iterator for SBMemoryRegionInfoListIter<'_> {
type Item = SBMemoryRegionInfo;
fn next(&mut self) -> Option<SBMemoryRegionInfo> {
if self.idx < unsafe { sys::SBMemoryRegionInfoListGetSize(self.list.raw) } {
let info = SBMemoryRegionInfo::default();
let r = if unsafe {
sys::SBMemoryRegionInfoListGetMemoryRegionAtIndex(self.list.raw, self.idx, info.raw)
} {
Some(info)
} else {
None
};
self.idx += 1;
r
} else {
None
}
}
fn size_hint(&self) -> (usize, Option<usize>) {
let sz = unsafe { sys::SBMemoryRegionInfoListGetSize(self.list.raw) } as usize;
(sz - self.idx as usize, Some(sz))
}
}
impl ExactSizeIterator for SBMemoryRegionInfoListIter<'_> {}