Salome HOME
Remaining instabilities on tests[3,4,5] and current Node to be located is not marked...
[modules/yacs.git] / src / engine / Bloc_impl.cxx
index 8110ba54df9836c0b3e04332b71baab842450b75..8402ec8bfd7b2f9079879fb0002812a85b956bb7 100644 (file)
@@ -22,6 +22,8 @@
 #include "Visitor.hxx"
 #include "ForEachLoop.hxx"
 #include "InlineNode.hxx"
+#include "ServiceNode.hxx"
+#include "ServerNode.hxx"
 #include "HomogeneousPoolContainer.hxx"
 
 using namespace YACS::ENGINE;
@@ -109,44 +111,47 @@ void Bloc::fitToPlayGround(const PlayGround *pg)
   //FIXME
 }
 
+constexpr char MSG[]="Bloc::propagePlayGround : Not implemented yet for this type of node !";
+class MyVisitorPropagate : public Visitor
+  {
+  public:
+    MyVisitorPropagate(ComposedNode *root):Visitor(root) { }
+    void visitBloc(Bloc *node) { node->ComposedNode::accept(this); }
+    void visitElementaryNode(ElementaryNode *node) { }
+    void visitForEachLoop(ForEachLoop *node) { node->ComposedNode::accept(this); }
+    void visitForEachLoopDyn(ForEachLoopDyn *node) { node->ComposedNode::accept(this); }
+    void visitOptimizerLoop(OptimizerLoop *node) { throw YACS::Exception(MSG); }
+    void visitDynParaLoop(DynParaLoop *node) { throw YACS::Exception(MSG); }
+    void visitForLoop(ForLoop *node) { throw YACS::Exception(MSG); }
+    template<class NodeClass>
+    void visitNodeWithContainer(NodeClass *node)
+    {
+        Container *cont(node->getContainer());
+        HomogeneousPoolContainer *cont2(dynamic_cast<HomogeneousPoolContainer *>(cont));
+        if(!cont2)
+          return ;
+        _cont2.insert(cont2);
+    }
+    void visitInlineNode(InlineNode *node) { this->visitNodeWithContainer<InlineNode>(node); }
+    void visitInlineFuncNode(InlineFuncNode *node) { visitInlineNode(node); }
+    void visitLoop(Loop *node) { throw YACS::Exception(MSG); }
+    void visitProc(Proc *node) { node->ComposedNode::accept(this); }
+    void visitServiceNode(ServiceNode *node) { this->visitNodeWithContainer<ServiceNode>(node); }
+    void visitServerNode(ServerNode *node) { visitInlineNode(node); }
+    void visitServiceInlineNode(ServiceInlineNode *node) { throw YACS::Exception(MSG); }
+    void visitSwitch(Switch *node) { throw YACS::Exception(MSG); }
+    void visitWhileLoop(WhileLoop *node) { throw YACS::Exception(MSG); }
+    void visitPresetNode(DataNode *node) { throw YACS::Exception(MSG); }
+    void visitOutNode(DataNode *node) { throw YACS::Exception(MSG); }
+    void visitStudyInNode(DataNode *node) { throw YACS::Exception(MSG); }
+    void visitStudyOutNode(DataNode *node) { throw YACS::Exception(MSG); }
+  public:
+    std::set< HomogeneousPoolContainer * > _cont2;
+};
+
 void Bloc::propagePlayGround(const PlayGround *pg)
 {
-  static const char MSG[]="Bloc::propagePlayGround : Not implemented yet for this type of node !";
-  class MyVisitor : public Visitor
-    {
-    public:
-      MyVisitor(ComposedNode *root):Visitor(root) { }
-      void visitBloc(Bloc *node) { node->ComposedNode::accept(this); }
-      void visitElementaryNode(ElementaryNode *node) { }
-      void visitForEachLoop(ForEachLoop *node) { throw YACS::Exception(MSG); }
-      void visitForEachLoopDyn(ForEachLoopDyn *node) { node->ComposedNode::accept(this); }
-      void visitOptimizerLoop(OptimizerLoop *node) { throw YACS::Exception(MSG); }
-      void visitDynParaLoop(DynParaLoop *node) { throw YACS::Exception(MSG); }
-      void visitForLoop(ForLoop *node) { throw YACS::Exception(MSG); }
-      void visitInlineNode(InlineNode *node)
-      {
-          Container *cont(node->getContainer());
-          HomogeneousPoolContainer *cont2(dynamic_cast<HomogeneousPoolContainer *>(cont));
-          if(!cont2)
-            return ;
-          _cont2.insert(cont2);
-      }
-      void visitInlineFuncNode(InlineFuncNode *node) { throw YACS::Exception(MSG); }
-      void visitLoop(Loop *node) { throw YACS::Exception(MSG); }
-      void visitProc(Proc *node) { node->ComposedNode::accept(this); }
-      void visitServiceNode(ServiceNode *node) { throw YACS::Exception(MSG); }
-      void visitServerNode(ServerNode *node) { throw YACS::Exception(MSG); }
-      void visitServiceInlineNode(ServiceInlineNode *node) { throw YACS::Exception(MSG); }
-      void visitSwitch(Switch *node) { throw YACS::Exception(MSG); }
-      void visitWhileLoop(WhileLoop *node) { throw YACS::Exception(MSG); }
-      void visitPresetNode(DataNode *node) { throw YACS::Exception(MSG); }
-      void visitOutNode(DataNode *node) { throw YACS::Exception(MSG); }
-      void visitStudyInNode(DataNode *node) { throw YACS::Exception(MSG); }
-      void visitStudyOutNode(DataNode *node) { throw YACS::Exception(MSG); }
-    public:
-      std::set< HomogeneousPoolContainer * > _cont2;
-  };
-  MyVisitor vis(this);
+  MyVisitorPropagate vis(this);
   this->accept(&vis);
   for(auto cont : vis._cont2)
     cont->assignPG(pg);