126 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
///////////////////////////////////////////////////////////////////////////
 | 
						|
// 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
 |