use ::winapi::basetsd::DWORD_PTR;
use ::winapi::shared::ntdef::HANDLE;
impl LogicalCores
{
const _IsSettingProcessAffinitySupported: bool = true;
const _IsSettingThreadAffinitySupported: bool = true;
#[inline(always)]
fn _set_process_affinity(&self, process_identifier: ProcessIdentifier) -> io::Result<()>
{
match unsafe { ::kernel32::SetProcessAffinityMask(process_identifier, self.as_mask()) }
{
0 => Err(Self::last_os_error()),
_previous_affinity_mask @ _ => Ok(()),
}
}
#[inline(always)]
fn _set_thread_affinity(&self, thread_identifier: ThreadIdentifier) -> io::Result<()>
{
match unsafe { ::kernel32::SetThreadAffinityMask(thread_identifier, self.as_mask()) }
{
0 => Err(Self::last_os_error()),
_previous_affinity_mask @ _ => Ok(()),
}
}
#[inline(always)]
fn as_mask(&self) -> DWORD_PTR
{
let mut mask = 0;
for logical_core in self.0.iter()
{
mask |= 1 << ((*logical_core) as DWORD_PTR)
}
mask
}
}