7 #ifndef PXR_BASE_TF_ANY_WEAK_PTR_H 
    8 #define PXR_BASE_TF_ANY_WEAK_PTR_H 
   20 #ifdef PXR_PYTHON_SUPPORT_ENABLED 
   22 #endif // PXR_PYTHON_SUPPORT_ENABLED 
   27 #include <type_traits> 
   46     template <
class Ptr, 
class = 
typename 
   50         static_assert(
sizeof(_PointerHolder<Ptr>) <= 
sizeof(_Data),
 
   51                       "Ptr is too big to fit in a TfAnyWeakPtr");
 
   52         new (&_ptrStorage) _PointerHolder<Ptr>(ptr);
 
   57         static_assert(
sizeof(_EmptyHolder) <= 
sizeof(_Data),
 
   58                       "Ptr is too big to fit in a TfAnyWeakPtr");
 
   59         new (&_ptrStorage) _EmptyHolder;
 
   69         other._Get()->Clone(&_ptrStorage);
 
   74             _Get()->~_PointerHolderBase();
 
   75             other._Get()->Clone(&_ptrStorage);
 
   81         _Get()->~_PointerHolderBase();
 
  105         return !(*
this == rhs);
 
  113         return !(rhs < *
this);
 
  123         return !(*
this < rhs);
 
  138 #ifdef PXR_PYTHON_SUPPORT_ENABLED 
  144     Tf_GetPythonObjectFromAnyWeakPtr(
This const &
self);
 
  148 #endif // PXR_PYTHON_SUPPORT_ENABLED 
  150     template <
