OpenBarnyard
 
Loading...
Searching...
No Matches
T2SharedPtr< T > Class Template Reference

#include <T2SharedPtr.h>

Public Member Functions

 T2SharedPtr ()
 
 T2SharedPtr (const T2SharedPtr &a_rOther)
 
 T2SharedPtr (T2SharedPtr &&a_rOther)
 
 ~T2SharedPtr ()
 
TBOOL IsValid () const
 
T * Get ()
 
const T * Get () const
 
 operator T* ()
 
 operator const T * () const
 
T * operator-> ()
 
const T * operator-> () const
 
T2SharedPtroperator= (const T2SharedPtr &a_rOther)
 

Static Public Member Functions

template<class... Args>
static T2SharedPtr New (Args &&... args)
 

Detailed Description

template<typename T>
class T2SharedPtr< T >

Definition at line 11 of file T2SharedPtr.h.

Constructor & Destructor Documentation

◆ T2SharedPtr() [1/3]

template<typename T>
T2SharedPtr< T >::T2SharedPtr ( )
inline

Definition at line 30 of file T2SharedPtr.h.

31 : m_pRawPtr( TNULL )
32 {}

◆ T2SharedPtr() [2/3]

template<typename T>
T2SharedPtr< T >::T2SharedPtr ( const T2SharedPtr< T > & a_rOther)
inline

Definition at line 35 of file T2SharedPtr.h.

36 {
37 m_pRawPtr = a_rOther.m_pRawPtr;
38
39 if ( m_pRawPtr )
40 IncrementNumRefs();
41 }

◆ T2SharedPtr() [3/3]

template<typename T>
T2SharedPtr< T >::T2SharedPtr ( T2SharedPtr< T > && a_rOther)
inline

Definition at line 44 of file T2SharedPtr.h.

45 {
46 m_pRawPtr = a_rOther.m_pRawPtr;
47 a_rOther.m_pRawPtr = TNULL;
48 }

◆ ~T2SharedPtr()

template<typename T>
T2SharedPtr< T >::~T2SharedPtr ( )
inline

Definition at line 51 of file T2SharedPtr.h.

52 {
53 if ( m_pRawPtr )
54 DecrementNumRefs();
55 }

Member Function Documentation

◆ Get() [1/2]

template<typename T>
T * T2SharedPtr< T >::Get ( )
inline

Definition at line 63 of file T2SharedPtr.h.

63{ return TREINTERPRETCAST( T*, m_pRawPtr ); }
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68

◆ Get() [2/2]

template<typename T>
const T * T2SharedPtr< T >::Get ( ) const
inline

Definition at line 64 of file T2SharedPtr.h.

64{ return TREINTERPRETCAST( const T*, m_pRawPtr ); }

◆ IsValid()

template<typename T>
TBOOL T2SharedPtr< T >::IsValid ( ) const
inline

Definition at line 58 of file T2SharedPtr.h.

59 {
60 return m_pRawPtr;
61 }

◆ New()

template<typename T>
template<class... Args>
static T2SharedPtr T2SharedPtr< T >::New ( Args &&... args)
inlinestatic

Definition at line 87 of file T2SharedPtr.h.

88 {
89 // Allocate memory
90 TCHAR* pMem = (TCHAR*)TMalloc( sizeof( T ) + sizeof( SharedPtrData_t ) );
91 T* pObject = new ( pMem + sizeof( SharedPtrData_t ) ) T( std::forward<Args>( args )... );
92
93 // Create shared pointer object
96
97 // Set shared pointer data data
98 SharedPtrData_t* pPtrData = sharedPointer.AccessPtrData();
99
100 pPtrData->uiNumRefs = 1;
101
102#ifdef TOSHI2_ENABLE_SHARED_PTR_VALIDATION
103 // This can be used to make sure the object was actually created with T2SharedPtr::New
104 pPtrData->uiMagic = VALIDATION_MAGIC;
105 pPtrData->pObjectRaw = pObject;
106#endif // TOSHI2_ENABLE_SHARED_PTR_VALIDATION
107
108 return sharedPointer;
109 }
void * TMalloc(TSIZE a_uiSize, Toshi::TMemory::MemBlock *a_pMemBlock, const TCHAR *a_szFileName, TINT a_iLineNum)
Allocates memory from a specific memory block.
Definition TMemory.cpp:973

◆ operator const T *()

template<typename T>
T2SharedPtr< T >::operator const T * ( ) const
inline

Definition at line 67 of file T2SharedPtr.h.

67{ return Get(); }

◆ operator T*()

template<typename T>
T2SharedPtr< T >::operator T* ( )
inline

Definition at line 66 of file T2SharedPtr.h.

66{ return Get(); }

◆ operator->() [1/2]

template<typename T>
T * T2SharedPtr< T >::operator-> ( )
inline

Definition at line 69 of file T2SharedPtr.h.

69{ return Get(); }

◆ operator->() [2/2]

template<typename T>
const T * T2SharedPtr< T >::operator-> ( ) const
inline

Definition at line 70 of file T2SharedPtr.h.

70{ return Get(); }

◆ operator=()

template<typename T>
T2SharedPtr & T2SharedPtr< T >::operator= ( const T2SharedPtr< T > & a_rOther)
inline

Definition at line 72 of file T2SharedPtr.h.

73 {
74 DebugValidate();
75
76 if ( m_pRawPtr )
77 DecrementNumRefs();
78
79 m_pRawPtr = a_rOther.m_pRawPtr;
80
81 if ( m_pRawPtr )
82 IncrementNumRefs();
83 }

The documentation for this class was generated from the following file: