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