Salome HOME
Merge branch 'V7_dev'
[modules/yacs.git] / src / evalyfx / YACSEvalYFX.cxx
index 537c7303ce7ebd267765890aac8b1d288b5165d7..201bdb65c9491a328b75dc1721eb63393994f124 100644 (file)
 
 #include <Python.h>
 
-class MyAutoThreadSaver
-{
-public:
-  MyAutoThreadSaver():_save(PyEval_SaveThread()) { }
-  ~MyAutoThreadSaver() { PyEval_RestoreThread(_save); }
-private:
-  PyThreadState *_save;
-};
-
 YACSEvalYFX *YACSEvalYFX::BuildFromFile(const std::string& xmlOfScheme)
 {
   YACS::ENGINE::RuntimeSALOME::setRuntime();
@@ -73,7 +64,6 @@ void YACSEvalYFX::lockPortsForEvaluation(const std::vector< YACSEvalInputPort *
 {
   checkPortsForEvaluation(inputsOfInterest,outputsOfInterest);
   _pattern->setOutPortsOfInterestForEvaluation(outputsOfInterest);
-  _pattern->generateGraph();
 }
 
 void YACSEvalYFX::unlockAll()
@@ -97,30 +87,18 @@ YACSEvalListOfResources *YACSEvalYFX::giveResources()
 
 bool YACSEvalYFX::run(YACSEvalSession *session, int& nbOfBranches)
 {
-  _pattern->assignRandomVarsInputs();
-  YACSEvalListOfResources *rss(giveResources());
-  if(!rss->isInteractive())
-    throw YACS::Exception("YACSEvalYFX::run : not implemented yet for non interactive !");
-  YACSEvalSession *mySession(session);
-  YACS::AutoCppPtr<YACSEvalSession> loc;
+  _pattern->generateGraph();
   if(!session)
     {
       throw YACS::Exception("YACSEvalYFX::run : input session in null !");
-      /*loc=new YACSEvalSession;
-      mySession=loc;*/
     }
+  session->launch();
+  YACSEvalListOfResources *rss(giveResources());
+  rss->checkOKForRun();
+  _pattern->assignRandomVarsInputs();
   rss->apply();
   nbOfBranches=_pattern->assignNbOfBranches();
-  mySession->launch();
-  YACS::ENGINE::Executor exe;
-  exe.setKeepGoingProperty(!_params.getStopASAPAfterErrorStatus());
-  //
-  _pattern->emitStart();
-  {
-    MyAutoThreadSaver locker;
-    exe.RunW(getUndergroundGeneratedGraph());
-  }
-  return getUndergroundGeneratedGraph()->getState()==YACS::DONE;
+  return _pattern->go(_params.getStopASAPAfterErrorStatus(),session);
 }
 
 void YACSEvalYFX::registerObserver(YACSEvalObserver *observer)