15            if (a_ptr->DecRef() == 0) {
 
   35    template <
class T, 
template <
class> 
class RefManager = BSTSmartPointerIntrusiveRefCount>
 
   56                std::is_convertible_v<
 
   77                std::is_convertible_v<
 
   89            _ptr(std::move(a_rhs._ptr))
 
   98                std::is_convertible_v<
 
  103            _ptr(std::move(a_rhs._ptr))
 
  105            a_rhs._ptr = 
nullptr;
 
  116            if (
this != std::addressof(a_rhs)) {
 
  128                std::is_convertible_v<
 
  143            if (
this != std::addressof(a_rhs)) {
 
  145                _ptr = std::move(a_rhs._ptr);
 
  146                a_rhs._ptr = 
nullptr;
 
  155                std::is_convertible_v<
 
  162            _ptr = std::move(a_rhs._ptr);
 
  163            a_rhs._ptr = 
nullptr;
 
  175                std::is_convertible_v<
 
  193        [[nodiscard]] 
explicit constexpr operator bool() const noexcept
 
  195            return static_cast<bool>(
_ptr);
 
  200            assert(
static_cast<bool>(*
this));
 
  206            assert(
static_cast<bool>(*
this));
 
  211        template <
class, 
template <
class> 
class>
 
  217                reference_manager::Acquire(
_ptr);
 
  224                reference_manager::Release(
_ptr);
 
  234    template <
class T, 
class... Args>
 
  240    template <
class T1, 
class T2>
 
  243        return a_lhs.
get() == a_rhs.
get();
 
  246    template <
class T1, 
class T2>
 
  249        return !(a_lhs == a_rhs);
 
  267        return static_cast<bool>(a_lhs);
 
  273        return static_cast<bool>(a_rhs);
 
  284#define BSSmartPointer(className) \ 
  286    using className##Ptr = RE::BSTSmartPointer<className>; 
Definition: BSTSmartPointer.h:37
BSTSmartPointer(const BSTSmartPointer< Y > &a_rhs)
Definition: BSTSmartPointer.h:81
BSTSmartPointer(BSTSmartPointer &&a_rhs) noexcept
Definition: BSTSmartPointer.h:88
constexpr element_type & operator*() const noexcept
Definition: BSTSmartPointer.h:198
void reset()
Definition: BSTSmartPointer.h:167
void TryAttach()
Definition: BSTSmartPointer.h:214
void TryDetach()
Definition: BSTSmartPointer.h:221
BSTSmartPointer & operator=(const BSTSmartPointer &a_rhs)
Definition: BSTSmartPointer.h:114
constexpr BSTSmartPointer(std::nullptr_t) noexcept
Definition: BSTSmartPointer.h:48
element_type * _ptr
Definition: BSTSmartPointer.h:230
BSTSmartPointer & operator=(BSTSmartPointer< Y > &&a_rhs)
Definition: BSTSmartPointer.h:159
constexpr BSTSmartPointer() noexcept
Definition: BSTSmartPointer.h:43
constexpr element_type * get() const noexcept
Definition: BSTSmartPointer.h:188
BSTSmartPointer(const BSTSmartPointer &a_rhs)
Definition: BSTSmartPointer.h:67
~BSTSmartPointer()
Definition: BSTSmartPointer.h:108
BSTSmartPointer & operator=(BSTSmartPointer &&a_rhs)
Definition: BSTSmartPointer.h:141
RefManager< T > reference_manager
Definition: BSTSmartPointer.h:40
BSTSmartPointer(BSTSmartPointer< Y > &&a_rhs) noexcept
Definition: BSTSmartPointer.h:102
T element_type
Definition: BSTSmartPointer.h:39
BSTSmartPointer(Y *a_rhs)
Definition: BSTSmartPointer.h:60
constexpr element_type * operator->() const noexcept
Definition: BSTSmartPointer.h:204
BSTSmartPointer & operator=(const BSTSmartPointer< Y > &a_rhs)
Definition: BSTSmartPointer.h:132
void reset(Y *a_ptr)
Definition: BSTSmartPointer.h:179
Definition: AbsorbEffect.h:6
BSTSmartPointer< T > make_smart(Args &&... a_args)
Definition: BSTSmartPointer.h:235
constexpr bool operator==(const BSTSmartPointer< T1 > &a_lhs, const BSTSmartPointer< T2 > &a_rhs)
Definition: BSTSmartPointer.h:241
constexpr bool operator!=(const BSTSmartPointer< T1 > &a_lhs, const BSTSmartPointer< T2 > &a_rhs)
Definition: BSTSmartPointer.h:247
Definition: BSTSmartPointer.h:23
static void Release(T *a_ptr)
Definition: BSTSmartPointer.h:29
static constexpr void Acquire(T *a_ptr)
Definition: BSTSmartPointer.h:24
Definition: BSTSmartPointer.h:7
static void Release(T *a_ptr)
Definition: BSTSmartPointer.h:13
static void Acquire(T *a_ptr)
Definition: BSTSmartPointer.h:8