00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00025
00027 template <typename T>
00028 ResourcePtr<T>::ResourcePtr() :
00029 myResource(NULL)
00030 {
00031
00032 }
00033
00034
00036 template <typename T>
00037 ResourcePtr<T>::ResourcePtr(const T* resource) :
00038 myResource(resource)
00039 {
00040 if (myResource)
00041 myResource->Connect(*this);
00042 }
00043
00044
00046 template <typename T>
00047 ResourcePtr<T>::ResourcePtr(const ResourcePtr<T>& copy) :
00048 myResource(copy.myResource)
00049 {
00050 if (myResource)
00051 myResource->Connect(*this);
00052 }
00053
00054
00056 template <typename T>
00057 ResourcePtr<T>::~ResourcePtr()
00058 {
00059 if (myResource)
00060 myResource->Disconnect(*this);
00061 }
00062
00063
00065 template <typename T>
00066 ResourcePtr<T>& ResourcePtr<T>::operator =(const ResourcePtr<T>& right)
00067 {
00068 if (myResource)
00069 myResource->Disconnect(*this);
00070
00071 myResource = right.myResource;
00072
00073 if (myResource)
00074 myResource->Connect(*this);
00075
00076 return *this;
00077 }
00078
00079
00081 template <typename T>
00082 ResourcePtr<T>& ResourcePtr<T>::operator =(const T* resource)
00083 {
00084 if (myResource)
00085 myResource->Disconnect(*this);
00086
00087 myResource = resource;
00088
00089 if (myResource)
00090 myResource->Connect(*this);
00091
00092 return *this;
00093 }
00094
00095
00097 template <typename T>
00098 ResourcePtr<T>::operator const T*() const
00099 {
00100 return myResource;
00101 }
00102
00103
00105 template <typename T>
00106 const T& ResourcePtr<T>::operator *() const
00107 {
00108 return *myResource;
00109 }
00110
00111
00113 template <typename T>
00114 const T* ResourcePtr<T>::operator ->() const
00115 {
00116 return myResource;
00117 }
00118
00119
00121 template <typename T>
00122 void ResourcePtr<T>::OnResourceDestroyed()
00123 {
00124 myResource = NULL;
00125 }