mirror of
				https://github.com/PrimeDecomp/prime.git
				synced 2025-10-27 15:30:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			963 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			963 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #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
 |