Version: 8.3.0
Main Page
Related Pages
Packages
Data Structures
Files
File List
Globals
Utils_SINGLETON.hxx
Go to the documentation of this file.
1
// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, 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
34
# include "
Utils_DESTRUCTEUR_GENERIQUE.hxx
"
35
# include <list>
36
73
template
<
class
TYPE>
class
SINGLETON_
74
{
75
76
public
:
77
78
static
TYPE *
Instance
(
void
);
79
static
bool
IsAlreadyExisting
(
void
);
80
static
int
Destruction
(
void
);
81
82
private
:
83
84
TYPE
_Instance
;
85
static
SINGLETON_
*
PtrSingleton
;
86
87
SINGLETON_
(
void
);
88
~SINGLETON_
();
89
90
} ;
/* class SINGLETON_<TYPE> */
91
92
93
94
95
template
<
class
TYPE>
SINGLETON_<TYPE>
*
SINGLETON_<TYPE>::PtrSingleton
=NULL ;
96
97
98
108
template
<
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
120
template
<
class
TYPE>
bool
SINGLETON_<TYPE>::IsAlreadyExisting
(
void
)
121
{
122
return
PtrSingleton ?
true
: false ;
123
}
124
125
126
127
128
template
<
class
TYPE>
SINGLETON_<TYPE>::SINGLETON_
(
void
)
129
{
130
//MESSAGE("CREATION d'un SINGLETON_") ;
131
}
132
133
134
135
142
template
<
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 ;
152
for
( k=
DESTRUCTEUR_GENERIQUE_::Destructeurs
->begin() ; k!=
DESTRUCTEUR_GENERIQUE_::Destructeurs
->end();k++)
153
{
154
if
( *k == PtrSingleton->_Instance )
155
{
156
DESTRUCTEUR_GENERIQUE_::Destructeurs
->erase( k ) ;
157
break ;
158
}
159
}
160
delete
PtrSingleton ;
161
PtrSingleton = NULL ;
162
}
163
//END_OF("SINGLETON_<TYPE>::Destruction( void )") ;
164
return
k ;
165
}
166
167
168
template
<
class
TYPE>
SINGLETON_<TYPE>::~SINGLETON_
()
169
{
170
//MESSAGE("passage dans SINGLETON_<TYPE>::~SINGLETON_( void )") ;
171
}
172
173
# endif
/* # if !defined( __SINGLETON__H__ ) */
src
Utils
Utils_SINGLETON.hxx
Copyright © 2007-2017 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