#ifndef _RSTL_SINGLE_PTR #define _RSTL_SINGLE_PTR #include "types.h" namespace rstl { template < typename T > class single_ptr { mutable T* x0_ptr; public: single_ptr() : x0_ptr(nullptr) {} single_ptr(T* ptr) : x0_ptr(ptr) {} ~single_ptr() { delete x0_ptr; } T* get() const { return x0_ptr; } // const T* get() const { return x0_ptr; } T* operator->() { return x0_ptr; } const T* operator->() const { return x0_ptr; } single_ptr(const single_ptr& other) : x0_ptr(other.x0_ptr) { other.x0_ptr = nullptr; } single_ptr& operator=(T* ptr) { delete x0_ptr; x0_ptr = ptr; return *this; } bool null() const { return x0_ptr == nullptr; } T& operator*() { return *x0_ptr; } const T& operator*() const { return *x0_ptr; } T* release() { T* ptr = x0_ptr; x0_ptr = nullptr; return ptr; } }; typedef single_ptr< void > unk_singleptr; CHECK_SIZEOF(unk_singleptr, 0x4); } // namespace rstl #endif // _RSTL_SINGLE_PTR