use hwloc2;
#[derive(Clone)]
pub struct OrderedCoreSelections(Vec<Option<hwloc2::CpuSet>>);
impl OrderedCoreSelections {
pub fn new() -> OrderedCoreSelections {
Self(Vec::new())
}
pub fn all_default(&self) -> bool {
!self.0.iter().any(|t| t.is_some())
}
pub fn set_all_default(&mut self) {
for thread in &mut self.0 {
*thread = None;
}
}
pub fn validate_selections(&self) -> bool {
self.0.iter().all(|t| t.is_none() || !t.as_ref().unwrap().is_empty())
}
pub fn len(&self) -> usize {
self.0.len()
}
pub fn get(&self, index: usize) -> Option<&hwloc2::CpuSet> {
if index < self.len() { self.0[index].as_ref() } else { None }
}
pub fn get_mut(&mut self, index: usize) -> &mut Option<hwloc2::CpuSet> {
&mut self.0[index]
}
pub fn iter(&self) -> std::slice::Iter<'_, Option<hwloc2::CpuSet>> {
self.0.iter()
}
pub fn iter_mut(&mut self) -> std::slice::IterMut<'_, Option<hwloc2::CpuSet>> {
self.0.iter_mut()
}
pub fn push(&mut self, value: Option<hwloc2::CpuSet>) {
self.0.push(value)
}
pub fn truncate(&mut self, len: usize) {
self.0.truncate(len)
}
}