use super::TRACKER;
#[inline(always)]
pub fn track_new<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
value: T,
) -> T {
#[cfg(feature = "track")]
{
let type_name = std::any::type_name::<T>();
let mut tracker = TRACKER.lock();
tracker.record_new(name, type_name);
}
value
}
#[inline(always)]
pub fn track_borrow<'a, T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
value: &'a T,
) -> &'a T {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_borrow(name, "unknown", false);
}
value
}
#[inline(always)]
pub fn track_borrow_mut<'a, T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
value: &'a mut T,
) -> &'a mut T {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_borrow(name, "unknown", true);
}
value
}
#[inline(always)]
pub fn track_move<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] from_name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] to_name: &str,
value: T,
) -> T {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_move(from_name, to_name);
}
value
}
#[inline(always)]
pub fn track_drop(#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str) {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_drop(name);
}
}
#[inline(always)]
pub fn track_drop_batch(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] names: &[&str],
) {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
for &name in names {
tracker.record_drop(name);
}
}
}
pub fn __track_new_with_id_helper<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: T,
) -> T {
#[cfg(feature = "track")]
{
let type_name = std::any::type_name::<T>();
let mut tracker = TRACKER.lock();
tracker.record_new_with_id(id, name, type_name, location);
}
value
}
#[inline(always)]
pub fn track_new_with_id<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] type_name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: T,
) -> T {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_new_with_id(id, name, type_name, location);
}
value
}
#[inline(always)]
pub fn track_borrow_with_id<'a, T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] borrower_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] owner_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] mutable: bool,
value: &'a T,
) -> &'a T {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_borrow_with_id(borrower_id, owner_id, name, location, mutable);
}
value
}
#[inline(always)]
pub fn track_borrow_mut_with_id<'a, T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] borrower_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] owner_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: &'a mut T,
) -> &'a mut T {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_borrow_with_id(borrower_id, owner_id, name, location, true);
}
value
}
#[inline(always)]
pub fn track_move_with_id<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] from_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] to_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] to_name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: T,
) -> T {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_move_with_id(from_id, to_id, to_name, location);
}
value
}
#[inline(always)]
pub fn track_drop_with_id(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
) {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_drop_with_id(id, location);
}
}