Salome HOME
[EDF12520] : Optimization of placements of Kernel containers in ForEachLoop/HP Contai...
[modules/yacs.git] / src / runtime / SalomeContainerTools.hxx
index 5955eee3f40f39e12c103dcb130492c42fad7a7f..793cf3488d563462b7ad3ad1d7b9430c4c9e5084 100644 (file)
@@ -37,34 +37,102 @@ namespace YACS
     class ComponentInstance;
     class SalomeContainerHelper;
 
-    class YACSRUNTIMESALOME_EXPORT SalomeContainerTools
+    class YACSRUNTIMESALOME_EXPORT SalomeContainerToolsBase
+    {
+    public:
+      virtual ~SalomeContainerToolsBase() { }
+      virtual std::string getProperty(const std::string& name) const = 0;
+      virtual void setProperty(const std::string& name, const std::string& value) = 0;
+      virtual const std::map<std::string,std::string>& getProperties() const = 0;
+      virtual void clearProperties() = 0;
+      virtual std::map<std::string,std::string> getResourceProperties(const std::string& name) const = 0;
+      virtual void addToComponentList(const std::string& name) = 0;
+      virtual void addToResourceList(const std::string& name) = 0;
+      virtual Engines::ContainerParameters getParameters() const = 0;
+      virtual std::string getContainerName() const = 0;
+      virtual void setContainerName(const std::string& name) = 0;
+      virtual std::string getHostName() const = 0;
+      virtual std::string getNotNullContainerName(const Container *contPtr, const Task *askingNode, bool& isEmpty) const = 0;
+    public:
+      static void Start(const std::vector<std::string>& compoNames, SalomeContainerHelper *schelp, SalomeContainerToolsBase& sct, int& shutdownLevel, const Container *cont, const Task *askingNode);
+      static CORBA::Object_ptr LoadComponent(SalomeContainerHelper *launchModeType, Container *cont, Task *askingNode);
+      static CORBA::Object_ptr CreateComponentInstance(Container *cont, Engines::Container_ptr contPtr, const ComponentInstance *inst);
+      static std::string GetPlacementId(const SalomeContainerHelper *launchModeType, const Container *cont, const Task *askingNode);
+      static std::string GetFullPlacementId(const SalomeContainerHelper *launchModeType, const Container *cont, const Task *askingNode);
+      static void SetContainerNameOf(Engines::ContainerParameters& params, const std::string& name);
+    };
+    
+    class YACSRUNTIMESALOME_EXPORT SalomeContainerToolsInter : public SalomeContainerToolsBase
+    {
+    public:
+      SalomeContainerToolsInter() { }
+      SalomeContainerToolsInter(const SalomeContainerToolsInter& other);
+      std::string getProperty(const std::string& name) const;
+      const std::map<std::string,std::string>& getProperties() const { return _propertyMap; }
+      void clearProperties();
+      std::map<std::string,std::string> getResourceProperties(const std::string& name) const;
+    protected:
+      std::map<std::string,std::string> _propertyMap;
+    };
+
+    class YACSRUNTIMESALOME_EXPORT SalomeContainerTools : public SalomeContainerToolsInter
     {
     public:
       SalomeContainerTools();
       SalomeContainerTools(const SalomeContainerTools& other);
+      int getNumberOfCoresPerWorker() const;
+    public:
+      Engines::ContainerParameters getParameters() const { return _params; }
+      void clearProperties();
+      void setProperty(const std::string& name, const std::string& value);
+      void addToComponentList(const std::string& name);
+      void addToResourceList(const std::string& name);
+      std::string getContainerName() const;
+      void setContainerName(const std::string& name);
+      std::string getHostName() const;
+      std::string getNotNullContainerName(const Container *contPtr, const Task *askingNode, bool& isEmpty) const;
+    protected:
+      Engines::ContainerParameters _params;
+    };
+
+    class PlayGround;
+    
+    class YACSRUNTIMESALOME_EXPORT SalomeContainerToolsDecoratorBase : public SalomeContainerToolsBase
+    {
+    protected:
+      SalomeContainerToolsDecoratorBase(SalomeContainerToolsBase *sct):_sct(sct) { }
+      SalomeContainerToolsBase *getWorker() { return _sct; }
+      const SalomeContainerToolsBase *getWorker() const { return _sct; }
+    public:
       std::string getProperty(const std::string& name) const;
       void setProperty(const std::string& name, const std::string& value);
-      const std::map<std::string,std::string>& getProperties() const { return _propertyMap; }
+      const std::map<std::string,std::string>& getProperties() const;
       void clearProperties();
       std::map<std::string,std::string> getResourceProperties(const std::string& name) const;
       void addToComponentList(const std::string& name);
       void addToResourceList(const std::string& name);
-    public:
+      Engines::ContainerParameters getParameters() const;
       std::string getContainerName() const;
       void setContainerName(const std::string& name);
-      std::string getNotNullContainerName(const Container *contPtr, const Task *askingNode, bool& isEmpty) const;
       std::string getHostName() const;
-      Engines::ContainerParameters getParameters() const { return _params; }
-      static void SetContainerNameOf(Engines::ContainerParameters& params, const std::string& name);
+      std::string getNotNullContainerName(const Container *contPtr, const Task *askingNode, bool& isEmpty) const;
+    private:
+      SalomeContainerToolsBase *_sct;
+    };
+
+    class SalomeHPContainerVectOfHelper;
+    
+    class YACSRUNTIMESALOME_EXPORT SalomeContainerToolsSpreadOverTheResDecorator : public SalomeContainerToolsDecoratorBase
+    {
     public:
-      static void Start(const std::vector<std::string>& compoNames, SalomeContainerHelper *schelp, SalomeContainerTools& sct, int& shutdownLevel, const Container *cont, const Task *askingNode);
-      static CORBA::Object_ptr LoadComponent(SalomeContainerHelper *launchModeType, Container *cont, Task *askingNode);
-      static CORBA::Object_ptr CreateComponentInstance(Container *cont, Engines::Container_ptr contPtr, const ComponentInstance *inst);
-      static std::string GetPlacementId(const SalomeContainerHelper *launchModeType, const Container *cont, const Task *askingNode);
-      static std::string GetFullPlacementId(const SalomeContainerHelper *launchModeType, const Container *cont, const Task *askingNode);
-    protected:
-      std::map<std::string,std::string> _propertyMap;
-      Engines::ContainerParameters _params;
+      SalomeContainerToolsSpreadOverTheResDecorator(SalomeContainerToolsBase *sct, const PlayGround *pg, const SalomeHPContainerVectOfHelper *vh, const Task *node):SalomeContainerToolsDecoratorBase(sct),_pg(pg),_vh(vh),_node(node) { }
+      Engines::ContainerParameters getParameters() const;
+    private:
+      static std::string DeduceMachineFrom(const std::vector< std::pair<std::string,int> >& allResInfo, int iPos, int sz, int nbProcPerNode);
+    private:
+      const PlayGround *_pg;
+      const SalomeHPContainerVectOfHelper *_vh;
+      const Task *_node;
     };
   }
 }