2 #ifndef _YI_SHARED_ARRAY_H_ 3 #define _YI_SHARED_ARRAY_H_ 12 template<
typename YI_ARRAY_TYPE>
137 template<
typename YI_ARRAY_TYPE>
163 template<
typename YI_FUNCTION_OBJECT>
165 m_pPtr(array, functor)
174 m_pPtr(rOther.m_pPtr)
183 template<
typename YI_OTHER_ARRAY_TYPE>
185 m_pPtr(rOther.m_pPtr)
194 m_pPtr(rOther.m_pPtr)
203 template<
typename YI_OTHER_ARRAY_TYPE>
205 m_pPtr(rOther.m_pPtr)
254 inline operator YI_UNSPECIFIED_BOOL_TYPE()
const 269 if (m_pPtr != rOther.m_pPtr)
271 m_pPtr = rOther.m_pPtr;
284 template<
typename YI_OTHER_PTR_TYPE>
287 if (m_pPtr != rOther.m_pPtr)
289 m_pPtr = rOther.m_pPtr;
304 if (m_pPtr != rOther.m_pPtr)
306 m_pPtr = rOther.m_Ptr;
319 template<
typename YI_OTHER_PTR_TYPE>
322 if (m_pPtr != rOther.m_pPtr)
324 m_pPtr = rOther.m_Ptr;
332 inline YI_ARRAY_TYPE *
Get()
const 366 m_pPtr.
Swap(rPtr.m_pPtr);
376 YI_ENSURE_TYPE_HAS_RTTI_DATA(YI_ARRAY_TYPE);
377 return YI_ARRAY_TYPE::GetClassTypeInfo();
407 YI_ASSERT(m_pPtr,
"CYISharedArray",
"Attempted to read into a null shared array.");
408 return m_pPtr.
Get()[nIndex];
438 YI_ASSERT(m_pPtr,
"CYISharedArray",
"Attempted to read into a null shared array.");
439 return m_pPtr.
Get()[nIndex];
465 template<
typename YI_RAW_PTR>
466 static inline void YiDefaultArrayDeleteFunctor(YI_RAW_PTR *pPtr)
476 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_ARRAY_TYPE>
479 return rLhs.
Get() == rRhs.
Get();
482 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_ARRAY_TYPE>
485 return rLhs.
Get() != rRhs.
Get();
488 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_PTR_TYPE>
491 return rLhs.
Get() == rRhs.
Get();
494 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_PTR_TYPE>
497 return rLhs.
Get() != rRhs.
Get();
500 template<
typename YI_L_PTR_TYPE,
typename YI_R_ARRAY_TYPE>
503 return rLhs.
Get() == rRhs.
Get();
506 template<
typename YI_L_PTR_TYPE,
typename YI_R_ARRAY_TYPE>
509 return rLhs.
Get() != rRhs.
Get();
512 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_PTR_TYPE>
515 return rLhs.
Get() == rRhs.
Get();
518 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_PTR_TYPE>
521 return rLhs.
Get() != rRhs.
Get();
524 template<
typename YI_L_PTR_TYPE,
typename YI_R_ARRAY_TYPE>
527 return rLhs.
Get() == rRhs.
Get();
530 template<
typename YI_L_PTR_TYPE,
typename YI_R_ARRAY_TYPE>
533 return rLhs.
Get() != rRhs.
Get();
536 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_ARRAY_TYPE>
539 return rLhs.
Get() == pRhs;
542 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_ARRAY_TYPE>
545 return rLhs.
Get() != pRhs;
548 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_ARRAY_TYPE>
551 return pLhs == rRhs.
Get();
554 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_ARRAY_TYPE>
557 return pLhs != rRhs.
Get();
562 template<
typename YI_ARRAY_TYPE>
564 m_pPtr(array, YiDefaultArrayDeleteFunctor)
void Reset()
Definition: YiSharedArray.h:212
CYISharedArray(const CYIWeakArray< YI_ARRAY_TYPE > &rOther)
Definition: YiSharedArray.h:193
void Swap(CYISharedArray< YI_ARRAY_TYPE > &rPtr)
Definition: YiSharedArray.h:364
CYISharedArray()
Definition: YiSharedArray.h:149
bool IsNull() const
Definition: YiSharedArray.h:340
bool operator!=(const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
Definition: YiSharedArray.h:483
The CYISharedArray is a smart pointer that takes shared ownership of a dynamically allocated array of...
Definition: YiSharedArray.h:138
The CYIWeakPtr is a smart pointer that does not take any ownership of a dynamically allocated object...
Definition: YiSharedPtr.h:20
CYISharedArray< YI_ARRAY_TYPE > & operator=(const CYIWeakArray< YI_OTHER_PTR_TYPE > &rOther)
Definition: YiSharedArray.h:320
CYISharedArray(YI_ARRAY_TYPE array[], YI_FUNCTION_OBJECT functor)
Definition: YiSharedArray.h:164
static const CYIRuntimeTypeInfo & GetClassTypeInfo()
Definition: YiSharedArray.h:374
uint32_t GetUseCount() const
The CYIWeakArray is a smart pointer that does not take ownership of a dynamically allocated array of ...
Definition: YiSharedArray.h:13
uint32_t GetUseCount() const
Definition: YiSharedArray.h:356
void Swap(CYISharedPtr< YI_PTR_TYPE > &rPtr)
const YI_ARRAY_TYPE & operator[](int32_t nIndex) const
Definition: YiSharedArray.h:436
YI_PTR_TYPE * Get() const
YI_PTR_TYPE * Get() const
CYISharedArray(const CYIWeakArray< YI_OTHER_ARRAY_TYPE > &rOther)
Definition: YiSharedArray.h:204
The abstract runtime representation of a C++ type.
Definition: YiRtti.h:48
CYISharedArray< YI_ARRAY_TYPE > & operator=(const CYISharedArray< YI_OTHER_PTR_TYPE > &rOther)
Definition: YiSharedArray.h:285
CYISharedArray(const CYISharedArray< YI_OTHER_ARRAY_TYPE > &rOther)
Definition: YiSharedArray.h:184
bool operator==(const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
Definition: YiSharedArray.h:477
CYISharedArray(const CYISharedArray< YI_ARRAY_TYPE > &rOther)
Definition: YiSharedArray.h:173
#define YI_ASSERT(condition, tag, msg,...)
Platform-independent assertion macro.
Definition: YiError.h:37
bool IsUnique() const
Definition: YiSharedArray.h:348
CYIWeakArray< YI_ARRAY_TYPE > ToWeakArray() const
Definition: YiSharedArray.h:459
YI_ARRAY_TYPE * Get() const
Definition: YiSharedArray.h:332
CYISharedArray< YI_ARRAY_TYPE > & operator=(const CYIWeakArray< YI_ARRAY_TYPE > &rOther)
Definition: YiSharedArray.h:302
bool operator!() const
Definition: YiSharedArray.h:228
YI_ARRAY_TYPE & operator[](int32_t nIndex)
Definition: YiSharedArray.h:405
YI_ARRAY_TYPE & operator*() const
Definition: YiSharedArray.h:220
CYISharedArray< YI_ARRAY_TYPE > & operator=(const CYISharedArray< YI_ARRAY_TYPE > &rOther)
Definition: YiSharedArray.h:267