152 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
 | |
| ///////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Created : 2008-12-19
 | |
| // Updated : 2005-06-13
 | |
| // Licence : This source is under MIT License
 | |
| // File    : gli/shared_array.inl
 | |
| ///////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| namespace gli
 | |
| {
 | |
| 	template <typename T>
 | |
| 	shared_array<T>::shared_array() :
 | |
| 		Counter(0),
 | |
| 		Pointer(0)
 | |
| 	{}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	shared_array<T>::shared_array
 | |
| 	(
 | |
| 		shared_array<T> const & SharedArray
 | |
| 	)
 | |
| 	{
 | |
| 		this->Counter = SharedArray.Counter;
 | |
| 		this->Pointer = SharedArray.Pointer;
 | |
| 		(*this->Counter)++;
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	shared_array<T>::shared_array
 | |
| 	(
 | |
| 		T * Pointer
 | |
| 	)
 | |
| 	{
 | |
| 		this->reset(Pointer);
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	shared_array<T>::~shared_array()
 | |
| 	{
 | |
| 		this->reset();
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	void shared_array<T>::reset()
 | |
| 	{
 | |
| 		if(this->Pointer)
 | |
| 		{
 | |
| 			(*this->Counter)--;
 | |
| 			if(*this->Counter <= 0)
 | |
| 			{
 | |
| 				delete this->Counter;
 | |
| 				this->Counter = 0;
 | |
| 				delete[] this->Pointer;
 | |
| 				this->Pointer = 0;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	void shared_array<T>::reset(T * Pointer)
 | |
| 	{
 | |
| 		this->Counter = new int;
 | |
| 		this->Pointer = Pointer;
 | |
| 		*this->Counter = 1;
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	shared_array<T>& shared_array<T>::operator=
 | |
| 	(
 | |
| 		shared_array<T> const & SharedArray
 | |
| 	)
 | |
| 	{
 | |
| 		this->reset();
 | |
| 
 | |
| 		this->Counter = SharedArray.Counter;
 | |
| 		this->Pointer = SharedArray.Pointer;
 | |
| 		(*this->Counter)++;
 | |
| 
 | |
| 		return *this;
 | |
| 	}
 | |
| 
 | |
| 	//template <typename T>
 | |
| 	//shared_array<T> & shared_array<T>::operator=(T * Pointer)
 | |
| 	//{
 | |
| 	//	if(this->Pointer)
 | |
| 	//	{
 | |
| 	//		(*this->Counter)--;
 | |
| 	//		if(*this->Counter <= 0)
 | |
| 	//		{
 | |
| 	//			delete this->Counter;
 | |
| 	//			delete[] this->Pointer;
 | |
| 	//		}
 | |
| 	//	}
 | |
| 
 | |
| 	//	this->Counter = new int;
 | |
| 	//	this->Pointer = this->Pointer;
 | |
| 	//	(*this->Counter) = 1;
 | |
| 
 | |
| 	//	return *this;
 | |
| 	//}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	bool shared_array<T>::operator==(shared_array<T> const & SharedArray) const
 | |
| 	{
 | |
| 		return this->Pointer == SharedArray.Pointer;
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	bool shared_array<T>::operator!=(shared_array<T> const & SharedArray) const
 | |
| 	{
 | |
| 		return this->Pointer != SharedArray.Pointer;
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	T & shared_array<T>::operator*()
 | |
| 	{
 | |
| 		return *this->Pointer;
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	T * shared_array<T>::operator->()
 | |
| 	{
 | |
| 		return this->Pointer;
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	T const & shared_array<T>::operator*() const
 | |
| 	{
 | |
| 		return * this->Pointer;
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	T const * const shared_array<T>::operator->() const
 | |
| 	{
 | |
| 		return this->Pointer;
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	T * shared_array<T>::get()
 | |
| 	{
 | |
| 		return this->Pointer;
 | |
| 	}
 | |
| 
 | |
| 	template <typename T>
 | |
| 	T const * const shared_array<T>::get() const
 | |
| 	{
 | |
| 		return this->Pointer;
 | |
| 	}
 | |
| 
 | |
| }//namespace gli
 | 
