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
 | 
