Salome HOME
Merge branch 'omu/update_doc_77'
[modules/yacs.git] / src / evalyfx_swig / evalyfx.i
index 6d9ee76e26069627baeffc7a922618e5b7de2c2e..89668a64e699ec03b41877d64b0fde50366730c7 100644 (file)
@@ -127,9 +127,9 @@ static void convertPyToDblArr(PyObject *pyLi, std::vector<double>& arr)
 %newobject YACSEvalYFX::BuildFromFile;
 %newobject YACSEvalYFX::BuildFromScheme;
 
-%typemap(out) std::list<YACSEvalInputPort *>
+%typemap(out) std::vector<YACSEvalInputPort *>
 {
-  std::list<YACSEvalInputPort *>::const_iterator it;
+  std::vector<YACSEvalInputPort *>::const_iterator it;
   $result = PyList_New($1.size());
   int i = 0;
   for (it = $1.begin(); it != $1.end(); ++it, ++i)
@@ -138,9 +138,9 @@ static void convertPyToDblArr(PyObject *pyLi, std::vector<double>& arr)
     }
 }
 
-%typemap(out) std::list<YACSEvalOutputPort *>
+%typemap(out) std::vector<YACSEvalOutputPort *>
 {
-  std::list<YACSEvalOutputPort *>::const_iterator it;
+  std::vector<YACSEvalOutputPort *>::const_iterator it;
   $result = PyList_New($1.size());
   int i = 0;
   for (it = $1.begin(); it != $1.end(); ++it, ++i)
@@ -190,6 +190,9 @@ public:
   std::string getName() const;
   bool hasDefaultValueDefined() const;
   YACSEvalAny *getDefaultValueDefined() const;
+  bool isRandomVar() const;
+  void declareRandomnessStatus(bool isRandom);
+  bool hasSequenceOfValuesToEval() const;
   %extend
      {
        void setDefaultValue(PyObject *parameter)
@@ -242,18 +245,6 @@ public:
          self->setSequenceOfValuesToEval(valsCpp);
          delete valsCpp;
        }
-
-       PyObject *hasSequenceOfValuesToEval() const
-       {
-         std::size_t ret1;
-         bool ret0(self->hasSequenceOfValuesToEval(ret1));
-         PyObject *ret(PyTuple_New(2));
-         PyObject *ret0Py=ret0?Py_True:Py_False;
-         Py_XINCREF(ret0Py);
-         PyTuple_SetItem(ret,0,ret0Py);
-         PyTuple_SetItem(ret,1,PyInt_FromLong(ret1));
-         return ret;
-       }
      }
 private:
   YACSEvalInputPort();
@@ -339,22 +330,35 @@ public:
   std::string getCorbaConfigFileName() const;
 };
 
+class YACSEvalExecParams
+{
+public:
+  bool getStopASAPAfterErrorStatus() const;
+  void setStopASAPAfterErrorStatus(bool newStatus);
+private:
+  YACSEvalExecParams();
+};
+
 class YACSEvalYFX
 {
 public:
   static YACSEvalYFX *BuildFromFile(const std::string& xmlOfScheme);
   static YACSEvalYFX *BuildFromScheme(YACS::ENGINE::Proc *schema);
-  std::list<YACSEvalInputPort *> getFreeInputPorts() const;
-  std::list<YACSEvalOutputPort *> getFreeOutputPorts() const;
+  YACSEvalExecParams *getParams() const;
+  std::vector<YACSEvalInputPort *> getFreeInputPorts() const;
+  std::vector<YACSEvalOutputPort *> getFreeOutputPorts() const;
   void unlockAll();
   bool isLocked() const;
   YACS::ENGINE::Proc *getUndergroundGeneratedGraph() const;
   YACSEvalListOfResources *giveResources();
+  void setParallelizeStatus(bool newVal);
+  bool getParallelizeStatus() const;
+  //void registerObserver(YACSEvalObserver *observer);
   %extend
      {
-       void lockPortsForEvaluation(PyObject *outputsOfInterest)
+       void lockPortsForEvaluation(PyObject *inputsOfInterest, PyObject *outputsOfInterest)
        {
-         std::list<YACSEvalOutputPort *> outputsOfInterestCpp;
+         std::vector<YACSEvalOutputPort *> outputsOfInterestCpp;
          if(PyList_Check(outputsOfInterest))
            {
              int size(PyList_Size(outputsOfInterest));
@@ -376,7 +380,30 @@ public:
              PyErr_SetString(PyExc_TypeError,"not a list");
              return ;
            }
-         self->lockPortsForEvaluation(outputsOfInterestCpp);
+         //
+         std::vector< YACSEvalInputPort * > inputsOfInterestCpp;
+         if(PyList_Check(inputsOfInterest))
+           {
+             int size(PyList_Size(inputsOfInterest));
+             for(int i=0;i<size;i++)
+               {
+                 PyObject *obj(PyList_GetItem(inputsOfInterest,i));
+                 void *argp(0);
+                 int status(SWIG_ConvertPtr(obj,&argp,SWIGTYPE_p_YACSEvalInputPort,0|0));
+                 if(!SWIG_IsOK(status))
+                   {
+                     std::ostringstream oss; oss << "Input elt #" << i << " in list is not a YACSEvalInputPort instance !";
+                     throw YACS::Exception(oss.str());
+                   }
+                 inputsOfInterestCpp.push_back(reinterpret_cast<YACSEvalInputPort *>(argp));
+               }
+           }
+         else
+           {
+             PyErr_SetString(PyExc_TypeError,"not a list");
+             return ;
+           }
+         self->lockPortsForEvaluation(inputsOfInterestCpp,outputsOfInterestCpp);
        }
 
        PyObject *getResults() const