X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FUtils%2FUtils_DESTRUCTEUR_GENERIQUE.hxx;h=3f2e6b45a2aa1e96048be94e923d255c87f6be8f;hb=34bdd08c1cbba32e415e32489d56f91cf89e76da;hp=68fb9ce6e116dc1e79c2c77b21cb5cc24700a3b0;hpb=1bd1d38e86c39b13e265f8ff534fc1463c25fef3;p=modules%2Fkernel.git diff --git a/src/Utils/Utils_DESTRUCTEUR_GENERIQUE.hxx b/src/Utils/Utils_DESTRUCTEUR_GENERIQUE.hxx index 68fb9ce6e..3f2e6b45a 100644 --- a/src/Utils/Utils_DESTRUCTEUR_GENERIQUE.hxx +++ b/src/Utils/Utils_DESTRUCTEUR_GENERIQUE.hxx @@ -1,37 +1,42 @@ -// SALOME Utils : general SALOME's definitions and tools +// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + +// SALOME Utils : general SALOME's definitions and tools // File : Utils_DESTRUCTEUR_GENERIQUE.hxx // Author : Antoine YESSAYAN, EDF // Module : SALOME // $Header$ - +// # if !defined( __DESTRUCTEUR_GENERIQUE__H__ ) # define __DESTRUCTEUR_GENERIQUE__H__ -# include +#include + +#include "SALOME_Utils.hxx" + +#include #include -# include +#include +#include //# include "utilities.h" /*!\class DESTRUCTEUR_GENERIQUE_ @@ -44,40 +49,26 @@ * Usage * * The only way to use the DESTRUCTEUR_GENERIQUE_ class is inheritance : - * class DESTRUCTEUR_SPECIFIQUE_ : public DESTRUCTEUR_GENERIQUE_ + * class DESTRUCTEUR_SPECIFIQUE_ : public DESTRUCTEUR_GENERIQUE_ * * Design description * - * A generic destructor supply two functionalities : - * -# a static method to add a destruction (objetct) to be performed DESTRUCTEUR_GENERIQUE_::Ajout( - * DESTRUCTEUR_GENERIQUE_ &objet) ; - * The Destruction object is stored in a list of pointer to DESTRUCTEUR_GENERIQUE_ objects. - * -# an object method to execute the destruction : operator()(). + * A generic destructor supply two functionalities : + * -# a static method to add a destruction (objetct) to be performed DESTRUCTEUR_GENERIQUE_::Ajout( + * DESTRUCTEUR_GENERIQUE_ &objet) ; + * The Destruction object is stored in a list of pointer to DESTRUCTEUR_GENERIQUE_ objects. + * -# an object method to execute the destruction : operator()(). */ -#if defined UTILS_EXPORTS -#if defined WIN32 -#define UTILS_EXPORT __declspec( dllexport ) -#else -#define UTILS_EXPORT -#endif -#else -#if defined WNT -#define UTILS_EXPORT __declspec( dllimport ) -#else -#define UTILS_EXPORT -#endif -#endif - -class DESTRUCTEUR_GENERIQUE_ +class UTILS_EXPORT DESTRUCTEUR_GENERIQUE_ { public : - UTILS_EXPORT static std::list *Destructeurs; + static std::list *Destructeurs; virtual ~DESTRUCTEUR_GENERIQUE_() {}//!< virtual destructor - UTILS_EXPORT static const int Ajout( DESTRUCTEUR_GENERIQUE_ &objet );//!< adds a destruction object to the list of destructions - UTILS_EXPORT virtual void operator()( void )=0 ;//!< performs the destruction -} ; + static const int Ajout( DESTRUCTEUR_GENERIQUE_ &objet );//!< adds a destruction object to the list of destructions + virtual void operator()( void )=0 ;//!< performs the destruction +}; /*!\class DESTRUCTEUR_DE_ @@ -89,17 +80,17 @@ public : * * Usage * - * In this example the POINT_ ptrPoint will be destroyed at the end of the process (atexit). + * In this example the POINT_ ptrPoint will be destroyed at the end of the process (atexit). * * POINT_ *ptrPoint = new POINT_ ;
- * DESTRUCTEUR_DE_ *ptrDestruction = new DESTRUCTEUR_DE_( *ptrPoint ) ; + * DESTRUCTEUR_DE_ *ptrDestruction = new DESTRUCTEUR_DE_( *ptrPoint ) ; * - * Note that neither ptrPoint, nor ptrDestruction should be destroyed by the user. + * Note that neither ptrPoint, nor ptrDestruction should be destroyed by the user. * * Design description * - * The destruction object must be created dynamicaly because it suscribes himself in the list of - * destruction to be performed at the end of the process. + * The destruction object must be created dynamically because it subscribes itself in the list of + * destruction to be performed at the end of the process. * */ template class DESTRUCTEUR_DE_ : public DESTRUCTEUR_GENERIQUE_ @@ -122,16 +113,19 @@ public : virtual void operator()(void){ typedef PortableServer::ServantBase TServant; if(_PtrObjet){ + if(dynamic_cast(_PtrObjet)){ + // std::cerr << "WARNING: automatic destruction for servant is no more used. It's too late in exit. Use explicit call" << std::endl; + /* if(TServant* aServant = dynamic_cast(_PtrObjet)){ - //cerr << "DESTRUCTEUR_GENERIQUE_::operator() deleting ServantBase's _PtrObjet" << endl; - PortableServer::POA_var aPOA = aServant->_default_POA(); - PortableServer::ObjectId_var anObjectId = aPOA->servant_to_id(aServant); - aPOA->deactivate_object(anObjectId.in()); - aServant->_remove_ref(); + PortableServer::POA_var aPOA = aServant->_default_POA(); + PortableServer::ObjectId_var anObjectId = aPOA->servant_to_id(aServant); + aPOA->deactivate_object(anObjectId.in()); + aServant->_remove_ref(); + */ }else{ - //cerr << "DESTRUCTEUR_GENERIQUE_::operator() deleting _PtrObjet" << endl; - TYPE* aPtr = static_cast(_PtrObjet); - delete aPtr; + //cerr << "DESTRUCTEUR_GENERIQUE_::operator() deleting _PtrObjet" << endl; + TYPE* aPtr = static_cast(_PtrObjet); + delete aPtr; } _PtrObjet = NULL ; } @@ -146,4 +140,4 @@ private : }; -# endif /* # if !defined( __SINGLETON__H__ ) */ +# endif /* # if !defined( __DESTRUCTEUR_GENERIQUE__H__ ) */