7 #ifndef PXR_BASE_TF_WEAK_PTR_FACADE_H
8 #define PXR_BASE_TF_WEAK_PTR_FACADE_H
19 #include <type_traits>
25 template <
template <
class>
class PtrTemplate,
class DataType>
35 template <
template <
class>
class PtrTemplate,
class DataType>
38 template <
class Facade>
40 return f._FetchPointer();
43 template <
class Facade>
45 return f._GetUniqueIdentifier();
48 template <
class Facade>
50 return f._EnableExtraNotification();
53 template <
class Facade>
55 return f._IsInvalid();
62 template <
template <
class>
class X,
class Y>
70 template <
template <
class>
class PtrTemplate,
class Type>
83 template <
class Other>
90 template <
class Other>
105 return !(*
this == p);
118 template <
class Other>
119 bool operator < (PtrTemplate<Other>
const &p)
const {
125 template <
class Other>
127 return !(*
this < p) && !(*
this == p);
130 template <
class Other>
131 bool operator <= (PtrTemplate<Other>
const &p)
const {
132 return (*
this < p) || (*
this == p);
135 template <
class Other>
143 return _FetchPointer() ? &TfWeakPtrFacade::_FetchPointer :
nullptr;
147 return !(
bool(*
this));
152 return _FetchPointer() == &obj;
160 return dynamic_cast<T *
>(_FetchPointer());
172 return &_Derived()->__GetTfWeakBase__();
212 return static_cast<Derived &
>(*this);
215 Derived const &_Derived()
const {
216 return static_cast<Derived const &
>(*this);
231 template <
template <
class>
class X,
class Y>
236 template <
template <
class>
class X,
class Y>
242 template <
template <
class>
class X,
class Y>
245 return !(p ==
nullptr);
247 template <
template <
class>
class X,
class Y>
250 return !(
nullptr == p);
253 template <
template <
class>
class X,
class Y>
254 inline bool operator< (TfWeakPtrFacade<X, Y>
const &p, std::nullptr_t)
256 return std::less<void const *>()(p.GetUniqueIdentifier(),
nullptr);
258 template <
template <
class>
class X,
class Y>
259 inline bool operator< (std::nullptr_t, TfWeakPtrFacade<X, Y>
const &p)
261 return std::less<void const *>()(
nullptr, p.GetUniqueIdentifier());
264 template <
template <
class>
class X,
class Y>
265 inline bool operator<= (TfWeakPtrFacade<X, Y>
const &p, std::nullptr_t)
267 return !(
nullptr < p);
269 template <
template <
class>
class X,
class Y>
270 inline bool operator<= (std::nullptr_t, TfWeakPtrFacade<X, Y>
const &p)
272 return !(p <
nullptr);
275 template <
template <
class>
class X,
class Y>
280 template <
template <
class>
class X,
class Y>
286 template <
template <
class>
class X,
class Y>
289 return !(p <
nullptr);
291 template <
template <
class>
class X,
class Y>
294 return !(
nullptr < p);
299 template <
class ToPtr,
template <
class>
class X,
class Y>
301 return ToPtr(dynamic_cast<typename ToPtr::DataType *>
305 template <
class ToPtr,
template <
class>
class X,
class Y>
307 return ToPtr(TfSafeDynamic_cast<typename ToPtr::DataType *>
311 template <
class ToPtr,
template <
class>
class X,
class Y>
313 return ToPtr(static_cast<typename ToPtr::DataType *>
317 template <
class ToPtr,
template <
class>
class X,
class Y>
319 return ToPtr(const_cast<typename ToPtr::DataType *>
331 template <
template <
class>
class X,
class U>
333 typename std::enable_if<
345 template <
template <
class>
class Ptr,
class T>
348 std::is_base_of<TfWeakPtrFacadeBase, Ptr<T>>::value
367 template <
template <
class>
class Ptr,
class T>
370 std::is_base_of<TfWeakPtrFacadeBase, Ptr<const T>>::value
378 return Ptr<const T>(
ptr);
389 template <
class HashState,
template <
class>
class X,
class T>
397 template <
template <
class>
class X,
class T>
406 #endif // PXR_BASE_TF_WEAK_PTR_FACADE_H
DataType & operator*() const
typename std::enable_if< B, T >::type enable_if_t
Define Imath::enable_if_t to be std for C++14, equivalent for C++11.
void const * GetUniqueIdentifier() const
void EnableExtraNotification() const
bool operator==(PtrTemplate< Other > const &p) const
bool operator!=(PtrTemplate< Other > const &p) const
bool operator>(PtrTemplate< Other > const &p) const
GLsizei const GLfloat * value
ToPtr TfStatic_cast(TfWeakPtrFacade< X, Y > const &p)
TF_API const TfNullPtrType TfNullPtr
ARCH_API std::string ArchGetDemangled(const std::string &typeName)
size_t hash_value(TfWeakPtrFacade< X, T > const &ptr)
static T * GetRawPtr(const Ptr< T > &t)
static void Class_Object_MUST_Not_Be_Const()
static Facade::DataType * FetchPointer(Facade const &f)
Y * get_pointer(TfWeakPtrFacade< X, Y > const &p)
static Ptr< const T > ConstructFromRawPtr(const T *ptr)
DataType *(TfWeakPtrFacade::*)(void) const UnspecifiedBoolType
GLint GLint GLsizei GLint GLenum GLenum type
bool operator>(TfWeakPtrFacade< X, Y > const &p, std::nullptr_t)
TF_API void Tf_PostNullSmartPtrDereferenceFatalError(const TfCallContext &, const char *)
static void Class_Object_MUST_Be_Passed_By_Address()
bool operator!=(const Mat3< T0 > &m0, const Mat3< T1 > &m1)
Inequality operator, does exact floating point comparisons.
static void Class_Object_MUST_Be_Passed_By_Address()
static bool IsNull(const Ptr< T > &t)
GLuint const GLchar * name
ToPtr TfSafeDynamic_cast(TfWeakPtrFacade< X, Y > const &p)
bool PointsTo(T const &obj) const
void TfHashAppend(HashState &h, TfWeakPtrFacade< X, T > const &ptr)
PtrTemplate< DataType > Derived
GLfloat GLfloat GLfloat GLfloat h
ToPtr TfDynamic_cast(TfWeakPtrFacade< X, Y > const &p)
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
static void const * GetUniqueIdentifier(Facade const &f)
static bool IsNull(const Ptr< const T > &t)
bool operator>=(TfWeakPtrFacade< X, Y > const &p, std::nullptr_t)
static const T * GetRawPtr(const Ptr< const T > &t)
void Tf_RefPtrTracker_New(const void *, const TfRefBase *, const void *)
#define PXR_NAMESPACE_CLOSE_SCOPE
DataType * operator->() const
friend std::type_info const & TfTypeid(Derived const &p)
static bool IsInvalid(Facade const &f)
OIIO_UTIL_API const char * c_str(string_view str)
static Ptr< T > ConstructFromRawPtr(T *ptr)
ToPtr TfConst_cast(TfWeakPtrFacade< X, Y > const &p)
bool operator>=(PtrTemplate< Other > const &p) const
static void EnableExtraNotification(Facade const &f)
friend class TfWeakPtrFacadeAccess
TfWeakBase const * GetWeakBase() const
bool operator==(const Mat3< T0 > &m0, const Mat3< T1 > &m1)
Equality operator, does exact floating point comparisons.
TfWeakPtrFacadeAccess Access