class WeakPtr>
 
  154     struct _PointerHolderBase {
 
  155         TF_API virtual ~_PointerHolderBase();
 
  156         virtual void Clone(_Data *
target) 
const = 0; 
 
  160         virtual operator bool() 
const = 0;
 
  161         virtual bool _IsConst() 
const = 0;
 
  163         virtual const std::type_info & 
GetTypeInfo() 
const = 0;
 
  165         virtual const void* _GetMostDerivedPtr() 
const = 0;
 
  166         virtual bool _IsPolymorphic() 
const = 0;
 
  169     struct _EmptyHolder : _PointerHolderBase {
 
  170         TF_API virtual ~_EmptyHolder();
 
  176         TF_API virtual bool _IsConst() 
const;
 
  180         TF_API virtual const void* _GetMostDerivedPtr() 
const;
 
  181         TF_API virtual bool _IsPolymorphic() 
const;
 
  184     template <
typename Ptr>
 
  185     struct _PointerHolder : _PointerHolderBase {
 
  186         _PointerHolder(Ptr 
const &
ptr) : _ptr(ptr) {
 
  189         virtual ~_PointerHolder();
 
  190         virtual void Clone(_Data *
target) 
const; 
 
  194         virtual operator bool() 
const;
 
  195         virtual bool _IsConst() 
const;
 
  197         virtual const std::type_info & 
GetTypeInfo() 
const;
 
  199         virtual const void* _GetMostDerivedPtr() 
const;
 
  200         virtual bool _IsPolymorphic() 
const;
 
  205     _PointerHolderBase* _Get()
 const {
 
  206         return (_PointerHolderBase*)(&_ptrStorage);
 
  216 template <
class HashState,
 
  217           class T, 
class = 
typename std::enable_if<
 
  222     h.Append(ptr.GetUniqueIdentifier());
 
  226 TfAnyWeakPtr::_PointerHolder<Ptr>::~_PointerHolder() {}
 
  230 TfAnyWeakPtr::_PointerHolder<Ptr>::Clone(_Data *
target)
 const 
  232     new (
target) _PointerHolder<Ptr>(_ptr);
 
  237 TfAnyWeakPtr::_PointerHolder<Ptr>::IsInvalid()
 const 
  239     return _ptr.IsInvalid();
 
  244 TfAnyWeakPtr::_PointerHolder<Ptr>::GetUniqueIdentifier()
 const 
  246     return _ptr.GetUniqueIdentifier();
 
  251 TfAnyWeakPtr::_PointerHolder<Ptr>::GetWeakBase()
 const 
  253     return &(_ptr->__GetTfWeakBase__());
 
  257 TfAnyWeakPtr::_PointerHolder<Ptr>::operator 
bool()
 const 
  264 TfAnyWeakPtr::_PointerHolder<Ptr>::GetPythonObject()
 const 
  266 #ifdef PXR_PYTHON_SUPPORT_ENABLED 
  270 #endif // PXR_PYTHON_SUPPORT_ENABLED 
  273 const std::type_info &
 
  274 TfAnyWeakPtr::_PointerHolder<Ptr>::GetTypeInfo()
 const 
  281 TfAnyWeakPtr::_PointerHolder<Ptr>::GetType()
 const 
  288 TfAnyWeakPtr::_PointerHolder<Ptr>::_GetMostDerivedPtr()
 const 
  300 TfAnyWeakPtr::_PointerHolder<Ptr>::_IsPolymorphic()
 const 
  307 TfAnyWeakPtr::_PointerHolder<Ptr>::_IsConst()
 const 
TF_API const std::type_info & GetTypeInfo() const 
returns the type_info of the underlying WeakPtr 
 
void TfHashAppend(HashState &h, const T &ptr)
 
TfAnyWeakPtr(Ptr const &ptr)
Construct an AnyWeakPtr watching ptr. 
 
pxr_boost::python::object TfPyObject(T const &t, bool complainOnFailure=true)
 
GLsizei const GLfloat * value
 
static TfType const & Find()
 
TfAnyWeakPtr(TfNullPtrType)
Construct and implicitly convert from TfNullPtr. 
 
TfAnyWeakPtr(std::nullptr_t)
Construct and implicitly convert from std::nullptr_t. 
 
TF_API bool operator<(const TfAnyWeakPtr &rhs) const 
comparison operator 
 
Y * get_pointer(TfWeakPtrFacade< X, Y > const &p)
 
TF_API bool operator!() const 
operator ! 
 
TfAnyWeakPtr()
Construct an AnyWeakPtr not watching any ptr. 
 
TF_API void const * GetUniqueIdentifier() const 
Return the unique identifier of the WeakPtr this AnyWeakPtr contains. 
 
GLint GLint GLsizei GLint GLenum GLenum type
 
std::weak_ptr< T > WeakPtr
 
TF_API bool IsInvalid() const 
 
std::enable_if< std::is_polymorphic< T >::value, Tf_CopyCV< T, void > * >::type TfCastToMostDerivedType(T *ptr)
 
TF_API TfType const & GetType() const 
Returns the TfType of the underlying WeakPtr. 
 
bool operator<=(const TfAnyWeakPtr &rhs) const 
less than or equal operator 
 
const std::type_info & TfTypeid(const TfRefPtr< T > &ptr)
 
friend WeakPtr TfAnyWeakPtrDynamicCast(const TfAnyWeakPtr &anyWeak, WeakPtr *)
 
TfAnyWeakPtr & operator=(TfAnyWeakPtr const &other)
 
TF_API bool operator==(const TfAnyWeakPtr &rhs) const 
equality operator 
 
size_t GetHash() const 
Return a hash value for this instance. 
 
GLfloat GLfloat GLfloat GLfloat h
 
bool operator>=(const TfAnyWeakPtr &rhs) const 
greater than or equal operator 
 
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
 
TfAnyWeakPtr(TfAnyWeakPtr const &other)
 
#define PXR_NAMESPACE_CLOSE_SCOPE
 
bool operator!=(const TfAnyWeakPtr &rhs) const 
inequality operator 
 
TF_API TfWeakBase const * GetWeakBase() const 
Return the TfWeakBase object of the WeakPtr we are holding. 
 
bool operator>(const TfAnyWeakPtr &rhs) const 
greater than operator