#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LogicalCores(HashSet<usize>);
impl From<usize> for LogicalCores
{
#[inline(always)]
fn from(core_index: usize) -> Self
{
let mut logical_cores = HashSet::with_capacity(1);
logical_cores.insert(core_index);
LogicalCores(logical_cores)
}
}
impl From<HashSet<usize>> for LogicalCores
{
#[inline(always)]
fn from(logical_cores: HashSet<usize>) -> Self
{
debug_assert_ne!(logical_cores.len(), 0, "There must be at least one logical core specified");
LogicalCores(logical_cores)
}
}
impl Into<HashSet<usize>> for LogicalCores
{
#[inline(always)]
fn into(self) -> HashSet<usize>
{
self.0
}
}
impl LogicalCores
{
pub const IsSettingProcessAffinitySupported: bool = Self::_IsSettingProcessAffinitySupported;
pub const IsSettingThreadAffinitySupported: bool = Self::_IsSettingThreadAffinitySupported;
#[inline(always)]
pub fn set_current_process_affinity(&self) -> io::Result<()>
{
self._set_process_affinity(Self::current_process_identifier())
}
#[inline(always)]
pub fn set_process_affinity(&self, process_identifier: ProcessIdentifier) -> io::Result<()>
{
self._set_process_affinity(process_identifier)
}
#[inline(always)]
pub fn set_current_thread_affinity(&self) -> io::Result<()>
{
self._set_thread_affinity(Self::current_thread_identifier())
}
#[inline(always)]
pub fn set_thread_affinity(&self, thread_identifier: ThreadIdentifier) -> io::Result<()>
{
self._set_thread_affinity(thread_identifier)
}
#[cfg(unix)]
const fn current_process_identifier() -> ProcessIdentifier
{
0
}
#[cfg(windows)]
fn current_process_identifier() -> ProcessIdentifier
{
unsafe { ::kernel32::GetCurrentProcess() }
}
#[cfg(unix)]
fn current_thread_identifier() -> ThreadIdentifier
{
unsafe { pthread_self() }
}
#[cfg(windows)]
fn current_thread_identifier() -> ThreadIdentifier
{
unsafe { ::kernel32::GetCurrentThread() }
}
#[allow(dead_code)]
#[inline(always)]
fn last_os_error() -> io::Error
{
io::Error::last_os_error()
}
}
#[cfg(any(target_os = "android", target_os = "emscripten", target_os = "fuschia", target_os = "linux", target_env = "uclibc"))] include!("LogicalCores.android-emscripten-fuschia-linux-uclibc.rs");
#[cfg(target_os = "dragonfly")] include!("LogicalCores.dragonfly.rs");
#[cfg(target_os = "freebsd")] include!("LogicalCores.freebsd.rs");
#[cfg(any(target_os = "ios", target_os = "macos"))] include!("LogicalCores.ios_macos.rs");
#[cfg(target_os = "netbsd")] include!("LogicalCores.netbsd.rs");
#[cfg(not(any(target_os = "android", target_os = "dragonfly", target_os = "emscripten", target_os = "freebsd", target_os = "fuschia", target_os = "ios", target_os = "linux", target_os = "macos", target_os = "netbsd", target_env = "uclibc", windows)))] include!("LogicalCores.others.rs");
#[cfg(windows)] include!("LogicalCores.windows.rs");