SALOME documentation central
src/Utils/Utils_SINGLETON.hxx
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 # if !defined( __SINGLETON__H__ )
00029 # define __SINGLETON__H__
00030
00031 #include "SALOME_Utils.hxx"
00032
00033 # include "Utils_DESTRUCTEUR_GENERIQUE.hxx"
00034 # include <list>
00035
00072 template <class TYPE> class SINGLETON_
00073 {
00074
00075 public :
00076
00077 static TYPE *Instance( void );
00078 static bool IsAlreadyExisting( void );
00079 static int Destruction( void );
00080
00081 private :
00082
00083 TYPE _Instance ;
00084 static SINGLETON_ *PtrSingleton ;
00085
00086 SINGLETON_( void );
00087 ~SINGLETON_();
00088
00089 } ;
00090
00091
00092
00093
00094 template <class TYPE> SINGLETON_<TYPE> *SINGLETON_<TYPE>::PtrSingleton=NULL ;
00095
00096
00097
00107 template <class TYPE> TYPE *SINGLETON_<TYPE>::Instance( void )
00108 {
00109 if ( ! PtrSingleton )
00110 {
00111
00112 PtrSingleton = new SINGLETON_<TYPE> ;
00113 new DESTRUCTEUR_DE_<TYPE>( PtrSingleton->_Instance ) ;
00114 }
00115 return &PtrSingleton->_Instance ;
00116 }
00117
00118
00119 template <class TYPE> bool SINGLETON_<TYPE>::IsAlreadyExisting( void )
00120 {
00121 return PtrSingleton ? true : false ;
00122 }
00123
00124
00125
00126
00127 template <class TYPE> SINGLETON_<TYPE>::SINGLETON_( void )
00128 {
00129
00130 }
00131
00132
00133
00134
00141 template <class TYPE> int SINGLETON_<TYPE>::Destruction( void )
00142 {
00143 int k = - 1 ;
00144
00145 if ( PtrSingleton )
00146 {
00147
00148
00149
00150 std::list<DESTRUCTEUR_GENERIQUE_ *>::iterator k ;
00151 for( k=DESTRUCTEUR_GENERIQUE_::Destructeurs->begin() ; k!=DESTRUCTEUR_GENERIQUE_::Destructeurs->end();k++)
00152 {
00153 if ( *k == PtrSingleton->_Instance )
00154 {
00155 DESTRUCTEUR_GENERIQUE_::Destructeurs->erase( k ) ;
00156 break ;
00157 }
00158 }
00159 delete PtrSingleton ;
00160 PtrSingleton = NULL ;
00161 }
00162
00163 return k ;
00164 }
00165
00166
00167 template <class TYPE> SINGLETON_<TYPE>::~SINGLETON_()
00168 {
00169
00170 }
00171
00172 # endif
Copyright © 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS