#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct PortIdentifier(Option<ProcessIdentifier>);
impl Display for PortIdentifier
{
#[inline(always)]
fn fmt(&self, f: &mut Formatter) -> fmt::Result
{
match self.0
{
None => write!(f, "0"),
Some(process_identifier) => write!(f, "{}", process_identifier)
}
}
}
impl PortIdentifier
{
pub const LinuxKernel: Self = Self(None);
pub fn current_process() -> Self
{
static mut CurrentProcess: PortIdentifier = Self(None);
unsafe
{
if unlikely!(CurrentProcess.0.is_none())
{
let current = Self(Some(ProcessIdentifier::default()));
CurrentProcess = current;
current
}
else
{
CurrentProcess
}
}
}
#[inline(always)]
pub fn is_from_linux_kernel(self) -> bool
{
self.0.is_none()
}
#[inline(always)]
pub fn is_from_user_space(self) -> bool
{
self.0.is_some()
}
#[inline(always)]
pub fn is_from_current_process(self) -> bool
{
self == Self::current_process()
}
}