14 struct SharedPtrData_t
16#ifdef TOSHI2_ENABLE_SHARED_PTR_VALIDATION
24#ifdef TOSHI2_ENABLE_SHARED_PTR_VALIDATION
25 static constexpr TUINT32 VALIDATION_MAGIC =
'T2SP';
37 m_pRawPtr = a_rOther.m_pRawPtr;
46 m_pRawPtr = a_rOther.m_pRawPtr;
47 a_rOther.m_pRawPtr =
TNULL;
66 operator T*() {
return Get(); }
67 operator const T*()
const {
return Get(); }
79 m_pRawPtr = a_rOther.m_pRawPtr;
86 template <
class... Args>
91 T* pObject =
new ( pMem +
sizeof( SharedPtrData_t ) ) T( std::forward<Args>( args )... );
98 SharedPtrData_t* pPtrData = sharedPointer.AccessPtrData();
100 pPtrData->uiNumRefs = 1;
102#ifdef TOSHI2_ENABLE_SHARED_PTR_VALIDATION
104 pPtrData->uiMagic = VALIDATION_MAGIC;
105 pPtrData->pObjectRaw = pObject;
108 return sharedPointer;
113 SharedPtrData_t* AccessPtrData()
const
116 return TREINTERPRETCAST( SharedPtrData_t*, m_pRawPtr -
sizeof( SharedPtrData_t ) );
121#ifdef TOSHI2_ENABLE_SHARED_PTR_VALIDATION
124 SharedPtrData_t* pPtrData = AccessPtrData();
125 TASSERT( pPtrData->uiMagic == VALIDATION_MAGIC && pPtrData->pObjectRaw == m_pRawPtr );
130 void IncrementNumRefs()
135 AccessPtrData()->uiNumRefs++;
138 void DecrementNumRefs()
143 SharedPtrData_t* pPtrData = AccessPtrData();
144 TUINT uiOldNumRefs = pPtrData->uiNumRefs--;
146 if ( uiOldNumRefs == 1 )
void * TMalloc(TSIZE a_uiSize, Toshi::TMemory::MemBlock *a_pMemBlock, const TCHAR *a_szFileName, TINT a_iLineNum)
Allocates memory from a specific memory block.
void TFree(void *a_pMem)
Frees previously allocated memory.
#define TREINTERPRETCAST(TYPE, VALUE)
#define TOSHI_NAMESPACE_START
#define TOSHI_NAMESPACE_END
T2SharedPtr(const T2SharedPtr &a_rOther)
const T * operator->() const
static T2SharedPtr New(Args &&... args)
T2SharedPtr & operator=(const T2SharedPtr &a_rOther)
T2SharedPtr(T2SharedPtr &&a_rOther)