28 #ifndef NVNEURAL_REFPTR_H
29 #define NVNEURAL_REFPTR_H
33 #include <type_traits>
44 template<
typename TObject>
48 static_assert(std::is_convertible<TObject*, const IRefObject*>::value,
"Object must inherit from nvneural::IRefObject");
68 pResult.m_pObject = pObject;
82 pResult.m_pObject = pObject;
92 : m_pObject{copyFrom.m_pObject}
107 std::swap(m_pObject, moveFrom.m_pObject);
127 const auto pOldObject = std::exchange(m_pObject, copyFrom.m_pObject);
131 pOldObject->release();
144 std::swap(m_pObject, moveFrom.m_pObject);
171 TObject*
get() const noexcept
188 return std::exchange(m_pObject,
nullptr);
212 explicit operator bool() const noexcept
214 return m_pObject !=
nullptr;
220 template<
typename TDestinationObject>
229 const auto pRawObject = m_pObject->queryInterface(destinationInterface);
236 return m_pObject == other.m_pObject;
242 return m_pObject == pOther;
248 return m_pObject != other.m_pObject;
254 return m_pObject != pOther;
289 m_parent = m_parent.
as<TObject>();
295 return &m_parent.m_pObject;
329 friend class OutputWrapper;
330 friend class GenericOutputWrapper;
363 void safeAddRef() const noexcept
374 void safeRelease() const noexcept
378 m_pObject->release();
392 template<
typename TObject,
typename TIntermediate = void,
typename... TArguments>
412 template<
typename TObject>
struct hash<nvneural::RefPtr<TObject>>
430 return reinterpret_cast<std::size_t
>(pObject.get());
Fundamental NvNeural data types are declared here.
RefPtr< IRefObject > make_refobject(TArguments &&... args) noexcept
Creates a RefPtr pointing to a new object instance, forwarding constructor arguments.
Definition: RefPtr.h:393
Base class for all objects, similar to COM's IUnknown.
Definition: CoreTypes.h:343
Version of OutputWrapper that presents a generic IRefObject** instead.
Definition: RefPtr.h:301
~GenericOutputWrapper()
Reassigns to the original RefPtr after a queryInterface.
Definition: RefPtr.h:317
Details type that allows version-safe use of out-pointer parameters without converting through an int...
Definition: RefPtr.h:271
~OutputWrapper()
After the pointer-consuming expression has been evaluated, ensure the pointer returned by the externa...
Definition: RefPtr.h:286
Intrusive pointer using IRefObject's reference counting system.
Definition: RefPtr.h:46
bool operator!=(const RefPtr< TObject > &other) const noexcept
Compares reference pointers for underlying inequality.
Definition: RefPtr.h:246
TObject * get() const noexcept
Returns the pointed-to object.
Definition: RefPtr.h:171
RefPtr(const RefPtr ©From) noexcept
Initializes a new RefPtr pointing to a preexisting RefPtr-tracked object.
Definition: RefPtr.h:91
bool operator==(const RefPtr< TObject > &other) const noexcept
Compares reference pointers for underlying equality.
Definition: RefPtr.h:234
static RefPtr fromPointerNoAddRef(TObject *pObject)
Initializes a RefPtr pointing to a specific object.
Definition: RefPtr.h:79
RefPtr(RefPtr &&moveFrom) noexcept
Initializes a new RefPtr pointing to a preexisting RefPtr-tracked object.
Definition: RefPtr.h:104
OutputWrapper put() &noexcept
Returns an expression proxy that acts like a TObject** for receiving new pointers.
Definition: RefPtr.h:337
TObject * operator->() const noexcept
Dereferences this RefPtr.
Definition: RefPtr.h:206
RefPtr< TDestinationObject > as() const noexcept
Creates a new reference to the object using the specified interface.
Definition: RefPtr.h:221
~RefPtr()
Releases the reference to the tracked object.
Definition: RefPtr.h:114
static RefPtr fromPointer(TObject *pObject)
Initializes a RefPtr pointing to a specific object.
Definition: RefPtr.h:65
GenericOutputWrapper put_refobject() &noexcept
Returns an expression proxy that acts like an IRefObject** for receiving new pointers.
Definition: RefPtr.h:349
TObject * detach() noexcept
Returns the pointed-to object and releases ownership over its reference.
Definition: RefPtr.h:186
TObject & operator*() const noexcept
Dereferences this RefPtr.
Definition: RefPtr.h:196
RefPtr() noexcept
Initializes a RefPtr pointing to nullptr.
Definition: RefPtr.h:52
RefPtr & operator=(const RefPtr ©From) noexcept
Reassigns this RefPtr to point to a new object.
Definition: RefPtr.h:125
Helper template to aid retrieval of interface IDs.
Definition: CoreTypes.h:403