use super::TRACKER;
use std::borrow::ToOwned;
pub fn track_rc_new_with_id<T: ?Sized>(
#[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: std::rc::Rc<T>,
) -> std::rc::Rc<T> {
#[cfg(feature = "track")]
{
let strong_count = std::rc::Rc::strong_count(&value);
let weak_count = std::rc::Rc::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_rc_new_with_id(id, name, type_name, location, strong_count, weak_count);
}
value
}
#[inline(always)]
pub fn track_rc_clone_with_id<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] new_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] source_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: std::rc::Rc<T>,
) -> std::rc::Rc<T> {
#[cfg(feature = "track")]
{
let strong_count = std::rc::Rc::strong_count(&value);
let weak_count = std::rc::Rc::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_rc_clone_with_id(
new_id,
source_id,
name,
location,
strong_count,
weak_count,
);
}
value
}
#[inline(always)]
pub fn track_arc_new_with_id<T: ?Sized>(
#[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: std::sync::Arc<T>,
) -> std::sync::Arc<T> {
#[cfg(feature = "track")]
{
let strong_count = std::sync::Arc::strong_count(&value);
let weak_count = std::sync::Arc::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_arc_new_with_id(id, name, type_name, location, strong_count, weak_count);
}
value
}
#[inline(always)]
pub fn track_arc_clone_with_id<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] new_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] source_id: usize,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: std::sync::Arc<T>,
) -> std::sync::Arc<T> {
#[cfg(feature = "track")]
{
let strong_count = std::sync::Arc::strong_count(&value);
let weak_count = std::sync::Arc::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_arc_clone_with_id(
new_id,
source_id,
name,
location,
strong_count,
weak_count,
);
}
value
}
#[inline(always)]
pub fn track_rc_new<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
value: std::rc::Rc<T>,
) -> std::rc::Rc<T> {
#[cfg(feature = "track")]
{
let strong_count = std::rc::Rc::strong_count(&value);
let weak_count = std::rc::Rc::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_rc_new(name, strong_count, weak_count);
}
value
}
#[inline(always)]
pub fn track_rc_clone<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] source_name: &str,
value: std::rc::Rc<T>,
) -> std::rc::Rc<T> {
#[cfg(feature = "track")]
{
let strong_count = std::rc::Rc::strong_count(&value);
let weak_count = std::rc::Rc::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_rc_clone(name, source_name, strong_count, weak_count);
}
value
}
#[inline(always)]
pub fn track_arc_new<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
value: std::sync::Arc<T>,
) -> std::sync::Arc<T> {
#[cfg(feature = "track")]
{
let strong_count = std::sync::Arc::strong_count(&value);
let weak_count = std::sync::Arc::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_arc_new(name, strong_count, weak_count);
}
value
}
#[inline(always)]
pub fn track_arc_clone<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] source_name: &str,
value: std::sync::Arc<T>,
) -> std::sync::Arc<T> {
#[cfg(feature = "track")]
{
let strong_count = std::sync::Arc::strong_count(&value);
let weak_count = std::sync::Arc::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_arc_clone(name, source_name, strong_count, weak_count);
}
value
}
#[inline(always)]
pub fn track_weak_new<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] source_name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: std::rc::Weak<T>,
) -> std::rc::Weak<T> {
#[cfg(feature = "track")]
{
let weak_count = std::rc::Weak::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_weak_new(name, source_name, weak_count, location);
}
value
}
#[inline(always)]
pub fn track_weak_new_sync<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] source_name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: std::sync::Weak<T>,
) -> std::sync::Weak<T> {
#[cfg(feature = "track")]
{
let weak_count = std::sync::Weak::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_weak_new(name, source_name, weak_count, location);
}
value
}
#[inline(always)]
pub fn track_weak_clone<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] source_name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: std::rc::Weak<T>,
) -> std::rc::Weak<T> {
#[cfg(feature = "track")]
{
let weak_count = std::rc::Weak::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_weak_clone(name, source_name, weak_count, location);
}
value
}
#[inline(always)]
pub fn track_weak_clone_sync<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] source_name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: std::sync::Weak<T>,
) -> std::sync::Weak<T> {
#[cfg(feature = "track")]
{
let weak_count = std::sync::Weak::weak_count(&value);
let mut tracker = TRACKER.lock();
tracker.record_weak_clone(name, source_name, weak_count, location);
}
value
}
#[inline(always)]
pub fn track_weak_upgrade<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] weak_id: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: Option<std::rc::Rc<T>>,
) -> Option<std::rc::Rc<T>> {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_weak_upgrade(weak_id, value.is_some(), location);
}
value
}
#[inline(always)]
pub fn track_weak_upgrade_sync<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] weak_id: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: Option<std::sync::Arc<T>>,
) -> Option<std::sync::Arc<T>> {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_weak_upgrade(weak_id, value.is_some(), location);
}
value
}
#[inline(always)]
pub fn track_box_new<T: ?Sized>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: Box<T>,
) -> Box<T> {
#[cfg(feature = "track")]
{
let type_name = std::any::type_name::<T>();
let mut tracker = TRACKER.lock();
tracker.record_box_new(name, type_name, location);
}
value
}
#[inline(always)]
pub fn track_box_into_raw<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] box_id: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
ptr: *mut T,
) -> *mut T {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_box_into_raw(box_id, location);
}
ptr
}
#[inline(always)]
pub fn track_box_from_raw<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: Box<T>,
) -> Box<T> {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_box_from_raw(name, location);
}
value
}
#[inline(always)]
pub fn track_lock_guard_acquire(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] guard_id: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] lock_id: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] lock_type: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
) {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_lock_guard_acquire(guard_id, lock_id, lock_type, location);
}
}
#[inline(always)]
pub fn track_lock_guard_drop(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] guard_id: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
) {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_lock_guard_drop(guard_id, location);
}
}
#[inline(always)]
pub fn track_pin_new<P>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: std::pin::Pin<P>,
) -> std::pin::Pin<P> {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_pin_new(name, location);
}
value
}
#[inline(always)]
pub fn track_pin_into_inner<T>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] pin_id: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: T,
) -> T {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_pin_into_inner(pin_id, location);
}
value
}
#[inline(always)]
pub fn track_cow_borrowed<'a, B: ?Sized + ToOwned>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: std::borrow::Cow<'a, B>,
) -> std::borrow::Cow<'a, B> {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_cow_borrowed(name, location);
}
value
}
#[inline(always)]
pub fn track_cow_owned<'a, B: ?Sized + ToOwned>(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
value: std::borrow::Cow<'a, B>,
) -> std::borrow::Cow<'a, B> {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_cow_owned(name, location);
}
value
}
#[inline(always)]
pub fn track_cow_to_mut(
#[cfg_attr(not(feature = "track"), allow(unused_variables))] cow_id: &str,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] cloned: bool,
#[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
) {
#[cfg(feature = "track")]
{
let mut tracker = TRACKER.lock();
tracker.record_cow_to_mut(cow_id, cloned, location);
}
}