77 template<
typename YI_PTR_TYPE,
typename YI_DELETE_FUNCTOR = CYICheckedDeleteFunctor<YI_PTR_TYPE> >
80 template<
typename YI_OTHER_PTR_TYPE,
typename YI_OTHER_DELETE_FUNCTOR>
friend class CYICowPtr;
117 if (m_pRefCounter->
WeakRef() == 0)
120 m_pRefCounter =
nullptr;
132 m_pRefCounter(nullptr),
142 m_pRefCounter(nullptr),
153 m_pRefCounter(rOther.m_pRefCounter), m_pData(rOther.m_pData)
163 template<
typename YI_OTHER_PTR_TYPE,
typename YI_OTHER_DELETE_FUNCTOR>
165 m_pRefCounter(rOther.m_pRefCounter), m_pData((YI_PTR_TYPE*) rOther.m_pData)
186 YI_PTR_TYPE *pCloneData =
new YI_PTR_TYPE(*m_pData);
188 m_pRefCounter =
nullptr;
189 m_pData = pCloneData;
223 YI_ASSERT(m_pData,
"CYICowPtr",
"Attempted to dereference a null copy-on-write pointer.");
246 YI_ASSERT(m_pData,
"CYICowPtr",
"Attempted to dereference a null copy-on-write pointer.");
270 YI_ASSERT(m_pData,
"CYICowPtr",
"Attempted to dereference a null copy-on-write pointer.");
292 YI_ASSERT(m_pData,
"CYICowPtr",
"Attempted to dereference a null copy-on-write pointer.");
321 return m_pData ==
nullptr;
345 inline operator YI_UNSPECIFIED_BOOL_TYPE()
const 378 template<
typename YI_OTHER_PTR_TYPE,
typename YI_OTHER_DELETE_FUNCTOR>
385 m_pData = (YI_PTR_TYPE*) rOther.
m_pData;
409 inline const YI_PTR_TYPE *
Get()
const 438 return m_pData ==
nullptr;
479 std::swap(m_pData, rPtr.
m_pData);
487 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
490 return rLhs.
Get() == rRhs.
Get();
493 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
496 return rLhs.
Get() != rRhs.
Get();
499 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE>
502 return rLhs.
Get() == pRhs;
505 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE>
508 return rLhs.
Get() != pRhs;
511 template<
typename YI_L_PTR_TYPE,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
514 return pLhs == rRhs.
Get();
517 template<
typename YI_L_PTR_TYPE,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
520 return pLhs != rRhs.
Get();
void Detach()
Definition: YiCowPtr.h:182
const YI_PTR_TYPE & operator*() const
Definition: YiCowPtr.h:221
CYICowPtr< YI_PTR_TYPE, YI_DELETE_FUNCTOR > & operator=(const CYICowPtr< YI_OTHER_PTR_TYPE, YI_OTHER_DELETE_FUNCTOR > &rOther)
Definition: YiCowPtr.h:379
YI_DELETE_FUNCTOR DeleteFunc
Definition: YiCowPtr.h:83
CYICowPtr< YI_PTR_TYPE, YI_DELETE_FUNCTOR > & operator=(const CYICowPtr< YI_PTR_TYPE, YI_DELETE_FUNCTOR > &rOther)
Definition: YiCowPtr.h:358
CYICowPtr(const CYICowPtr< YI_PTR_TYPE, YI_DELETE_FUNCTOR > &rOther)
Definition: YiCowPtr.h:152
const YI_PTR_TYPE * operator->() const
Definition: YiCowPtr.h:268
void Reset()
Definition: YiCowPtr.h:199
bool IsNull() const
Definition: YiCowPtr.h:436
bool operator!() const
Definition: YiCowPtr.h:319
bool operator!=(const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
Definition: YiCowPtr.h:494
int32_t GetRefCount() const
Definition: YiCowPtr.h:444
bool operator==(const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
Definition: YiCowPtr.h:488
YI_PTR_TYPE * operator->()
Definition: YiCowPtr.h:290
Definition: YiReferenceCounter.h:23
CYICowPtr(const CYICowPtr< YI_OTHER_PTR_TYPE, YI_OTHER_DELETE_FUNCTOR > &rOther)
Definition: YiCowPtr.h:164
CYICowPtr(YI_PTR_TYPE *pData)
Definition: YiCowPtr.h:141
YI_PTR_TYPE & operator*()
Definition: YiCowPtr.h:244
void Swap(CYICowPtr< YI_PTR_TYPE, YI_DELETE_FUNCTOR > &rPtr)
Definition: YiCowPtr.h:476
const YI_PTR_TYPE * Get() const
Definition: YiCowPtr.h:409
~CYICowPtr()
Definition: YiCowPtr.h:173
YI_PTR_TYPE * m_pData
Definition: YiCowPtr.h:85
void Deref()
Definition: YiCowPtr.h:103
#define YI_ASSERT(condition, tag, msg,...)
Platform-independent assertion macro.
Definition: YiError.h:37
The CYICowPtr is a smart pointer that performs a shallow-copy when duplicated, and a deep-copy only w...
Definition: YiCowPtr.h:78
CYICowPtr()
Definition: YiCowPtr.h:131
This file contains the classes and macros used to implement RTTI in You.i Engine. ...
CYIReferenceCounter * m_pRefCounter
Definition: YiCowPtr.h:84
uint32_t GetStrongRefCount() const
void Ref()
Definition: YiCowPtr.h:87