PyThreadState *_save;
};
-
YACSEvalYFX *YACSEvalYFX::BuildFromFile(const std::string& xmlOfScheme)
{
YACS::ENGINE::RuntimeSALOME::setRuntime();
return new YACSEvalYFX(scheme,false);
}
-std::list< YACSEvalInputPort * > YACSEvalYFX::getFreeInputPorts() const
+std::vector< YACSEvalInputPort * > YACSEvalYFX::getFreeInputPorts() const
{
return _pattern->getFreeInputPorts();
}
-std::list< YACSEvalOutputPort * > YACSEvalYFX::getFreeOutputPorts() const
+std::vector< YACSEvalOutputPort * > YACSEvalYFX::getFreeOutputPorts() const
{
return _pattern->getFreeOutputPorts();
}
-void YACSEvalYFX::lockPortsForEvaluation(const std::list< YACSEvalOutputPort * >& outputsOfInterest)
+void YACSEvalYFX::lockPortsForEvaluation(const std::vector< YACSEvalInputPort * >& inputsOfInterest, const std::vector< YACSEvalOutputPort * >& outputsOfInterest)
{
- std::size_t sz(checkPortsForEvaluation(outputsOfInterest));
- _pattern->setOutPortsOfInterestForEvaluation(sz,outputsOfInterest);
+ checkPortsForEvaluation(inputsOfInterest,outputsOfInterest);
+ _pattern->setOutPortsOfInterestForEvaluation(outputsOfInterest);
_pattern->generateGraph();
}
void YACSEvalYFX::unlockAll()
{
- std::list< YACSEvalInputPort * > allInputs(getFreeInputPorts());
- for(std::list< YACSEvalInputPort * >::const_iterator it=allInputs.begin();it!=allInputs.end();it++)
+ std::vector< YACSEvalInputPort * > allInputs(getFreeInputPorts());
+ for(std::vector< YACSEvalInputPort * >::const_iterator it=allInputs.begin();it!=allInputs.end();it++)
(*it)->unlock();
_pattern->resetOutputsOfInterest();
_pattern->resetGeneratedGraph();
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 !");
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;
}
+void YACSEvalYFX::registerObserver(YACSEvalObserver *observer)
+{
+ if(!_pattern)
+ throw YACS::Exception("YACSEvalYFX::registerObserver : no pattern !");
+ _pattern->registerObserver(observer);
+}
+
+YACSEvalObserver *YACSEvalYFX::getObserver()
+{
+ if(!_pattern)
+ throw YACS::Exception("YACSEvalYFX::getObserver : no pattern !");
+ return _pattern->getObserver();
+}
+
std::vector<YACSEvalSeqAny *> YACSEvalYFX::getResults() const
{
return _pattern->getResults();
YACSEvalYFX::YACSEvalYFX(YACS::ENGINE::Proc *scheme, bool ownScheme):_pattern(0)
{
- _pattern=YACSEvalYFXPattern::FindPatternFrom(scheme,ownScheme);
+ _pattern=YACSEvalYFXPattern::FindPatternFrom(this,scheme,ownScheme);
}
-std::size_t YACSEvalYFX::checkPortsForEvaluation(const std::list< YACSEvalOutputPort * >& outputs) const
+void YACSEvalYFX::checkPortsForEvaluation(const std::vector< YACSEvalInputPort * >& inputs, const std::vector< YACSEvalOutputPort * >& outputs) const
{
- std::list< YACSEvalInputPort * > allInputs(getFreeInputPorts());
- std::list< YACSEvalOutputPort * > allOutputs(getFreeOutputPorts());
- std::size_t sz(std::numeric_limits<std::size_t>::max());
- for(std::list< YACSEvalInputPort * >::const_iterator it=allInputs.begin();it!=allInputs.end();it++)
+ std::set<YACSEvalInputPort * > inputs2(inputs.begin(),inputs.end());
+ std::vector< YACSEvalInputPort * > allInputs(getFreeInputPorts());
+ std::vector< YACSEvalOutputPort * > allOutputs(getFreeOutputPorts());
+ for(std::vector< YACSEvalInputPort * >::const_iterator it=allInputs.begin();it!=allInputs.end();it++)
{
- std::size_t mySz;
- if(!(*it)->isOKForLock() && !(*it)->hasSequenceOfValuesToEval(mySz))
- {
- std::ostringstream oss; oss << "YACSEvalYFX::checkPortsForEvaluation : input port with name \"" << (*it)->getName() << "\" is not set properly !";
- throw YACS::Exception(oss.str());
- }
- if((*it)->hasSequenceOfValuesToEval(mySz))
+ if(inputs2.find(*it)==inputs2.end())
{
- if(sz==std::numeric_limits<std::size_t>::max())
- sz=mySz;
- else
+ if(!(*it)->isOKForLock())
{
- if(sz!=mySz)
- {
- std::ostringstream oss; oss << "YACSEvalYFX::checkPortsForEvaluation : input port with name \"" << (*it)->getName() << "\" is declared as to be evaluated on array ! But size of array is not the same than the others !";
- throw YACS::Exception(oss.str());
- }
+ std::ostringstream oss; oss << "YACSEvalYFX::checkPortsForEvaluation : input port with name \"" << (*it)->getName() << "\" is not set properly !";
+ throw YACS::Exception(oss.str());
}
}
}
- for(std::list< YACSEvalOutputPort * >::const_iterator it=outputs.begin();it!=outputs.end();it++)
+ for(std::vector< YACSEvalOutputPort * >::const_iterator it=outputs.begin();it!=outputs.end();it++)
if(std::find(allOutputs.begin(),allOutputs.end(),*it)==allOutputs.end())
throw YACS::Exception("YACSEvalYFX::lockPortsForEvaluation : one of output is not part of this !");
std::set< YACSEvalOutputPort * > soutputs(outputs.begin(),outputs.end());
if(soutputs.size()!=outputs.size())
throw YACS::Exception("YACSEvalYFX::lockPortsForEvaluation : each elt in outputs must appear once !");
- for(std::list< YACSEvalInputPort * >::const_iterator it=allInputs.begin();it!=allInputs.end();it++)
- (*it)->lock();
- return sz;
+ for(std::vector< YACSEvalInputPort * >::const_iterator it=allInputs.begin();it!=allInputs.end();it++)
+ {
+ (*it)->declareRandomnessStatus(inputs2.find(*it)!=inputs2.end());
+ (*it)->lock();
+ }
}
YACSEvalYFX::~YACSEvalYFX()