Version: 9.16.0
Utils_SINGLETON.hxx
Go to the documentation of this file.
1// Copyright (C) 2007-2026 CEA, EDF, OPEN CASCADE
2//
3// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5//
6// This library is free software; you can redistribute it and/or
7// modify it under the terms of the GNU Lesser General Public
8// License as published by the Free Software Foundation; either
9// version 2.1 of the License, or (at your option) any later version.
10//
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// Lesser General Public License for more details.
15//
16// You should have received a copy of the GNU Lesser General Public
17// License along with this library; if not, write to the Free Software
18// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19//
20// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21//
22
23// SALOME Utils : general SALOME's definitions and tools
24// File : Utils_SINGLETON.hxx
25// Author : Antoine YESSAYAN, EDF
26// Module : SALOME
27// $Header$
28//
29# if !defined( __SINGLETON__H__ )
30# define __SINGLETON__H__
31
32#include "SALOME_Utils.hxx"
33
35# include <list>
36
73template <class TYPE> class SINGLETON_
74{
75
76public :
77
78 static TYPE *Instance( void );
79 static bool IsAlreadyExisting( void );
80 static int Destruction( void );
81
82private :
83
84 TYPE _Instance ;
86
87 SINGLETON_( void );
89
90} ; /* class SINGLETON_<TYPE> */
91
92
93
94
95template <class TYPE> SINGLETON_<TYPE> *SINGLETON_<TYPE>::PtrSingleton=NULL ;
96
97
98
108template <class TYPE> TYPE *SINGLETON_<TYPE>::Instance( void )
109{
110 if ( ! PtrSingleton )
111 {
112 //MESSAGE("SINGLETON_<TYPE>::Instance( void )") ;
113 PtrSingleton = new SINGLETON_<TYPE> ;
114 new DESTRUCTEUR_DE_<TYPE>( PtrSingleton->_Instance ) ;
115 }
116 return &PtrSingleton->_Instance ;
117}
118
119
120template <class TYPE> bool SINGLETON_<TYPE>::IsAlreadyExisting( void )
121{
122 return PtrSingleton ? true : false ;
123}
124
125
126
127
128template <class TYPE> SINGLETON_<TYPE>::SINGLETON_( void )
129{
130 //MESSAGE("CREATION d'un SINGLETON_") ;
131}
132
133
134
135
142template <class TYPE> int SINGLETON_<TYPE>::Destruction( void )
143{
144 int k = - 1 ;
145 //BEGIN_OF("SINGLETON_<TYPE>::Destruction( void )") ;
146 if ( PtrSingleton )
147 {
148 //MESSAGE("Destruction du SINGLETON_") ;
149
150
151 std::list<DESTRUCTEUR_GENERIQUE_ *>::iterator k ;
153 {
154 if ( *k == PtrSingleton->_Instance )
155 {
157 break ;
158 }
159 }
160 delete PtrSingleton ;
161 PtrSingleton = NULL ;
162 }
163 //END_OF("SINGLETON_<TYPE>::Destruction( void )") ;
164 return k ;
165}
166
167
168template <class TYPE> SINGLETON_<TYPE>::~SINGLETON_()
169{
170 //MESSAGE("passage dans SINGLETON_<TYPE>::~SINGLETON_( void )") ;
171}
172
173# endif /* # if !defined( __SINGLETON__H__ ) */
Purpose
Definition: Utils_DESTRUCTEUR_GENERIQUE.hxx:97
static std::list< DESTRUCTEUR_GENERIQUE_ * > * Destructeurs
Definition: Utils_DESTRUCTEUR_GENERIQUE.hxx:66
Definition
Definition: Utils_SINGLETON.hxx:74
TYPE _Instance
Definition: Utils_SINGLETON.hxx:84
static TYPE * Instance(void)
Singleton dynamic creation using the default builder.
Definition: Utils_SINGLETON.hxx:108
static int Destruction(void)
destroys the Singleton before the end of the application process
Definition: Utils_SINGLETON.hxx:142
static SINGLETON_ * PtrSingleton
Definition: Utils_SINGLETON.hxx:85
~SINGLETON_()
Definition: Utils_SINGLETON.hxx:168
static bool IsAlreadyExisting(void)
returns True if the singleton is already existing
Definition: Utils_SINGLETON.hxx:120
SINGLETON_(void)
Definition: Utils_SINGLETON.hxx:128