2 #ifndef _YI_SCOPED_ARRAY_H_ 3 #define _YI_SCOPED_ARRAY_H_ 78 template<
typename YI_ARRAY_TYPE,
typename YI_DELETE_FUNCTOR = CYICheckedArrayDeleteFunctor<YI_ARRAY_TYPE> >
88 m_pPtr(array, YI_DELETE_FUNCTOR())
98 inline CYIScopedArray(YI_ARRAY_TYPE array[],
const YI_DELETE_FUNCTOR &deleter) :
99 m_pPtr(array, deleter)
109 m_pPtr(
std::move(other.m_pPtr))
120 m_pPtr(array,
std::move(deleter))
129 template<
typename YI_ARRAY_OTHER_TYPE,
typename YI_OTHER_DELETER>
131 m_pPtr(
std::move(other.m_pPtr))
140 if (pPtr != m_pPtr.
Get())
151 m_pPtr = std::move(other.m_pPtr);
158 template<
typename YI_PTR_OTHER_TYPE,
typename YI_OTHER_DELETER>
161 m_pPtr = std::move(other.m_pPtr);
170 YI_ASSERT(m_pPtr,
"CYIScopedArray",
"Attempted to dereference a null scoped array.");
203 inline operator bool()
const 211 inline void Reset(YI_ARRAY_TYPE pPtr[] =
nullptr)
219 inline YI_ARRAY_TYPE *
Get()
const 229 return m_pPtr.
Take();
245 m_pPtr.
Swap(rPtr.m_pPtr);
275 YI_ASSERT(m_pPtr,
"CYIScopedArray",
"Attempted to read into a null scoped array.");
276 return m_pPtr.
Get()[nIndex];
306 YI_ASSERT(m_pPtr,
"CYIScopedArray",
"Attempted to read into a null scoped array.");
307 return m_pPtr.
Get()[nIndex];
319 template<
typename YI_L_ARRAY_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_ARRAY_TYPE,
typename YI_R_DELETE_FUNCTOR>
322 return rLhs.
Get() == rRhs.
Get();
325 template<
typename YI_L_ARRAY_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_ARRAY_TYPE,
typename YI_R_DELETE_FUNCTOR>
328 return rLhs.
Get() != rRhs.
Get();
331 template<
typename YI_L_ARRAY_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_ARRAY_TYPE>
334 return rLhs.
Get() == pRhs;
337 template<
typename YI_L_ARRAY_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_ARRAY_TYPE>
340 return rLhs.
Get() != pRhs;
343 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_ARRAY_TYPE,
typename YI_R_DELETE_FUNCTOR>
346 return pLhs == rRhs.
Get();
349 template<
typename YI_L_ARRAY_TYPE,
typename YI_R_ARRAY_TYPE,
typename YI_R_DELETE_FUNCTOR>
352 return pLhs != rRhs.
Get();
355 #if __cplusplus >= 201103L || defined(YI_UWP) || defined(YI_WIN32) 357 template<
typename YI_L_ARRAY_TYPE,
typename YI_L_DELETE_FUNCTOR>
360 return rLhs.
Get() == pRhs;
363 template<
typename YI_L_ARRAY_TYPE,
typename YI_L_DELETE_FUNCTOR>
366 return rLhs.
Get() != pRhs;
369 template<
typename YI_R_ARRAY_TYPE,
typename YI_R_DELETE_FUNCTOR>
372 return pLhs == rRhs.
Get();
375 template<
typename YI_R_ARRAY_TYPE,
typename YI_R_DELETE_FUNCTOR>
378 return pLhs != rRhs.
Get();
381 #endif // C++11 checks YI_PTR_TYPE * Get() const
Definition: YiScopedPtr.h:440
void Swap(CYIScopedPtr< YI_PTR_TYPE, YI_DELETE_FUNCTOR > &rPtr)
Definition: YiScopedPtr.h:530
void Swap(CYIScopedArray< YI_ARRAY_TYPE, YI_DELETE_FUNCTOR > &rPtr)
Definition: YiScopedArray.h:243
CYIScopedArray(YI_ARRAY_TYPE array[]=nullptr)
Definition: YiScopedArray.h:87
bool IsNull() const
Definition: YiScopedArray.h:235
CYIScopedArray & operator=(CYIScopedArray &&other)
Definition: YiScopedArray.h:149
bool operator!=(const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
Definition: YiScopedArray.h:326
void Reset(YI_ARRAY_TYPE pPtr[]=nullptr)
Definition: YiScopedArray.h:211
CYIScopedArray(YI_ARRAY_TYPE array[], YI_DELETE_FUNCTOR &&deleter)
Definition: YiScopedArray.h:119
bool operator==(const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
Definition: YiScopedArray.h:320
CYIScopedArray & operator=(CYIScopedArray< YI_PTR_OTHER_TYPE, YI_OTHER_DELETER > &&other)
Definition: YiScopedArray.h:159
const YI_ARRAY_TYPE & operator[](int32_t nIndex) const
Definition: YiScopedArray.h:304
YI_ARRAY_TYPE & operator[](int32_t nIndex)
Definition: YiScopedArray.h:273
The CYIScopedArray is a smart pointer that takes sole ownership of a dynamically allocated array of o...
Definition: YiScopedArray.h:79
YI_PTR_TYPE * Take()
Definition: YiScopedPtr.h:468
bool operator!() const
Definition: YiScopedArray.h:177
YI_ARRAY_TYPE * Get() const
Definition: YiScopedArray.h:219
CYIScopedArray(YI_ARRAY_TYPE array[], const YI_DELETE_FUNCTOR &deleter)
Definition: YiScopedArray.h:98
YI_ARRAY_TYPE * Take()
Definition: YiScopedArray.h:227
CYIScopedArray(CYIScopedArray &&other)
Definition: YiScopedArray.h:108
#define YI_ASSERT(condition, tag, msg,...)
Platform-independent assertion macro.
Definition: YiError.h:37
bool IsNull() const
Definition: YiScopedPtr.h:495
CYIScopedArray(CYIScopedArray< YI_ARRAY_OTHER_TYPE, YI_OTHER_DELETER > &&other)
Definition: YiScopedArray.h:130
void operator=(YI_ARRAY_TYPE pPtr[])
Definition: YiScopedArray.h:138
YI_ARRAY_TYPE & operator*() const
Definition: YiScopedArray.h:168