Singleton.inl
Go to the documentation of this file.00001 //*** Singleton.inl *** 00002 00003 #include "Debug.h" 00004 00005 // Static instance pointer 00006 template <class TYPE> TYPE* Singleton<TYPE>::staticInstancePointer_=0; 00007 00008 00009 //*** Constructor *** 00010 00011 template <class TYPE> 00012 Singleton<TYPE>::Singleton() 00013 { 00014 if (staticInstancePointer_) 00015 { 00016 FatalError("Attempt to create multiple instances of a singleton system."); 00017 } 00018 00019 staticInstancePointer_=static_cast<TYPE*>(this); 00020 } 00021 00022 00023 //*** Destructor *** 00024 00025 template <class TYPE> 00026 Singleton<TYPE>::~Singleton() 00027 { 00028 if (!staticInstancePointer_) 00029 { 00030 FatalError("Attempt to destroy singleton instance when it has not been created."); 00031 } 00032 staticInstancePointer_=0; 00033 } 00034 00035 00036 //*** CreateInstance *** 00037 00038 template <class TYPE> 00039 void Singleton<TYPE>::CreateInstance() 00040 { 00041 if (staticInstancePointer_) 00042 { 00043 FatalError("Attempt to create multiple instances of a singleton system."); 00044 } 00045 00046 staticInstancePointer_=new TYPE(); 00047 } 00048 00049 00050 //*** DestroyInstance *** 00051 00052 template <class TYPE> 00053 void Singleton<TYPE>::DestroyInstance() 00054 { 00055 if (!staticInstancePointer_) 00056 { 00057 FatalError("Attempt to destroy singleton instance when it has not been created."); 00058 } 00059 00060 delete staticInstancePointer_; 00061 staticInstancePointer_=0; 00062 } 00063 00064 00065 //*** GetInstance *** 00066 00067 template <class TYPE> 00068 TYPE* Singleton<TYPE>::GetInstance() 00069 { 00070 if (!staticInstancePointer_) 00071 { 00072 FatalError("Attempt to access a singleton instance before it's been created."); 00073 } 00074 00075 return staticInstancePointer_; 00076 } 00077 00078 00079 //*** IsInstanceCreated *** 00080 00081 template <class TYPE> 00082 bool Singleton<TYPE>::IsInstanceCreated() 00083 { 00084 if (!staticInstancePointer_) 00085 { 00086 return false; 00087 } 00088 00089 return true; 00090 } 00091
Reproduction/republishing of any material on this site without permission is strictly prohibited.
