You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							151 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							151 lines
						
					
					
						
							2.8 KiB
						
					
					
				| /////////////////////////////////////////////////////////////////////////////////////////////////// | |
| // 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
 | |
| 
 |