Salome HOME
PR: merge from branch BR_UnitTests tag mergeto_trunk_17oct05
[modules/yacs.git] / src / MPIContainer / MPIContainer_i.hxx
index 390f6ce738cc8495a260b001136b4e84cb3e0cf2..a73af8b38abca7da9993b83df6d704993a11ec59 100644 (file)
 #define _SALOME_PCONTAINER_ 
 
 #include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(MPIContainer)
+#include CORBA_SERVER_HEADER(SALOME_MPIContainer)
 #include "SALOME_Container_i.hxx"
-#include "SALOME_NamingService.hxx"
-#include "Utils_SINGLETON.hxx"
-#include "OpUtil.hxx"
 #include "MPIObject_i.hxx"
 
-class MPIContainer_i : public POA_Engines::MPIContainer,
-                    public Engines_Container_i,
-                    public MPIObject_i
+class Engines_MPIContainer_i : public POA_Engines::MPIContainer,
+                              public Engines_Container_i,
+                              public MPIObject_i
 {
 
  public:
   // Constructor
-  MPIContainer_i( int nbproc, int numproc,
-                 CORBA::ORB_ptr orb,
-                 PortableServer::POA_ptr poa,
-                 char * containerName);
+  Engines_MPIContainer_i( int nbproc, int numproc,
+                         CORBA::ORB_ptr orb,
+                         PortableServer::POA_ptr poa,
+                         char * containerName,
+                         int argc, char *argv[]);
+  Engines_MPIContainer_i(int nbproc, int numproc);
   // Destructor
-  ~MPIContainer_i();
+  ~Engines_MPIContainer_i();
 
-  // Load a component
+  // shutdown corba server
+  void Shutdown();
+
+  // Load a component library
+  // synchronous version for process 0
+  bool load_component_Library(const char* componentName);
+  // asynchronous version for other process
+  void Asload_component_Library(const char* componentName);
+
+  // Create an instance of component
+  // synchronous version for process 0
+  Engines::Component_ptr
+  create_component_instance( const char* componentName,
+                            CORBA::Long studyId); // 0 for multiStudy
+  // asynchronous version for other process
+  void Ascreate_component_instance( const char* componentName,
+                                 CORBA::Long studyId); // 0 for multiStudy
+
+  // Load a component in current MPI container
+  // synchronous version for process 0
   Engines::Component_ptr load_impl(const char* nameToRegister,
                                   const char* componentName);
+  // asynchronous version for other process
+  void Asload_impl(const char* nameToRegister, const char* componentName);
 
-  // Unload a component
+  // Unload a component from current MPI container
+  // synchronous version for process 0
   void remove_impl(Engines::Component_ptr component_i);
+  // asynchronous version for other process
+  void Asremove_impl(Engines::Component_ptr component_i);
+
+  // synchronous version for process 0
   void finalize_removal();
+  // asynchronous version for other process
+  void Asfinalize_removal();
+
+ private:
+  // local version to not duplicate code 
+  // called by synchronous and asynchronous version
+  bool Lload_component_Library(const char* componentName);
+  Engines::Component_ptr
+  Lcreate_component_instance( const char* componentName,
+                             CORBA::Long studyId); // 0 for multiStudy
+  Engines::Component_ptr Lload_impl(const char* nameToRegister,
+                                   const char* componentName);
+  void Lremove_impl(Engines::Component_ptr component_i);
+  void Lfinalize_removal();
+
+  Engines::Component_ptr
+  createMPIInstance(std::string genericRegisterName,
+                   void *handle,
+                   int studyId);
 
 };
 #endif