| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- ///////////////////////////////////////////////////////////////////////////
- // Interstate Gangs : smart_ptr.inl
- ///////////////////////////////////////////////////////////////////////////
- // This file is under GPL licence
- ///////////////////////////////////////////////////////////////////////////
- // CHANGELOG
- // Groove - 13/06/2005 :
- // - Create file
- ///////////////////////////////////////////////////////////////////////////
- namespace gli
- {
- template <typename T>
- util::CSmartPtr<T>::CSmartPtr()
- {
- m_pPointer = 0;
- }
- template <typename T>
- util::CSmartPtr<T>::CSmartPtr(const util::CSmartPtr<T> & SmartPtr)
- {
- m_pReference = SmartPtr.m_pReference;
- m_pPointer = SmartPtr.m_pPointer;
- (*m_pReference)++;
- }
- template <typename T>
- util::CSmartPtr<T>::CSmartPtr(T* pPointer)
- {
- m_pReference = new int;
- m_pPointer = pPointer;
- (*m_pReference) = 1;
- }
- template <typename T>
- util::CSmartPtr<T>::~CSmartPtr()
- {
- if(!m_pPointer)
- return;
- (*m_pReference)--;
- if(*m_pReference <= 0)
- {
- delete m_pReference;
- delete m_pPointer;
- }
- }
- template <typename T>
- util::CSmartPtr<T>& util::CSmartPtr<T>::operator=(const util::CSmartPtr<T> & SmartPtr)
- {
- if(m_pPointer)
- {
- (*m_pReference)--;
- if(*m_pReference <= 0)
- {
- delete m_pReference;
- delete m_pPointer;
- }
- }
- m_pReference = SmartPtr.m_pReference;
- m_pPointer = SmartPtr.m_pPointer;
- (*m_pReference)++;
- return *this;
- }
- template <typename T>
- util::CSmartPtr<T>& util::CSmartPtr<T>::operator=(T* pPointer)
- {
- if(m_pPointer)
- {
- (*m_pReference)--;
- if(*m_pReference <= 0)
- {
- delete m_pReference;
- delete m_pPointer;
- }
- }
- m_pReference = new int;
- m_pPointer = pPointer;
- (*m_pReference) = 1;
- return *this;
- }
- template <typename T>
- bool util::CSmartPtr<T>::operator==(const util::CSmartPtr<T> & SmartPtr) const
- {
- return m_pPointer == SmartPtr.m_pPointer;
- }
- template <typename T>
- bool util::CSmartPtr<T>::operator!=(const util::CSmartPtr<T> & SmartPtr) const
- {
- return m_pPointer != SmartPtr.m_pPointer;
- }
- template <typename T>
- T& util::CSmartPtr<T>::operator*()
- {
- return *m_pPointer;
- }
- template <typename T>
- T* util::CSmartPtr<T>::operator->()
- {
- return m_pPointer;
- }
- template <typename T>
- const T& util::CSmartPtr<T>::operator*() const
- {
- return *m_pPointer;
- }
- template <typename T>
- const T* util::CSmartPtr<T>::operator->() const
- {
- return m_pPointer;
- }
- }//namespace gli
|