24#ifndef PXR_BASE_TF_WEAK_BASE_H
25#define PXR_BASE_TF_WEAK_BASE_H
32#include "pxr/base/tf/api.h"
37PXR_NAMESPACE_OPEN_SCOPE
48 TF_API
virtual ~Tf_Remnant();
54 Tf_ExpiryNotifier::Invoke2(
this);
58 bool _IsAlive()
const {
64 TF_API
virtual void const *_GetUniqueIdentifier()
const;
69 Register(std::atomic<Tf_Remnant*> &remnantPtr) {
70 if (Tf_Remnant *remnant = remnantPtr.load()) {
75 return Register(remnantPtr,
new Tf_Remnant);
83 Register(std::atomic<Tf_Remnant*> &remnantPtr, T *candidate) {
84 Tf_Remnant *existing =
nullptr;
85 if (remnantPtr.compare_exchange_strong(
87 static_cast<Tf_Remnant*
>(candidate))) {
100 TF_API
virtual void EnableNotification()
const;
114 mutable bool _notify, _notify2;
165 void EnableNotification2()
const;
167 TF_API
void const* GetUniqueIdentifier()
const;
175 if (Tf_Remnant *remnant = _remnantPtr.load(std::memory_order_relaxed)) {
187 return Tf_Remnant::Register(_remnantPtr);
192 return Tf_Remnant::Register<T>(_remnantPtr, tempRmnt);
195 bool _HasRemnant()
const {
196 return _remnantPtr.load(std::memory_order_relaxed) ? true :
false;
205 mutable std::atomic<Tf_Remnant*> _remnantPtr;
207 friend class Tf_WeakBaseAccess;
210class Tf_WeakBaseAccess {
213 return wb._Register();
219PXR_NAMESPACE_CLOSE_SCOPE
Reference-counted smart pointer utility class.
Enable a concrete base class for use with TfRefPtr that inhibits the "unique changed" facility of TfR...
Enable a concrete base class for use with TfWeakPtr.