Version: 8.3.0
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Groups
Pages
Utils_DESTRUCTEUR_GENERIQUE.hxx
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_DESTRUCTEUR_GENERIQUE.hxx
25
// Author : Antoine YESSAYAN, EDF
26
// Module : SALOME
27
// $Header$
28
//
29
# if !defined( __DESTRUCTEUR_GENERIQUE__H__ )
30
# define __DESTRUCTEUR_GENERIQUE__H__
31
32
#include <SALOMEconfig.h>
33
34
#include "SALOME_Utils.hxx"
35
36
#include <list>
37
#include <cassert>
38
#include <omniORB4/CORBA.h>
39
#include <iostream>
40
//# include "utilities.h"
41
63
class
UTILS_EXPORT
DESTRUCTEUR_GENERIQUE_
64
{
65
public
:
66
static
std::list<DESTRUCTEUR_GENERIQUE_*> *Destructeurs;
67
68
virtual
~DESTRUCTEUR_GENERIQUE_
() {}
69
static
const
int
Ajout(
DESTRUCTEUR_GENERIQUE_
&objet );
70
virtual
void
operator()(
void
)=0 ;
71
};
72
73
96
template
<
class
TYPE>
class
DESTRUCTEUR_DE_
:
public
DESTRUCTEUR_GENERIQUE_
97
{
98
public
:
99
/* Programs the destruction at the end of the process, of the object objet.
100
This method records in _PtrObjet the address of an object to be destroyed
101
at the end of the process
102
*/
103
DESTRUCTEUR_DE_
(TYPE &objet):
104
_PtrObjet( &objet )
105
{
106
assert(
DESTRUCTEUR_GENERIQUE_::Ajout
( *
this
) >= 0) ;
107
}
108
109
/* Performs the destruction of the object.
110
This method really destroys the object pointed by _PtrObjet.
111
It should be called at the end of the process (i.e. at exit).
112
*/
113
virtual
void
operator()
(
void
){
114
typedef
PortableServer::ServantBase TServant;
115
if
(_PtrObjet){
116
if
(dynamic_cast<TServant*>(_PtrObjet)){
117
// std::cerr << "WARNING: automatic destruction for servant is no more used. It's too late in exit. Use explicit call" << std::endl;
118
/*
119
if(TServant* aServant = dynamic_cast<TServant*>(_PtrObjet)){
120
PortableServer::POA_var aPOA = aServant->_default_POA();
121
PortableServer::ObjectId_var anObjectId = aPOA->servant_to_id(aServant);
122
aPOA->deactivate_object(anObjectId.in());
123
aServant->_remove_ref();
124
*/
125
}
else
{
126
//cerr << "DESTRUCTEUR_GENERIQUE_::operator() deleting _PtrObjet" << endl;
127
TYPE* aPtr =
static_cast<
TYPE*
>
(_PtrObjet);
128
delete
aPtr;
129
}
130
_PtrObjet = NULL ;
131
}
132
}
133
134
virtual
~
DESTRUCTEUR_DE_
(){
135
assert(!_PtrObjet) ;
136
}
137
138
private
:
139
TYPE *_PtrObjet ;
140
};
141
142
143
# endif
/* # if !defined( __DESTRUCTEUR_GENERIQUE__H__ ) */
src
Utils
Utils_DESTRUCTEUR_GENERIQUE.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