20 #ifndef __COMPOSEDNODE_HXX__
21 #define __COMPOSEDNODE_HXX__
49 static const char SEP_CHAR_BTW_LEVEL[];
53 void performDuplicationOfPlacement(
const Node& other);
54 void performShallowDuplicationOfPlacement(
const Node& other);
58 void init(
bool start=
true);
59 virtual void shutdown(
int level);
60 virtual void resetState(
int level);
61 std::string getName()
const;
62 std::string getTaskName(
Task *task)
const;
65 std::vector<Task *> getNextTasks(
bool& isMore);
71 virtual bool edAddChild(
Node *DISOWNnode) ;
72 virtual void edRemoveChild(
Node *node) ;
74 bool edAddCFLink(
Node *nodeS,
Node *nodeE) ;
75 void edRemoveCFLink(
Node *nodeS,
Node *nodeE) ;
79 virtual bool isLoop()
const {
return false; }
81 virtual void removeRecursivelyRedundantCL();
82 std::list<ElementaryNode *> getRecursiveConstituents()
const;
83 std::list<Node *> getAllRecursiveNodes();
84 virtual std::list<Node *> getAllRecursiveConstituents();
85 std::list<ProgressWeight> getProgressWeight()
const;
86 std::string getInPortName(
const InPort *)
const ;
87 std::string getOutPortName(
const OutPort *)
const ;
89 int getNumberOfInputPorts()
const;
90 int getNumberOfOutputPorts()
const;
91 std::list<InputPort *> getSetOfInputPort()
const;
92 std::list<OutputPort *> getSetOfOutputPort()
const;
93 std::list<InputPort *> getLocalInputPorts()
const;
94 std::list<OutputPort *> getLocalOutputPorts()
const;
95 std::set<OutPort *> getAllOutPortsLeavingCurrentScope()
const;
96 std::set<InPort *> getAllInPortsComingFromOutsideOfCurrentScope()
const;
97 std::list<InputDataStreamPort *> getSetOfInputDataStreamPort()
const;
98 std::list<OutputDataStreamPort *> getSetOfOutputDataStreamPort()
const;
99 OutPort *getOutPort(
const std::string& name)
const ;
100 InputPort *getInputPort(
const std::string& name)
const ;
101 OutputPort *getOutputPort(
const std::string& name)
const ;
104 std::vector< std::pair<OutPort *, InPort *> > getSetOfInternalLinks()
const;
105 virtual std::vector< std::pair<OutPort *, InPort *> > getSetOfLinksLeavingCurrentScope()
const;
106 void checkConsistency(
LinkInfo& info)
const ;
107 virtual std::vector< std::pair<InPort *, OutPort *> > getSetOfLinksComingInCurrentScope()
const;
108 virtual std::string
typeName() {
return "YACS__ENGINE__ComposedNode";}
109 virtual void edUpdateState();
110 virtual void checkBasicConsistency()
const ;
111 virtual std::string getErrorReport();
114 bool isNodeAlreadyAggregated(
const Node *node)
const;
115 virtual bool isNameAlreadyUsed(
const std::string& name)
const;
116 Node *isInMyDescendance(
Node *nodeToTest)
const;
117 std::string getChildName(
const Node* node)
const ;
118 virtual std::string getMyQualifiedName(
const Node *directSon)
const;
119 Node *getChildByName(
const std::string& name)
const ;
121 static std::string getLowestCommonAncestorStr(
const std::string&
node1,
const std::string&
node2);
125 virtual void cleanNodes();
127 void setProperty(
const std::string& name,
const std::string& value)
override;
128 std::string getProperty(
const std::string& name)
override;
138 void edDisconnectAllLinksWithMe();
139 static bool splitNamesBySep(
const std::string& globalName,
const char separator[],
140 std::string& firstPart, std::string& lastPart,
bool priority) ;
146 virtual void checkLinkPossibility(
OutPort *start,
const std::list<ComposedNode *>& pointsOfViewStart,
147 InPort *end,
const std::list<ComposedNode *>& pointsOfViewEnd) ;
148 virtual void buildDelegateOf(
InPort * & port,
OutPort *initialStart,
const std::list<ComposedNode *>& pointsOfView);
149 virtual void buildDelegateOf(std::pair<OutPort *, OutPort *>& port,
InPort *finalTarget,
const std::list<ComposedNode *>& pointsOfView);
150 virtual void getDelegateOf(
InPort * & port,
OutPort *initialStart,
const std::list<ComposedNode *>& pointsOfView) ;
151 virtual void getDelegateOf(std::pair<OutPort *, OutPort *>& port,
InPort *finalTarget,
const std::list<ComposedNode *>& pointsOfView) ;
152 virtual void releaseDelegateOf(
InPort * & port,
OutPort *initialStart,
const std::list<ComposedNode *>& pointsOfView) ;
153 virtual void releaseDelegateOf(
OutPort *portDwn,
OutPort *portUp,
InPort *finalTarget,
const std::list<ComposedNode *>& pointsOfView) ;
155 void checkInMyDescendance(
Node *nodeToTest)
const ;
156 template <
class PORT>
157 std::string getPortName(
const PORT * port)
const ;
159 void checkNoCrossHierachyWith(
Node *node)
const ;
160 virtual void performCFComputations(
LinkInfo& info)
const;
161 virtual void destructCFComputations(
LinkInfo& info)
const;
162 Node *getLowestNodeDealingAll(
const std::list<OutPort *>& ports)
const;
163 void checkLinksCoherenceRegardingControl(
const std::vector<OutPort *>& starts,
167 std::vector<OutPort *>& fwCross,
170 void solveObviousOrDelegateCFLinks(
const std::list<OutPort *>& starts,
InputPort *end,
unsigned char& alreadyFed,
bool direction,
LinkInfo& info)
const;
171 virtual void checkCFLinks(
const std::list<OutPort *>& starts,
InputPort *end,
unsigned char& alreadyFed,
bool direction,
LinkInfo& info)
const;
174 static const unsigned char FED_ST = 2;
175 static const unsigned char FREE_ST = 0;
176 static const unsigned char FED_DS_ST = 1;
179 template <
class PORT>
182 Node *node = port->getNode();
183 std::string portName = port->
getName();
186 while (father !=
this)
#define YACSLIBENGINE_EXPORT
Composed node to group elementary and composed nodes.
Base class for all composed nodes.
virtual bool isRepeatedUnpredictablySeveralTimes() const
virtual std::list< Node * > edGetDirectDescendants() const =0
virtual Node * getChildByShortName(const std::string &name) const =0
std::string getPortName(const PORT *port) const
virtual bool isLoop() const
void checkInMyDescendance(Node *nodeToTest) const
Check if a node is in the descendance of this node.
virtual std::string typeName()
virtual void checkNoCyclePassingThrough(Node *node)=0
virtual YACS::Event updateStateOnFinishedEventFrom(Node *node)=0
virtual std::string getProgress() const
virtual void checkControlDependancy(OutPort *start, InPort *end, bool cross, std::map< ComposedNode *, std::list< OutPort * >, SortHierarc > &fw, std::vector< OutPort * > &fwCross, std::map< ComposedNode *, std::list< OutPort * >, SortHierarc > &bw, LinkInfo &info) const =0
virtual bool isPlacementPredictableB4Run() const =0
Base class for all calculation nodes.
Class that deal with list of semantics links for high level analysis.
Base class for loop node.
Base class for all nodes.
std::string getQualifiedName() const
same as Node::getName() in most cases, but differs for children of switch
static const char SEP_CHAR_IN_PORT[]
const std::string & getName() const
bool operator()(ComposedNode *n1, ComposedNode *n2) const