2 #ifndef _YI_SCOPED_PTR_H_ 3 #define _YI_SCOPED_PTR_H_ 150 template<typename YI_PTR_TYPE, typename YI_DELETE_FUNCTOR = typename std::unique_ptr<YI_PTR_TYPE>::deleter_type>
153 template<
typename YI_OTHER_PTR_TYPE,
typename YI_OTHER_DELETER>
163 m_pUnique(pPtr, YI_DELETE_FUNCTOR())
173 inline CYIScopedPtr(YI_PTR_TYPE *pPtr,
const YI_DELETE_FUNCTOR &deleter) :
174 m_pUnique(pPtr, deleter)
184 m_pUnique(
std::move(other.m_pUnique))
193 inline CYIScopedPtr(std::unique_ptr<YI_PTR_TYPE, YI_DELETE_FUNCTOR> &&other) :
194 m_pUnique(
std::move(other))
205 m_pUnique(pPtr,
std::move(deleter))
214 template<
typename YI_PTR_OTHER_TYPE,
typename YI_OTHER_DELETER>
216 m_pUnique(
std::move(other.m_pUnique))
255 m_pUnique.reset(pPtr);
264 m_pUnique = std::move(other.m_pUnique);
274 m_pUnique = std::move(other);
282 template<
typename YI_PTR_OTHER_TYPE,
typename YI_OTHER_DELETER>
285 m_pUnique = std::move(other.m_pUnique);
306 return m_pUnique.operator*();
326 YI_ASSERT(GetPointer(),
"CYIScopedPtr",
"Attempted to dereference a null scoped pointer.");
327 return m_pUnique.operator->();
354 return GetPointer() ==
nullptr;
378 inline operator bool()
const 380 return GetPointer() !=
nullptr;
383 template<
typename YI_PTR_OTHER_TYPE,
typename YI_OTHER_DELETER>
384 inline operator std::unique_ptr<YI_PTR_OTHER_TYPE, YI_OTHER_DELETER>()
386 return std::move(m_pUnique);
417 inline void Reset(YI_PTR_TYPE *pPtr =
nullptr)
440 inline YI_PTR_TYPE *
Get()
const 470 return m_pUnique.release();
497 return GetPointer() ==
nullptr;
532 m_pUnique.swap(rPtr.m_pUnique);
536 inline YI_PTR_TYPE *GetPointer()
const 538 return m_pUnique.get();
541 std::unique_ptr<YI_PTR_TYPE, YI_DELETE_FUNCTOR> m_pUnique;
548 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
552 return rLhs.
Get() == rRhs.
Get();
555 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
559 return rLhs.
Get() != rRhs.
Get();
562 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE>
566 return rLhs.
Get() == pRhs;
569 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE>
573 return rLhs.
Get() != pRhs;
576 template<
typename YI_L_PTR_TYPE,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
580 return pLhs == rRhs.
Get();
583 template<
typename YI_L_PTR_TYPE,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
587 return pLhs != rRhs.
Get();
590 #if __cplusplus >= 201103L || defined(YI_UWP) || defined(YI_WIN32) 592 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR>
596 return rLhs.
Get() == pRhs;
599 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR>
603 return rLhs.
Get() != pRhs;
606 template<
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
610 return pLhs == rRhs.
Get();
613 template<
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
617 return pLhs != rRhs.
Get();
620 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
624 return rLhs.
Get() == rRhs.get();
627 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
631 return rLhs.
Get() != rRhs.get();
634 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
638 return rLhs.get() == rRhs.
Get();
641 template<
typename YI_L_PTR_TYPE,
typename YI_L_DELETE_FUNCTOR,
typename YI_R_PTR_TYPE,
typename YI_R_DELETE_FUNCTOR>
645 return rLhs.get() != rRhs.
Get();
648 #endif // C++11 checks YI_PTR_TYPE * Get() const
Definition: YiScopedPtr.h:440
bool operator!=(const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
Definition: YiScopedPtr.h:557
#define YI_DISALLOW_COPY_AND_ASSIGN(TypeName)
Delete the copy constructor and assignment operator (and consequently the move constructor as well) ...
Definition: YiPredef.h:114
CYIScopedPtr & operator=(std::unique_ptr< YI_PTR_TYPE, YI_DELETE_FUNCTOR > &&other)
Definition: YiScopedPtr.h:272
void Swap(CYIScopedPtr< YI_PTR_TYPE, YI_DELETE_FUNCTOR > &rPtr)
Definition: YiScopedPtr.h:530
YI_PTR_TYPE & operator*() const
Definition: YiScopedPtr.h:304
CYIScopedPtr(YI_PTR_TYPE *pPtr, const YI_DELETE_FUNCTOR &deleter)
Definition: YiScopedPtr.h:173
void Reset(YI_PTR_TYPE *pPtr=nullptr)
Definition: YiScopedPtr.h:417
CYIScopedPtr & operator=(CYIScopedPtr< YI_PTR_OTHER_TYPE, YI_OTHER_DELETER > &&other)
Definition: YiScopedPtr.h:283
CYIScopedPtr(CYIScopedPtr< YI_PTR_OTHER_TYPE, YI_OTHER_DELETER > &&other)
Definition: YiScopedPtr.h:215
CYIScopedPtr(YI_PTR_TYPE *pPtr, YI_DELETE_FUNCTOR &&deleter)
Definition: YiScopedPtr.h:204
CYIScopedPtr(std::unique_ptr< YI_PTR_TYPE, YI_DELETE_FUNCTOR > &&other)
Definition: YiScopedPtr.h:193
~CYIScopedPtr()
Definition: YiScopedPtr.h:223
CYIScopedPtr(CYIScopedPtr &&other)
Definition: YiScopedPtr.h:183
CYIScopedPtr(YI_PTR_TYPE *pPtr=nullptr)
Definition: YiScopedPtr.h:162
The CYIScopedPtr is a smart pointer that takes sole ownership of a dynamically allocated object...
Definition: YiScopedPtr.h:151
YI_PTR_TYPE * operator->() const
Definition: YiScopedPtr.h:324
YI_PTR_TYPE * Take()
Definition: YiScopedPtr.h:468
void operator=(YI_PTR_TYPE *pPtr)
Definition: YiScopedPtr.h:253
CYIScopedPtr & operator=(CYIScopedPtr &&other)
Definition: YiScopedPtr.h:262
#define YI_ASSERT(condition, tag, msg,...)
Platform-independent assertion macro.
Definition: YiError.h:37
bool operator==(const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
Definition: YiScopedPtr.h:550
bool IsNull() const
Definition: YiScopedPtr.h:495
bool operator!() const
Definition: YiScopedPtr.h:352