// // RNBO_ExternalPtr.h // Created: 10 Feb 2016 2:46:28pm // Author: Stefan Brunner // // #ifndef _RNBO_EXTERNALPTR_H_ #define _RNBO_EXTERNALPTR_H_ #include "RNBO_UniquePtr.h" #include "RNBO_ExternalBase.h" namespace RNBO { /** * @private */ template class HolderPtr { public: HolderPtr() : _ptr(nullptr) {} HolderPtr(T* ptr) { _ptr.reset(ptr); } UniquePtr& operator->() { return _ptr; } const UniquePtr& operator->() const { return _ptr; } bool operator!() { return !_ptr; } T* get() const { return _ptr.get(); } explicit operator const T*() const { return _ptr.get(); } private: UniquePtr _ptr; }; template inline bool operator==(const T1* lhs, const HolderPtr& rhs) { return lhs == static_cast(rhs.get()); } template inline bool operator==(const HolderPtr& lhs, const T2* rhs) { return static_cast(lhs.get()) == rhs; } using ExternalPtr = HolderPtr; } #endif // #ifndef _RNBO_EXTERNALPTR_H_