#[derive(Debug, PartialEq, Eq, Hash)]
pub struct Identifier<'a>(__itt_id, PhantomData<&'a ()>);
impl<'a> Identifier<'a>
{
pub const Null: Self = Identifier
(
__itt_id
{
d1: 0,
d2: 0,
d3: 0,
},
PhantomData,
);
#[inline(always)]
pub fn is_null(&self) -> bool
{
self == &Self::Null
}
#[inline(always)]
pub fn new<T: 'a>(address: &T, extra: u64) -> Self
{
Identifier
(
__itt_id
{
d1: address as *const T as usize as u64,
d2: extra,
d3: 0,
},
PhantomData
)
}
#[inline(always)]
pub fn wrap<T: 'a>(address: &T) -> Self
{
Self::new(address, 0)
}
#[inline(always)]
pub fn new_without_lifetime<T>(address: NonNull<T>, extra: u64) -> Self
{
Identifier
(
__itt_id
{
d1: address.as_ptr() as usize as u64,
d2: extra,
d3: 0,
},
PhantomData
)
}
#[inline(always)]
pub fn wrap_without_lifetime<T>(address: NonNull<T>) -> Self
{
Self::new_without_lifetime(address, 0)
}
}