DynLibLoader.hxx
DynLibLoaderWin.hxx
Exception.hxx
+ AutoRefCnt.hxx
Mutex.hxx
MutexPT.hxx
Semaphore.hxx
throw Exception(what);
}
-void Bloc::selectRunnableTasks(std::vector<Task *>& tasks)
-{
-}
-
bool Bloc::areAllSubNodesDone() const
{
for(list<Node *>::const_iterator iter=_setOfNode.begin();iter!=_setOfNode.end();iter++)
std::list<Node *> getChildren() const { return _setOfNode; }
std::list<Node *> edGetDirectDescendants() const { return _setOfNode; }
Node *getChildByShortName(const std::string& name) const throw(Exception);
- void selectRunnableTasks(std::vector<Task *>& tasks);
virtual void writeDot(std::ostream &os) const;
void accept(Visitor *visitor);
template<bool direction>
const char ComponentInstance::NULL_FILE_REPR[]="No repr specified for ComponentInstance";
-void ComponentInstance::setContainer(Container *cont)
+bool ComponentInstance::setContainer(Container *cont)
{
- if (cont == _container) return;
+ if (cont == _container) return false;
if(cont)
cont->checkCapabilityToDealWith(this);
_container=cont;
if(_container)
_container->incrRef();
+ return true;
}
ComponentInstance::ComponentInstance(const std::string& name):_compoName(name),_isAttachedOnCloning(false),_container(0),_anonymous(true)
virtual void setAnonymous(bool anon) { _anonymous = anon; };
virtual bool isAnonymous() { return _anonymous; };
int getNumId() const { return _numId; }
- virtual void setContainer(Container *cont);
+ virtual bool setContainer(Container *cont);
Container *getContainer() const { return _container; }
//! Load the component instance
virtual void load(Task *askingNode) = 0;
virtual void setProperty(const std::string& name,const std::string& value) = 0;
virtual std::string getProperty(const std::string& name) const = 0;
virtual void clearProperties() = 0;
+ virtual void addComponentName(const std::string& name) = 0;
virtual std::map<std::string,std::string> getProperties() const = 0;
virtual std::map<std::string,std::string> getResourceProperties(const std::string& name) const = 0;
virtual void setProperties(const std::map<std::string,std::string>& properties);
modified();
}
-void Loop::selectRunnableTasks(std::vector<Task *>& tasks)
-{
-}
-
std::list<Node *> Loop::edGetDirectDescendants() const
{
list<Node *> ret;
void getReadyTasks(std::vector<Task *>& tasks);
void edRemoveChild(Node *node) throw(Exception);
bool isRepeatedUnpredictablySeveralTimes() const { return true; }
- void selectRunnableTasks(std::vector<Task *>& tasks);
std::list<Node *> edGetDirectDescendants() const;
std::list<InputPort *> getSetOfInputPort() const;
int getNumberOfInputPorts() const;
//no sense for this class
}
+void StaticDefinedComposedNode::selectRunnableTasks(std::vector<Task *>& tasks)
+{
+}
+
void StaticDefinedComposedNode::checkControlDependancy(OutPort *start, InPort *end, bool cross,
std::map < ComposedNode *, std::list < OutPort * >, SortHierarc >& fw,
std::vector<OutPort *>& fwCross,
bool isPlacementPredictableB4Run() const;
bool isMultiplicitySpecified(unsigned& value) const;
void forceMultiplicity(unsigned value);
+ void selectRunnableTasks(std::vector<Task *>& tasks);
protected:
void checkControlDependancy(OutPort *start, InPort *end, bool cross,
std::map < ComposedNode *, std::list < OutPort * >, SortHierarc >& fw,
}
}
-void Switch::selectRunnableTasks(std::vector<Task *>& tasks)
-{
-}
-
list<Node *> Switch::edGetDirectDescendants() const
{
list<Node *> ret;
virtual bool edAddChild(Node *DISOWNnode) throw(Exception);
int getMaxCase();
void getReadyTasks(std::vector<Task *>& tasks);
- void selectRunnableTasks(std::vector<Task *>& tasks);
std::list<Node *> edGetDirectDescendants() const;
InputPort *edGetConditionPort() { return &_condition; }
void writeDot(std::ostream &os) const;
void lock() { }
void unLock() { }
void clearProperties() { }
+ void addComponentName(const std::string& name) { }
void shutdown(int level) { }
void setProperty(const std::string& name,const std::string& value) { }
std::string getProperty(const std::string& name) const { }
void lock() { }
void unLock() { }
void clearProperties() { }
+ void addComponentName(const std::string& name) { }
void shutdown(int level) { }
void setProperty(const std::string& name,const std::string& value) { }
std::string getProperty(const std::string& name) const { }
void setProperty(const std::string& name,const std::string& value) { }
std::string getProperty(const std::string& name) const { return std::string(); }
void clearProperties() { }
+ void addComponentName(const std::string& name) { }
std::map<std::string,std::string> getProperties() const { return std::map<std::string,std::string>(); }
std::map<std::string,std::string> getResourceProperties(const std::string& name) const { return std::map<std::string,std::string>(); }
//
return stream.str();
}
-void SalomeComponent::setContainer(Container *cont)
+bool SalomeComponent::setContainer(Container *cont)
{
- if (cont == _container) return;
-
- if(cont)
- cont->checkCapabilityToDealWith(this);
-
- if(_container)
- _container->decrRef();
- _container=cont;
- if(_container)
- {
- _container->incrRef();
- ((SalomeContainer*)_container)->addComponentName(_compoName);
- }
+ if(ComponentInstance::setContainer(cont))
+ {
+ if(_container)
+ _container->addComponentName(_compoName);
+ return true;
+ }
+ else
+ return false;
}
void SalomeComponent::shutdown(int level)
virtual void load(Task *askingNode);
virtual void unload(Task *askingNode);
virtual bool isLoaded(Task *askingNode) const;
- virtual void setContainer(Container *cont);
+ virtual bool setContainer(Container *cont);
virtual ServiceNode* createNode(const std::string& name);
virtual ComponentInstance* clone() const;
virtual std::string getFileRepr() const;
bool SalomeHPContainer::isAlreadyStarted(const Task *askingNode) const
{
- const SalomeContainerMonoHelper& helper(_launchModeType.getHelperOfTask(askingNode));
- return helper.isAlreadyStarted(askingNode);
+ const SalomeContainerMonoHelper *helper(_launchModeType.getHelperOfTask(askingNode));
+ return helper->isAlreadyStarted(askingNode);
}
void SalomeHPContainer::start(const Task *askingNode) throw(Exception)
{
- SalomeContainerMonoHelper& helper(_launchModeType.getHelperOfTask(askingNode));
- SalomeContainerTools::Start(_componentNames,&helper,_sct,_shutdownLevel,this,askingNode);
+ SalomeContainerMonoHelper *helper(_launchModeType.getHelperOfTask(askingNode));
+ SalomeContainerTools::Start(_componentNames,helper,_sct,_shutdownLevel,this,askingNode);
}
void SalomeHPContainer::shutdown(int level)
_shutdownLevel=999;
for(std::size_t i=0;_launchModeType.size();i++)
{
- SalomeContainerMonoHelper& helper(_launchModeType.at(i));
- helper.shutdown();
+ SalomeContainerMonoHelper *helper(_launchModeType.at(i));
+ helper->shutdown();
}
}
std::string SalomeHPContainer::getPlacementId(const Task *askingNode) const
{
- const SalomeContainerMonoHelper& helper(_launchModeType.getHelperOfTask(askingNode));
- return SalomeContainerTools::GetPlacementId(&helper,this,askingNode);
+ const SalomeContainerMonoHelper *helper(_launchModeType.getHelperOfTask(askingNode));
+ return SalomeContainerTools::GetPlacementId(helper,this,askingNode);
}
std::string SalomeHPContainer::getFullPlacementId(const Task *askingNode) const
{
- const SalomeContainerMonoHelper& helper(_launchModeType.getHelperOfTask(askingNode));
- return SalomeContainerTools::GetFullPlacementId(&helper,this,askingNode);
+ const SalomeContainerMonoHelper *helper(_launchModeType.getHelperOfTask(askingNode));
+ return SalomeContainerTools::GetFullPlacementId(helper,this,askingNode);
}
/*!
_sct.clearProperties();
}
+void SalomeHPContainer::addComponentName(const std::string& name)
+{
+ _componentNames.push_back(name);
+}
+
std::map<std::string,std::string> SalomeHPContainer::getProperties() const
{
return _sct.getProperties();
void setProperty(const std::string& name,const std::string& value);
std::string getProperty(const std::string& name) const;
void clearProperties();
+ void addComponentName(const std::string& name);
std::map<std::string,std::string> getProperties() const;
std::map<std::string,std::string> getResourceProperties(const std::string& name) const;
void checkCapabilityToDealWith(const ComponentInstance *inst) const throw(YACS::Exception);
+ //
+ YACS::BASES::Mutex& getLocker() { return _mutex; }
public:
static const char KIND[];
protected:
void SalomeHPContainerVectOfHelper::resize(std::size_t sz)
{
+ std::size_t oldSize(_launchModeType.size());
+ if(sz==oldSize)
+ return;
checkNoCurrentWork();
_whichOccupied.resize(sz); std::fill(_whichOccupied.begin(),_whichOccupied.end(),false);
_launchModeType.clear(); _launchModeType.resize(sz);
+ for(std::size_t i=oldSize;i<sz;i++)
+ _launchModeType[i]=new SalomeContainerMonoHelper;
_currentlyWorking.clear();
}
_currentlyWorking.erase(it);
}
-const SalomeContainerMonoHelper& SalomeHPContainerVectOfHelper::getHelperOfTask(const Task *node) const
+const SalomeContainerMonoHelper *SalomeHPContainerVectOfHelper::getHelperOfTask(const Task *node) const
{
return _launchModeType[locateTask(node)];
}
-SalomeContainerMonoHelper& SalomeHPContainerVectOfHelper::getHelperOfTask(const Task *node)
+SalomeContainerMonoHelper *SalomeHPContainerVectOfHelper::getHelperOfTask(const Task *node)
{
return _launchModeType[locateTask(node)];
}
for(std::map<const Task *,std::size_t >::const_iterator it=_currentlyWorking.begin();it!=_currentlyWorking.end();it++)
if((*it).first)
throw Exception("Something wrong a node is still declared to be using the ressource !");
- for(std::vector<SalomeContainerMonoHelper>::const_iterator it=_launchModeType.begin();it!=_launchModeType.end();it++)
- if((*it).isAlreadyStarted(0))
+ for(std::vector< YACS::BASES::AutoCppPtr<SalomeContainerMonoHelper> >::const_iterator it=_launchModeType.begin();it!=_launchModeType.end();it++)
+ if((*it)->isAlreadyStarted(0))
throw Exception("Some of the containers have be started ! Please shutdown them before !");
}
#include "YACSRuntimeSALOMEExport.hxx"
#include "SalomeContainerHelper.hxx"
+#include "AutoRefCnt.hxx"
+
#include <map>
#include <vector>
{
class Task;
class SalomeComponent;
-
+ class SalomeContainerMonoHelper;
class SalomeHPContainerVectOfHelper
{
public:
std::size_t getNumberOfFreePlace() const;
void allocateFor(const std::vector<const Task *>& nodes);
void release(const Task *node);
- const SalomeContainerMonoHelper& at(std::size_t pos) const { checkPosInVec(pos); return _launchModeType[pos]; }
- SalomeContainerMonoHelper& at(std::size_t pos) { checkPosInVec(pos); return _launchModeType[pos]; }
- const SalomeContainerMonoHelper& getHelperOfTask(const Task *node) const;
- SalomeContainerMonoHelper& getHelperOfTask(const Task *node);
+ const SalomeContainerMonoHelper *at(std::size_t pos) const { checkPosInVec(pos); return _launchModeType[pos]; }
+ SalomeContainerMonoHelper *at(std::size_t pos) { checkPosInVec(pos); return _launchModeType[pos]; }
+ const SalomeContainerMonoHelper *getHelperOfTask(const Task *node) const;
+ SalomeContainerMonoHelper *getHelperOfTask(const Task *node);
private:
std::size_t locateTask(const Task *node) const;
void checkNoCurrentWork() const;
void checkPosInVec(std::size_t pos) const;
private:
std::vector<bool> _whichOccupied;
- std::vector<SalomeContainerMonoHelper> _launchModeType;
+ std::vector< BASES::AutoCppPtr<YACS::ENGINE::SalomeContainerMonoHelper> > _launchModeType;
std::map<const Task *,std::size_t > _currentlyWorking;
};
}