Salome HOME
Save foreach state - work in progress.
[modules/yacs.git] / src / engine_swig / pilot.i
index 6262f477304eb9a88bfe601602d70b5252dc25f6..6b93d661450955965b697322b4437cb6a6e8333e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2014  CEA/DEN, EDF R&D
+// Copyright (C) 2006-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -112,6 +112,7 @@ REFCOUNT_TEMPLATE(TCmap,YACS::ENGINE::TypeCode)
 //%template(CONTAINmap)    std::map<std::string, YACS::ENGINE::Container *>;
 REFCOUNT_TEMPLATE(CONTAINmap,YACS::ENGINE::Container)
 %template(strvec)        std::vector<std::string>;
+%template(uivec)         std::vector<unsigned int>;
 %template(linksvec)      std::vector< std::pair<YACS::ENGINE::OutPort *,YACS::ENGINE::InPort *> >;
 %template(linkvec)       std::vector< std::pair<YACS::ENGINE::InPort *,YACS::ENGINE::OutPort *> >;
 %template(instreamlist)  std::list<YACS::ENGINE::InputDataStreamPort *>;
@@ -189,6 +190,8 @@ REFCOUNT_TEMPLATE(CompoInstmap,YACS::ENGINE::ComponentInstance)
 %newobject *::createStructTc;
 %newobject *::createType;
 
+%newobject YACS::ENGINE::SequenceAny::removeUnsetItemsFromThis;
+
 %newobject YACS::ENGINE::TypeCode::interfaceTc;
 %newobject YACS::ENGINE::TypeCode::sequenceTc;
 %newobject YACS::ENGINE::TypeCode::structTc;
@@ -371,6 +374,14 @@ EXCEPTION(YACS::ENGINE::ExecutorSwig::waitPause)
   }
 }
 
+%extend YACS::ENGINE::Any
+{
+  PyObject *getPyObj()
+  {
+    return (PyObject *)getRuntime()->convertNeutral(const_cast<YACS::ENGINE::TypeCode *>(self->getType()),self);
+  }
+}
+
 %newobject YACS::ENGINE::SequenceAny::__getitem__;
 %extend YACS::ENGINE::SequenceAny
 {
@@ -397,3 +408,37 @@ EXCEPTION(YACS::ENGINE::ExecutorSwig::waitPause)
     return a;
   }
 }
+
+%extend YACS::ENGINE::ForEachLoop
+{
+  PyObject *getPassedResults(Executor *execut) const
+  {
+    std::vector<SequenceAny *> ret1;
+    std::vector<std::string> ret2;
+    std::vector<unsigned int> ret0(self->getPassedResults(execut,ret1,ret2));
+    PyObject *ret(PyTuple_New(3));
+    // param 0
+    PyObject *ret0Py(PyList_New(ret0.size()));
+    for(std::size_t i=0;i<ret0.size();i++)
+      PyList_SetItem(ret0Py,i,PyInt_FromLong(ret0[i]));
+    PyTuple_SetItem(ret,0,ret0Py);
+    // param 1
+    PyObject *ret1Py(PyList_New(ret1.size()));
+    for(std::size_t i=0;i<ret1.size();i++)
+      PyList_SetItem(ret1Py,i,SWIG_NewPointerObj(SWIG_as_voidptr(ret1[i]),SWIGTYPE_p_YACS__ENGINE__SequenceAny, SWIG_POINTER_OWN | 0 ));
+    PyTuple_SetItem(ret,1,ret1Py);
+    // param 2
+    PyObject *ret2Py(PyList_New(ret2.size()));
+    for(std::size_t i=0;i<ret2.size();i++)
+      PyList_SetItem(ret2Py,i,PyString_FromString(ret2[i].c_str()));
+    PyTuple_SetItem(ret,2,ret2Py);
+    return ret;
+  }
+
+  void assignPassedResults(const std::vector<unsigned int>& passedIds, PyObject *passedOutputs, const std::vector<std::string>& nameOfOutputs)
+  {
+    std::vector<SequenceAny *> passedOutputsCpp;
+    convertFromPyObjVectorOfObj<YACS::ENGINE::SequenceAny *>(passedOutputs,SWIGTYPE_p_YACS__ENGINE__SequenceAny,"SequenceAny",passedOutputsCpp);
+    self->assignPassedResults(passedIds,passedOutputsCpp,nameOfOutputs);
+  }
+}