// SPDX-License-Identifier: MIT // Copyright (c) 2024-2025, Advanced Micro Devices, Inc. All rights reserved. #ifndef GUARD_HOST_TEST_RTC_INCLUDE_RTC_MANAGE_POINTER #define GUARD_HOST_TEST_RTC_INCLUDE_RTC_MANAGE_POINTER #include #include namespace rtc { template struct manage_deleter { template void operator()(T* x) const { if(x != nullptr) { (void)f(x); } } }; struct null_deleter { template void operator()(T*) const { } }; template using manage_ptr = std::unique_ptr>; template struct element_type { using type = typename T::element_type; }; template using remove_ptr = typename std:: conditional_t{}, std::remove_pointer, element_type>::type; template using shared = std::shared_ptr>; template shared share(T p) { return shared{std::move(p)}; } #define RTC_MANAGE_PTR(T, F) rtc::manage_ptr, decltype(&F), &F> } // namespace rtc #endif