From: mpv Date: Wed, 20 Apr 2005 04:32:56 +0000 (+0000) Subject: MPV: X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=9b04e0122dc87210e278b7bf9c75495026961e00;p=modules%2Fkernel.git MPV: SObject and SComponent, all Attributes, SComponentIterator, ChildIterator, UseCaseIterator and UseCaseBuilder classes now inherit GenericObj class. Thus, servants of these classes now destroyed by common CORBA algorithm (by calling Destroy method in the Client-classes destructors) --- diff --git a/idl/SALOMEDS.idl b/idl/SALOMEDS.idl index 4492b1d49..7c0844a31 100644 --- a/idl/SALOMEDS.idl +++ b/idl/SALOMEDS.idl @@ -36,6 +36,7 @@ #define _SALOMEDS_IDL_ #include "SALOME_Exception.idl" +#include "SALOME_GenericObj.idl" /*! This package contains the interfaces used for creation, managment @@ -813,7 +814,7 @@ Gets the list of open studies */ //========================================================================== - interface SObject + interface SObject : SALOME::GenericObj { /*! Name of the %SObject */ @@ -920,7 +921,7 @@ Gets the list of open studies %Generic attribute is a base interface for all attributes which can be assigned to the SObjects created in the study. */ //========================================================================== - interface GenericAttribute + interface GenericAttribute : SALOME::GenericObj { /*! \brief Exception locking all changes @@ -983,7 +984,7 @@ Gets the list of open studies The search is started from the first %SComponent in the list. */ //========================================================================== - interface SComponentIterator + interface SComponentIterator : SALOME::GenericObj { /*! Activates the %SComponentIterator. @@ -1014,7 +1015,7 @@ Moves the iterator to the next %SComponent in the list. levels. */ //========================================================================== - interface ChildIterator + interface ChildIterator : SALOME::GenericObj { /*! @@ -1049,7 +1050,7 @@ Activates the %ChildIterator for all child levels. This interface contains a set of methods used for iteration over the objects in the use case. */ - interface UseCaseIterator + interface UseCaseIterator : SALOME::GenericObj { /*! Activates the %UseCaseIterator. @@ -1078,7 +1079,7 @@ Activates the %UseCaseIterator. Use case in the study represents a user-managed subtree, containing all or some of the objects which exist in the study. The %UseCaseBuilder interface contains a set of methods used for management of the use case in the study. */ - interface UseCaseBuilder + interface UseCaseBuilder : SALOME::GenericObj { /*! Adds to the use case an object as a child of the current object of the use case. diff --git a/src/SALOMEDS/Makefile.in b/src/SALOMEDS/Makefile.in index df993d6e5..4e739bd99 100644 --- a/src/SALOMEDS/Makefile.in +++ b/src/SALOMEDS/Makefile.in @@ -111,13 +111,13 @@ LIB_SRC = \ # Executables targets BIN = SALOMEDS_Server SALOMEDS_Client BIN_SRC = -LIB_SERVER_IDL = SALOMEDS.idl SALOMEDS_Attributes.idl SALOME_Exception.idl +LIB_SERVER_IDL = SALOMEDS.idl SALOMEDS_Attributes.idl SALOME_Exception.idl SALOME_GenericObj.idl BIN_SERVER_IDL = SALOMEDS.idl SALOMEDS_Attributes.idl BIN_CLIENT_IDL = CPPFLAGS+=$(OCC_INCLUDES) $(HDF5_INCLUDES) CXXFLAGS+=$(OCC_CXXFLAGS) -LDFLAGS+= $(HDF5_LIBS) -lTOOLSDS -lSalomeNS -lSalomeHDFPersist -lOpUtil -lSALOMELocalTrace -lSalomeDSImpl $(CAS_LDPATH) -lTKCAF -lTKBO -lTKStdSchema -lSalomeGenericObj -lSalomeLifeCycleCORBA +LDFLAGS+= $(HDF5_LIBS) -lTOOLSDS -lSalomeNS -lSalomeHDFPersist -lOpUtil -lSALOMELocalTrace -lSalomeDSImpl -lSalomeGenericObj $(CAS_LDPATH) -lTKCAF -lTKBO -lTKStdSchema -lSalomeGenericObj -lSalomeLifeCycleCORBA # _CS_gbo_090604 Ajout Spécifique Calibre 3, pour l'utilisation de la version 5.12 de la bibliothèque OCC. # La bibliothèque OCC5.12 a été compilée sur Calibre 3 avec l'extention Xmu (impossible de compiler sans). diff --git a/src/SALOMEDS/SALOMEDS_ChildIterator.cxx b/src/SALOMEDS/SALOMEDS_ChildIterator.cxx index 700d790ab..3bbaae065 100644 --- a/src/SALOMEDS/SALOMEDS_ChildIterator.cxx +++ b/src/SALOMEDS/SALOMEDS_ChildIterator.cxx @@ -23,7 +23,7 @@ SALOMEDS_ChildIterator::SALOMEDS_ChildIterator(SALOMEDS::ChildIterator_ptr theIt SALOMEDS_ChildIterator::~SALOMEDS_ChildIterator() { -// if(!_isLocal) CORBA::release(_corba_impl); + if(!_isLocal) _corba_impl->Destroy(); } void SALOMEDS_ChildIterator::Init() diff --git a/src/SALOMEDS/SALOMEDS_ChildIterator_i.hxx b/src/SALOMEDS/SALOMEDS_ChildIterator_i.hxx index 47d5741a9..0b4ae30ed 100644 --- a/src/SALOMEDS/SALOMEDS_ChildIterator_i.hxx +++ b/src/SALOMEDS/SALOMEDS_ChildIterator_i.hxx @@ -11,15 +11,16 @@ // IDL headers #include #include CORBA_SERVER_HEADER(SALOMEDS) - - +#include // Cascade headers #include "SALOMEDSImpl_ChildIterator.hxx" #include -class SALOMEDS_ChildIterator_i: public POA_SALOMEDS::ChildIterator, - public PortableServer::RefCountServantBase { +class SALOMEDS_ChildIterator_i: public virtual POA_SALOMEDS::ChildIterator, + public virtual PortableServer::RefCountServantBase, + public virtual SALOME::GenericObj_i +{ private: CORBA::ORB_ptr _orb; Handle(SALOMEDSImpl_ChildIterator) _it; diff --git a/src/SALOMEDS/SALOMEDS_GenericAttribute.cxx b/src/SALOMEDS/SALOMEDS_GenericAttribute.cxx index efea81cc0..c9d316bff 100644 --- a/src/SALOMEDS/SALOMEDS_GenericAttribute.cxx +++ b/src/SALOMEDS/SALOMEDS_GenericAttribute.cxx @@ -49,6 +49,9 @@ SALOMEDS_GenericAttribute::SALOMEDS_GenericAttribute(SALOMEDS::GenericAttribute_ SALOMEDS_GenericAttribute::~SALOMEDS_GenericAttribute() { + if (!_isLocal) { + _corba_impl->Destroy(); + } } void SALOMEDS_GenericAttribute::CheckLocked() diff --git a/src/SALOMEDS/SALOMEDS_GenericAttribute_i.cxx b/src/SALOMEDS/SALOMEDS_GenericAttribute_i.cxx index 5e968a40f..0310c4c17 100644 --- a/src/SALOMEDS/SALOMEDS_GenericAttribute_i.cxx +++ b/src/SALOMEDS/SALOMEDS_GenericAttribute_i.cxx @@ -79,6 +79,7 @@ char* SALOMEDS_GenericAttribute_i::GetClassType() SALOMEDS::GenericAttribute_ptr SALOMEDS_GenericAttribute_i::CreateAttribute(const Handle(TDF_Attribute)& theAttr, CORBA::ORB_ptr theOrb) { +/* SALOMEDS::Locker lock; static std::map _mapOfAttrib; @@ -94,6 +95,12 @@ SALOMEDS::GenericAttribute_ptr SALOMEDS_GenericAttribute_i::CreateAttribute(cons __CreateGenericCORBAAttribute _mapOfAttrib[theAttr.operator->()] = attr_servant; } +*/ + // mpv: now servants Destroyed by common algos of CORBA + char* aTypeOfAttribute = Handle(SALOMEDSImpl_GenericAttribute)::DownCast(theAttr)->GetClassType().ToCString(); + SALOMEDS::GenericAttribute_var anAttribute; + SALOMEDS_GenericAttribute_i* attr_servant = NULL; + __CreateGenericCORBAAttribute return anAttribute._retn(); } diff --git a/src/SALOMEDS/SALOMEDS_GenericAttribute_i.hxx b/src/SALOMEDS/SALOMEDS_GenericAttribute_i.hxx index 1710831ae..9f612e96d 100644 --- a/src/SALOMEDS/SALOMEDS_GenericAttribute_i.hxx +++ b/src/SALOMEDS/SALOMEDS_GenericAttribute_i.hxx @@ -8,12 +8,14 @@ // IDL headers #include #include CORBA_SERVER_HEADER(SALOMEDS) +#include #include #include "SALOMEDS_SObject_i.hxx" #include "SALOMEDSImpl_GenericAttribute.hxx" -class SALOMEDS_GenericAttribute_i: public POA_SALOMEDS::GenericAttribute, - public PortableServer::RefCountServantBase +class SALOMEDS_GenericAttribute_i: public virtual POA_SALOMEDS::GenericAttribute, + public virtual PortableServer::RefCountServantBase, + public virtual SALOME::GenericObj_i { protected: diff --git a/src/SALOMEDS/SALOMEDS_SComponentIterator.cxx b/src/SALOMEDS/SALOMEDS_SComponentIterator.cxx index 7eda2287f..35fb46d33 100644 --- a/src/SALOMEDS/SALOMEDS_SComponentIterator.cxx +++ b/src/SALOMEDS/SALOMEDS_SComponentIterator.cxx @@ -21,7 +21,7 @@ SALOMEDS_SComponentIterator::SALOMEDS_SComponentIterator(SALOMEDS::SComponentIte SALOMEDS_SComponentIterator::~SALOMEDS_SComponentIterator() { - //if(!_isLocal) CORBA::release(_corba_impl); + if(!_isLocal) _corba_impl->Destroy(); } void SALOMEDS_SComponentIterator::Init() diff --git a/src/SALOMEDS/SALOMEDS_SComponentIterator_i.hxx b/src/SALOMEDS/SALOMEDS_SComponentIterator_i.hxx index 740fba5bc..8bea4d1de 100644 --- a/src/SALOMEDS/SALOMEDS_SComponentIterator_i.hxx +++ b/src/SALOMEDS/SALOMEDS_SComponentIterator_i.hxx @@ -11,13 +11,15 @@ // IDL headers #include #include CORBA_SERVER_HEADER(SALOMEDS) +#include //SALOMEDS headers #include "SALOMEDS_SComponent_i.hxx" #include "SALOMEDSImpl_SComponentIterator.hxx" -class SALOMEDS_SComponentIterator_i:public POA_SALOMEDS::SComponentIterator, - public PortableServer::RefCountServantBase +class SALOMEDS_SComponentIterator_i:public virtual POA_SALOMEDS::SComponentIterator, + public virtual PortableServer::RefCountServantBase, + public virtual SALOME::GenericObj_i { private: diff --git a/src/SALOMEDS/SALOMEDS_SComponent_i.cxx b/src/SALOMEDS/SALOMEDS_SComponent_i.cxx index 76b7153f3..718864a0d 100644 --- a/src/SALOMEDS/SALOMEDS_SComponent_i.cxx +++ b/src/SALOMEDS/SALOMEDS_SComponent_i.cxx @@ -10,6 +10,7 @@ using namespace std; SALOMEDS::SComponent_ptr SALOMEDS_SComponent_i::New(const Handle(SALOMEDSImpl_SComponent)& theImpl, CORBA::ORB_ptr theORB) { +/* static std::map _mapOfSCO; SALOMEDS::SComponent_var sco; SALOMEDS_SComponent_i* sco_servant = NULL; @@ -23,6 +24,9 @@ SALOMEDS::SComponent_ptr SALOMEDS_SComponent_i::New(const Handle(SALOMEDSImpl_SC } sco = SALOMEDS::SComponent::_narrow(sco_servant->SComponent::_this()); +*/ + SALOMEDS_SComponent_i* sco_servant = new SALOMEDS_SComponent_i(theImpl, theORB); + SALOMEDS::SComponent_var sco = SALOMEDS::SComponent::_narrow(sco_servant->SComponent::_this()); return sco._retn(); } diff --git a/src/SALOMEDS/SALOMEDS_SObject.cxx b/src/SALOMEDS/SALOMEDS_SObject.cxx index 1ba9a9948..4031fc027 100644 --- a/src/SALOMEDS/SALOMEDS_SObject.cxx +++ b/src/SALOMEDS/SALOMEDS_SObject.cxx @@ -60,6 +60,9 @@ SALOMEDS_SObject::SALOMEDS_SObject(const Handle(SALOMEDSImpl_SObject)& theSObjec SALOMEDS_SObject::~SALOMEDS_SObject() { + if (!_isLocal) { + _corba_impl->Destroy(); + } } std::string SALOMEDS_SObject::GetID() diff --git a/src/SALOMEDS/SALOMEDS_SObject_i.cxx b/src/SALOMEDS/SALOMEDS_SObject_i.cxx index 6954cd437..d3df946d8 100644 --- a/src/SALOMEDS/SALOMEDS_SObject_i.cxx +++ b/src/SALOMEDS/SALOMEDS_SObject_i.cxx @@ -8,6 +8,7 @@ using namespace std; #include "SALOMEDS_SObject_i.hxx" #include "SALOMEDS_SComponent_i.hxx" #include "SALOMEDS_GenericAttribute_i.hxx" +#include "SALOMEDS_StudyManager_i.hxx" #include "SALOMEDS.hxx" #include "SALOMEDSImpl_GenericAttribute.hxx" #include "SALOMEDSImpl_SComponent.hxx" @@ -31,21 +32,10 @@ using namespace std; SALOMEDS::SObject_ptr SALOMEDS_SObject_i::New(const Handle(SALOMEDSImpl_SObject)& theImpl, CORBA::ORB_ptr theORB) { - static std::map _mapOfSO; - SALOMEDS::SObject_var so; - SALOMEDS_SObject_i* so_servant = NULL; + SALOMEDS_SObject_i* so_servant = new SALOMEDS_SObject_i(theImpl, theORB); + SALOMEDS::SObject_var so = SALOMEDS::SObject::_narrow(so_servant->_this()); - if(_mapOfSO.find(theImpl.operator->()) != _mapOfSO.end()) { - so_servant = _mapOfSO[theImpl.operator->()]; - } - else { - so_servant = new SALOMEDS_SObject_i(theImpl, theORB); - _mapOfSO[theImpl.operator->()] = so_servant; - } - - so = SALOMEDS::SObject::_narrow(so_servant->_this()); - - return so._retn(); + return so; } @@ -55,9 +45,10 @@ SALOMEDS::SObject_ptr SALOMEDS_SObject_i::New(const Handle(SALOMEDSImpl_SObject) */ //============================================================================ SALOMEDS_SObject_i::SALOMEDS_SObject_i(const Handle(SALOMEDSImpl_SObject)& impl, CORBA::ORB_ptr orb) - :_impl(impl) + : _impl(impl) { _orb = CORBA::ORB::_duplicate(orb); + //SALOME::GenericObj_i::myPOA = SALOMEDS_StudyManager_i::GetPOA(GetStudy()); } diff --git a/src/SALOMEDS/SALOMEDS_SObject_i.hxx b/src/SALOMEDS/SALOMEDS_SObject_i.hxx index 2027c236f..81ddcc1f2 100644 --- a/src/SALOMEDS/SALOMEDS_SObject_i.hxx +++ b/src/SALOMEDS/SALOMEDS_SObject_i.hxx @@ -11,12 +11,15 @@ // IDL headers #include #include CORBA_SERVER_HEADER(SALOMEDS) +#include // Cascade headers #include "SALOMEDSImpl_SObject.hxx" -class SALOMEDS_SObject_i: public POA_SALOMEDS::SObject, - public PortableServer::RefCountServantBase { +class SALOMEDS_SObject_i: public virtual POA_SALOMEDS::SObject, + public virtual PortableServer::RefCountServantBase, + public virtual SALOME::GenericObj_i +{ protected: CORBA::ORB_ptr _orb; Handle(SALOMEDSImpl_SObject) _impl; diff --git a/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx b/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx index 0837f607e..8894e77a1 100644 --- a/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx +++ b/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx @@ -22,6 +22,7 @@ #include "Utils_CorbaException.hxx" #include +#include using namespace std; #ifdef WIN32 @@ -42,6 +43,7 @@ UNEXPECT_CATCH(LockProtection, SALOMEDS::StudyBuilder::LockProtection); static SALOMEDS_Driver_i* GetDriver(const Handle(SALOMEDSImpl_SObject)& theObject, CORBA::ORB_ptr orb); +static std::map _mapOfPOA; //============================================================================ /*! Function : SALOMEDS_StudyManager_i @@ -116,6 +118,9 @@ SALOMEDS::Study_ptr SALOMEDS_StudyManager_i::NewStudy(const char* study_name) const char* IORStudy = _orb->object_to_string(Study); aStudyImpl->SetTransientReference((char*)IORStudy); + + _mapOfPOA[Study->StudyId()] = _poa; + return Study; } @@ -422,6 +427,12 @@ SALOMEDS_Driver_i* GetDriver(const Handle(SALOMEDSImpl_SObject)& theObject, CORB return driver; } + +PortableServer::POA_ptr SALOMEDS_StudyManager_i::GetPOA(const SALOMEDS::Study_ptr theStudy) { + if (_mapOfPOA.find(theStudy->StudyId()) != _mapOfPOA.end()) return _mapOfPOA[theStudy->StudyId()]; + return PortableServer::POA::_nil(); +} + //=========================================================================== // PRIVATE FUNCTIONS //=========================================================================== diff --git a/src/SALOMEDS/SALOMEDS_StudyManager_i.hxx b/src/SALOMEDS/SALOMEDS_StudyManager_i.hxx index e057cb7ca..86db79708 100644 --- a/src/SALOMEDS/SALOMEDS_StudyManager_i.hxx +++ b/src/SALOMEDS/SALOMEDS_StudyManager_i.hxx @@ -125,6 +125,8 @@ public: void ping(){}; virtual long GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal); + + static PortableServer::POA_ptr GetPOA(const SALOMEDS::Study_ptr theStudy); }; #endif diff --git a/src/SALOMEDS/SALOMEDS_Study_i.cxx b/src/SALOMEDS/SALOMEDS_Study_i.cxx index c8ea13db5..56c87fc3e 100644 --- a/src/SALOMEDS/SALOMEDS_Study_i.cxx +++ b/src/SALOMEDS/SALOMEDS_Study_i.cxx @@ -47,9 +47,7 @@ SALOMEDS_Study_i::SALOMEDS_Study_i(const Handle(SALOMEDSImpl_Study) theImpl, _orb = CORBA::ORB::_duplicate(orb); _impl = theImpl; - _useCaseBuilder = new SALOMEDS_UseCaseBuilder_i(_impl->GetUseCaseBuilder(), _orb); _builder = new SALOMEDS_StudyBuilder_i(_impl->NewBuilder(), _orb); - _it = new SALOMEDS_SComponentIterator_i(_impl->NewComponentIterator(), _orb); } //============================================================================ @@ -398,6 +396,7 @@ SALOMEDS::ChildIterator_ptr SALOMEDS_Study_i::NewChildIterator(SALOMEDS::SObject SALOMEDS::SComponentIterator_ptr SALOMEDS_Study_i::NewComponentIterator() { SALOMEDS::Locker lock; + SALOMEDS_SComponentIterator_i* _it = new SALOMEDS_SComponentIterator_i(_impl->NewComponentIterator(), _orb); _it->Init(); return _it->_this(); } @@ -587,7 +586,8 @@ SALOMEDS::ListOfDates* SALOMEDS_Study_i::GetModificationsDate() SALOMEDS::UseCaseBuilder_ptr SALOMEDS_Study_i::GetUseCaseBuilder() { SALOMEDS::Locker lock; - return _useCaseBuilder->_this(); + SALOMEDS_UseCaseBuilder_i* UCBuilder = new SALOMEDS_UseCaseBuilder_i(_impl->GetUseCaseBuilder(), _orb); + return UCBuilder->_this(); } diff --git a/src/SALOMEDS/SALOMEDS_Study_i.hxx b/src/SALOMEDS/SALOMEDS_Study_i.hxx index 7800eae18..d559ca852 100644 --- a/src/SALOMEDS/SALOMEDS_Study_i.hxx +++ b/src/SALOMEDS/SALOMEDS_Study_i.hxx @@ -31,8 +31,6 @@ private: CORBA::ORB_ptr _orb; Handle(SALOMEDSImpl_Study) _impl; SALOMEDS_StudyBuilder_i* _builder; - SALOMEDS_UseCaseBuilder_i* _useCaseBuilder; - SALOMEDS_SComponentIterator_i* _it; public: diff --git a/src/SALOMEDS/SALOMEDS_UseCaseBuilder.cxx b/src/SALOMEDS/SALOMEDS_UseCaseBuilder.cxx index 1fd9c68a8..f0b10efd9 100644 --- a/src/SALOMEDS/SALOMEDS_UseCaseBuilder.cxx +++ b/src/SALOMEDS/SALOMEDS_UseCaseBuilder.cxx @@ -29,7 +29,7 @@ SALOMEDS_UseCaseBuilder::SALOMEDS_UseCaseBuilder(SALOMEDS::UseCaseBuilder_ptr th SALOMEDS_UseCaseBuilder::~SALOMEDS_UseCaseBuilder() { - //if(!_isLocal) CORBA::release(_corba_impl); + if(!_isLocal) _corba_impl->Destroy(); } bool SALOMEDS_UseCaseBuilder::Append(SALOMEDSClient_SObject* theObject) diff --git a/src/SALOMEDS/SALOMEDS_UseCaseBuilder_i.hxx b/src/SALOMEDS/SALOMEDS_UseCaseBuilder_i.hxx index cb99539bd..f9cea5bb8 100644 --- a/src/SALOMEDS/SALOMEDS_UseCaseBuilder_i.hxx +++ b/src/SALOMEDS/SALOMEDS_UseCaseBuilder_i.hxx @@ -12,6 +12,7 @@ #include #include CORBA_SERVER_HEADER(SALOMEDS) #include CORBA_SERVER_HEADER(SALOMEDS_Attributes) +#include // Cascade headers #include @@ -20,8 +21,9 @@ #include "SALOMEDSImpl_UseCaseIterator.hxx" #include "SALOMEDSImpl_UseCaseBuilder.hxx" -class SALOMEDS_UseCaseBuilder_i: public POA_SALOMEDS::UseCaseBuilder, - public PortableServer::RefCountServantBase +class SALOMEDS_UseCaseBuilder_i: public virtual POA_SALOMEDS::UseCaseBuilder, + public virtual PortableServer::RefCountServantBase, + public virtual SALOME::GenericObj_i { private: diff --git a/src/SALOMEDS/SALOMEDS_UseCaseIterator.cxx b/src/SALOMEDS/SALOMEDS_UseCaseIterator.cxx index 9761fce74..293f34fbc 100644 --- a/src/SALOMEDS/SALOMEDS_UseCaseIterator.cxx +++ b/src/SALOMEDS/SALOMEDS_UseCaseIterator.cxx @@ -23,7 +23,7 @@ SALOMEDS_UseCaseIterator::SALOMEDS_UseCaseIterator(SALOMEDS::UseCaseIterator_ptr SALOMEDS_UseCaseIterator::~SALOMEDS_UseCaseIterator() { - //if(!_isLocal) CORBA::release(_corba_impl); + if(!_isLocal) _corba_impl->Destroy(); } void SALOMEDS_UseCaseIterator::Init(bool theAllLevels) diff --git a/src/SALOMEDS/SALOMEDS_UseCaseIterator_i.hxx b/src/SALOMEDS/SALOMEDS_UseCaseIterator_i.hxx index aee6cb52e..132db2ac0 100644 --- a/src/SALOMEDS/SALOMEDS_UseCaseIterator_i.hxx +++ b/src/SALOMEDS/SALOMEDS_UseCaseIterator_i.hxx @@ -11,11 +11,13 @@ // IDL headers #include #include CORBA_SERVER_HEADER(SALOMEDS) +#include #include "SALOMEDSImpl_UseCaseIterator.hxx" -class SALOMEDS_UseCaseIterator_i: public POA_SALOMEDS::UseCaseIterator, - public PortableServer::RefCountServantBase +class SALOMEDS_UseCaseIterator_i: public virtual POA_SALOMEDS::UseCaseIterator, + public virtual PortableServer::RefCountServantBase, + public virtual SALOME::GenericObj_i { private: CORBA::ORB_ptr _orb;