/////////////////////////////////////////////////////////////////////////// // 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