41 using namespace YACS::ENGINE;
73 for(vector<Container *>::iterator iterCt=conts.begin();iterCt!=conts.end();iterCt++)
78 contCloned=(*iterCt)->
clone();
81 for(vector<ComponentInstance *>::iterator iterCp=comps.begin();iterCp!=comps.end();iterCp++)
86 for(vector<Task *>::iterator iterT=tasks.begin();iterT!=tasks.end();iterT++)
89 list< ElementaryNode * >::iterator res=find(clones.begin(),clones.end(),(
ElementaryNode *)(*iterT));
92 nodeC->setComponent(curCloned);
99 for(vector<Task *>::iterator iterT=tasks.begin();iterT!=tasks.end();iterT++)
101 std::list< ElementaryNode * >::iterator res=find(clones.begin(),clones.end(),(
ElementaryNode *)(*iterT));
103 nodeC->setContainer(contCloned);
119 for(vector<Container *>::iterator iterCt=conts.begin();iterCt!=conts.end();iterCt++)
125 for(vector<ComponentInstance *>::iterator iterCp=comps.begin();iterCp!=comps.end();iterCp++)
130 for(vector<Task *>::iterator iterT=tasks.begin();iterT!=tasks.end();iterT++)
133 list< ElementaryNode * >::iterator res=find(clones.begin(),clones.end(),(
ElementaryNode *)(*iterT));
136 nodeC->setComponent(curCloned);
142 for(vector<Task *>::iterator iterT=tasks.begin();iterT!=tasks.end();iterT++)
144 std::list< ElementaryNode * >::iterator res=find(clones.begin(),clones.end(),(
ElementaryNode *)(*iterT));
146 nodeC->setContainer(contCloned);
172 return getChildName(dynamic_cast<ElementaryNode *>(task));
180 for(list< ElementaryNode * >::iterator iter=tasks.begin();iter!=tasks.end();iter++)
181 ret.
appendTask(*iter,(*iter)->getDynClonerIfExists(
this));
192 list< ElementaryNode * > tasks=getRecursiveConstituents();
193 for(list< ElementaryNode * >::iterator iter=tasks.begin();iter!=tasks.end();iter++)
195 switch(ret.
appendTask(*iter,(*iter)->getDynClonerIfExists(
this)))
199 string what(
"ComposedNode::checkDeploymentTree : ServiceNode with name \""); what+=(*iter)->getName();
200 what+=
"\" coexists in a component with an another Task which context is incompatible with it.";
207 string what(
"ComposedNode::checkDeploymentTree : ServiceNode with name \""); what+=(*iter)->getName();
208 what+=
"\" is deployable but no component is specified on it.";
248 DEBTRACE(
"ComposedNode::notifyFrom " << event);
251 Node *lminus1LevelNode=taskTyped;
255 curEvent=curLevelNode->
updateStateFrom(lminus1LevelNode,curEvent,execInst);
258 lminus1LevelNode=curLevelNode;
259 curLevelNode=curLevelNode->
_father;
260 curEvent=curLevelNode->
updateStateFrom(lminus1LevelNode,curEvent,execInst);
275 DEBTRACE(
"ComposedNode::edAddLink");
276 set<OutPort *> represented;
278 start->getAllRepresented(represented);
279 if(represented.size()!=1)
282 for(set<OutPort *>::iterator iter=represented.begin();iter!=represented.end();iter++)
283 ret|=edAddLink(*iter,end);
286 if(start->isAlreadyLinkedWith(end))
288 ComposedNode* lwstCmnAnctr=getLowestCommonAncestor(start->getNode(),end->getNode());
289 list<ComposedNode *> allAscendanceOfNodeStart=start->getNode()->
getAllAscendanceOf(lwstCmnAnctr);
290 list<ComposedNode *> allAscendanceOfNodeEnd=end->getNode()->getAllAscendanceOf(lwstCmnAnctr);
291 checkInMyDescendance(lwstCmnAnctr);
294 if(dynamic_cast<ComposedNode *>(start->getNode()))
297 iterS=start->getNode()->
_father;
298 pair<OutPort *, OutPort *> pO(start,start);
299 while(iterS!=lwstCmnAnctr)
304 if(dynamic_cast<ComposedNode *>(end->getNode()))
310 while(iterS!=lwstCmnAnctr)
315 bool ret=(pO.first)->addInPort(currentPortI);
316 end->edNotifyReferencedBy(pO.second);
331 Node* n1=start->getNode();
332 Node* n2=end->getNode();
335 DEBTRACE(
"ComposedNode::edAddDFLink: this="<<this->getName()
336 <<
" father=" << father->getName() )
337 DEBTRACE(
"ComposedNode::edAddDFLink: OutPort=" << start->getName()
338 <<
" InPort=" << end->getName() )
341 bool ret = father->edAddDFLink(start,end);
345 throw Exception(
"Back link authorized only in special context (loop for example)");
347 bool ret= edAddLink(start,end);
364 DEBTRACE(
"Cycle detected, remove CF link");
365 if(start->isAlreadyLinkedWith(end))
366 edRemoveLink(start, end);
385 Node* n1=start->getNode();
386 Node* n2=end->getNode();
388 throw Exception(
"ComposedNode::edAddLink: can not add a control link to a node with itself",1);
389 ComposedNode* father=checkHavingCommonFather(start->getNode(),end->getNode());
391 throw Exception(
"ComposedNode::edAddLink: Trying to add CF link on orphan nodes.");
394 checkInMyDescendance(father);
397 bool ret=start->edAddInGate(end);
401 checkNoCyclePassingThrough(end->getNode());
406 DEBTRACE(
"Cycle detected, remove CF link");
407 edRemoveCFLink(start->getNode(), end->getNode());
419 return edAddLink(nodeS->getOutGate(),nodeE->getInGate());
425 edRemoveLink(nodeS->getOutGate(),nodeE->getInGate());
439 if(!start->isAlreadyLinkedWith(end))
440 throw Exception(
"ComposedNode::edRemoveLink : unexisting link");
441 ComposedNode* lwstCmnAnctr=getLowestCommonAncestor(start->getNode(),end->getNode());
442 checkInMyDescendance(lwstCmnAnctr);
443 list<ComposedNode *> allAscendanceOfNodeStart=start->getNode()->getAllAscendanceOf(lwstCmnAnctr);
444 list<ComposedNode *> allAscendanceOfNodeEnd=end->getNode()->getAllAscendanceOf(lwstCmnAnctr);
449 pair<OutPort *,OutPort *> currentPortO(start,start);
450 vector<pair< ComposedNode * , pair < OutPort* , OutPort *> > > needsToDestroyO;
452 Node *nodeOTemp=start->getNode();
453 if(*nodeOTemp<*lwstCmnAnctr)
456 while(iterS!=lwstCmnAnctr)
461 what <<
"ComposedNode::edRemoveLink: "
462 << start->getNode()->
getName() <<
"." <<start->getName() <<
"->"
463 << end->getNode()->getName() <<
"." << end->getName();
466 OutPort *tmp=currentPortO.first;
467 iterS->
getDelegateOf(currentPortO, end, allAscendanceOfNodeEnd);
468 needsToDestroyO.push_back(pair<
ComposedNode * , pair < OutPort* , OutPort *> >(iterS,pair<OutPort* , OutPort *> (tmp,currentPortO.first)));
472 Node *nodeTemp=end->getNode();
473 InPort * currentPortI=end;
474 if(*nodeTemp<*lwstCmnAnctr)
477 while(iterS!=lwstCmnAnctr)
482 what <<
"ComposedNode::edRemoveLink: "
483 << start->getNode()->
getName() <<
"." <<start->getName() <<
"->"
484 << end->getNode()->getName() <<
"." << end->getName();
487 iterS->
getDelegateOf(currentPortI, start, allAscendanceOfNodeStart);
493 (currentPortO.first)->removeInPort(currentPortI,
false);
495 (currentPortO.second)->getAllRepresented(repr);
497 end->edNotifyDereferencedBy(currentPortO.second);
501 iterS=start->getNode()->
_father;
502 vector<pair< ComposedNode * , pair < OutPort* , OutPort *> > >::reverse_iterator iter;
503 for(iter=needsToDestroyO.rbegin();iter!=needsToDestroyO.rend();iter++)
504 (*iter).first->
releaseDelegateOf(((*iter).second).first, ((*iter).second).second, end,allAscendanceOfNodeEnd);
505 nodeTemp=end->getNode();
506 if(*nodeTemp<*lwstCmnAnctr)
510 while(iterS!=lwstCmnAnctr)
521 ComposedNode* father=checkHavingCommonFather(start->getNode(),end->getNode());
523 throw Exception(
"edRemoveLink : nodes not in direct descendance of this");
524 start->edRemoveInGate(end);
537 if (node->_father!=
this)
539 string what(
"node "); what+= node->getName() ; what+=
" is not a child of node "; what += getName();
542 node->edDisconnectAllLinksWithMe();
558 std::string& firstPart, std::string& lastPart,
bool priority)
throw(
YACS::Exception)
560 const string delims(separator);
561 string portName, nodeName;
562 string::size_type idx;
564 idx = globalName.find_last_of(delims);
566 idx = globalName.find_first_of(delims);
567 if (idx == string::npos)
569 firstPart=globalName;
573 firstPart = globalName.substr(0,idx);
574 lastPart = globalName.substr(idx+1);
575 if ((firstPart.empty()) || (lastPart.empty()))
577 string what(
"the name "); what+= globalName ; what+=
" is not a valid port name";
585 vector< pair<OutPort *, InPort *> >
ret;
587 for(list<OutPort *>::const_iterator iter2=temp.begin();iter2!=temp.end();iter2++)
589 set<InPort *> temp2=(*iter2)->edSetInPort();
590 for(set<InPort *>::iterator iter3=temp2.begin();iter3!=temp2.end();iter3++)
592 ret.push_back(pair<OutPort *, InPort *>((*iter2),(*iter3)));
599 vector< pair<OutPort *, InPort *> >
ret;
601 for(set<OutPort *>::iterator iter2=ports.begin();iter2!=ports.end();iter2++)
603 set<InPort *> temp2=(*iter2)->edSetInPort();
604 for(set<InPort *>::iterator iter3=temp2.begin();iter3!=temp2.end();iter3++)
606 ret.push_back(pair<OutPort *, InPort *>(*iter2,*iter3));
615 performCFComputations(info);
616 list<InputPort *> setOfInToTest=getSetOfInputPort();
617 for(list<InputPort *>::iterator iter1=setOfInToTest.begin();iter1!=setOfInToTest.end();iter1++)
619 vector<OutPort *> candidateForAdvCheck;
620 set<OutPort *> outPorts=(*iter1)->edSetOutPort();
622 for(set<OutPort *>::iterator iter2=outPorts.begin();iter2!=outPorts.end();iter2++)
624 (*iter2)->checkConsistency(info);
625 ComposedNode *manager=getLowestCommonAncestor((*iter2)->getNode(),(*iter1)->getNode());
626 if(isInMyDescendance(manager))
627 candidateForAdvCheck.push_back(*iter2);
629 if(!candidateForAdvCheck.empty())
633 checkLinksCoherenceRegardingControl(candidateForAdvCheck,*iter1,info);
637 std::string what=ex.
what();
638 what +=
"\nfor input port: ";
639 what += (*iter1)->getNode()->getName();
641 what += (*iter1)->getName();
643 destructCFComputations(info);
648 if(!(*iter1)->canBeNull() && !(*iter1)->edIsManuallyInitialized())
651 destructCFComputations(info);
663 list<ComposedNode *> ascendants=getAllAscendanceOf();
664 if(find(ascendants.begin(),ascendants.end(),nodeC)!=ascendants.end())
666 const char what[]=
"ComposedNode::checkNoCrossHierachyWith : ComposedNode with name \"";
667 string stream(what); stream+=node->getName(); stream+=
"\" is already in hierarchy ascendance of node with name \"";
668 stream+=_name; stream+=
"\" ; So it can't be now in its descendance !";
677 for(list<Node *>::iterator iter=nodes.begin();iter!=nodes.end();iter++)
678 if(dynamic_cast<ComposedNode *>(*iter))
686 for(list<Node *>::iterator iter=nodes.begin();iter!=nodes.end();iter++)
687 if(dynamic_cast<ComposedNode *>(*iter))
698 list< OutPort *>::const_iterator iter=ports.begin();
701 for(;iter!=ports.end();iter++)
703 Node *tmp=(*iter)->getNode();
715 map < ComposedNode *, list<OutPort *>,
SortHierarc > outputs;
716 vector<OutPort *> outputsCross;
717 map < ComposedNode *, list<OutPort *>,
SortHierarc > outputsBw;
718 vector<OutPort *>::const_iterator iter1;
721 for(iter1=starts.begin();iter1!=starts.end();iter1++)
723 ComposedNode *manager=getLowestCommonAncestor((*iter1)->getNode(),end->getNode());
727 unsigned char isAlreadyFed=FREE_ST;
729 if(outputsCross.size()>0)
731 isAlreadyFed=FED_DS_ST;
732 if(outputsCross.size()>1)
733 for(vector< OutPort *>::const_iterator iter1=outputsCross.begin();iter1!=(outputsCross.end()-2);iter1++)
736 map < ComposedNode *, list<OutPort *>,
SortHierarc >::iterator iter3=outputs.begin();
737 for(;iter3!=outputs.end();iter3++)
738 ((*iter3).first)->checkCFLinks((*iter3).second,end,isAlreadyFed,
true,info);
739 if(isAlreadyFed==FREE_ST)
740 if(!end->edIsManuallyInitialized())
742 isAlreadyFed=FREE_ST;
744 map < ComposedNode *, list<OutPort *>,
SortHierarc >::reverse_iterator iter5=outputsBw.rbegin();
745 for(;iter5!=outputsBw.rend();iter5++)
746 ((*iter5).first)->checkCFLinks((*iter5).second,end,isAlreadyFed,
false,info);
755 static const char what[]=
"ComposedNode::solveObviousOrDelegateCFLinks : Internal error occured - uncorrect hierarchy detected !";
764 else if(alreadyFed==
FED_ST)
772 if(levelOfDecision==
this)
774 if(dynamic_cast<ElementaryNode *>(levelOfDecision))
786 for(list< OutPort *>::const_iterator iter=starts.begin();iter!=starts.end();iter++)
791 ((
ComposedNode *)levelOfDecision)->checkCFLinks(starts,end,alreadyFed,direction,info);
805 static const char what[]=
"ComposedNode::checkCFLinks : Internal error occured - uncorrect hierarchy detected !";
810 if(!dynamic_cast<ElementaryNode *>(nodeEnd))
813 list< OutPort *>::const_iterator iter=starts.begin();
814 Node *nodeStart=(*iter)->getNode();
816 if(nodeEnd!=nodeStart)
819 for(;iter!=starts.end();iter++)
820 if((*iter)->getNode()!=nodeStart)
824 for(iter=starts.begin();iter!=starts.end();iter++)
833 vector< pair<InPort *, OutPort *> >
ret;
835 for(set<InPort *>::iterator iter2=ports.begin();iter2!=ports.end();iter2++)
837 set<OutPort *> temp2=(*iter2)->edSetOutPort();
838 for(set<OutPort *>::iterator iter3=temp2.begin();iter3!=temp2.end();iter3++)
841 std::set<OutPort *> trueOutPorts;
842 (*iter3)->getAllRepresented(trueOutPorts);
843 for(std::set<OutPort *>::iterator iter4=trueOutPorts.begin();iter4!=trueOutPorts.end();++iter4)
844 ret.push_back(pair<InPort *, OutPort *>(*iter2,*iter4));
861 for(list<OutPort *>::iterator iter2=temp.begin();iter2!=temp.end();iter2++)
863 set<InPort *> temp2=(*iter2)->edSetInPort();
864 for(set<InPort *>::iterator iter3=temp2.begin();iter3!=temp2.end();iter3++)
885 for(list<InPort *>::iterator iter2=temp.begin();iter2!=temp.end();iter2++)
887 set<OutPort *> temp2=(*iter2)->edSetOutPort();
888 for(set<OutPort *>::iterator iter3=temp2.begin();iter3!=temp2.end();iter3++)
907 vector< pair<OutPort *, InPort *> >::iterator iter;
908 for(iter=linksToDestroy.begin();iter!=linksToDestroy.end();iter++)
911 (*iter).first->removeInPort((*iter).second,
true);
915 vector< pair<InPort *, OutPort *> >::iterator iter2;
916 for(iter2=linksToDestroy2.begin();iter2!=linksToDestroy2.end();iter2++)
919 (*iter2).second->removeInPort((*iter2).first,
true);
934 return find(nodeAncestors.begin(),nodeAncestors.end(),(
ComposedNode *)
this)!=nodeAncestors.end();
951 Node *iterBack=nodeToTest;
953 while(iter!=0 && iter!=
this)
966 string nodeName=node->getQualifiedName();
967 if (!isNodeAlreadyAggregated(node))
969 if (node->getName() ==
"thisIsAFakeNode")
971 string child = node->getName()+
".thisIsAFakeNode";
976 string what(
"node "); what+= node->getName() ; what+=
" is not a child of node "; what += getName();
982 while (father !=
this)
997 string potentiallyDirectSonName, remainsPath;
999 potentiallyDirectSonName,remainsPath,
false);
1000 Node *child=getChildByShortName(potentiallyDirectSonName);
1015 const char whatC[]=
" is not the descendance of node ";
1018 string what(
"node "); what+= nodeToTest->getName(); what+=
" ";
1019 what+=whatC; what+=_name;
1025 while(iter!=0 && iter!=
this)
1029 string what(
"node "); what+= nodeToTest->getName(); what+=
" ";
1030 what+=whatC; what+=_name;
1048 const char what[]=
"The two nodes do not share the same genealogy";
1049 if(node1==0 || node2==0)
1052 if(dynamic_cast<ComposedNode *>(node1))
1056 set<ComposedNode *> s;
1063 if(dynamic_cast<ComposedNode *>(node2))
1067 set<ComposedNode *>::iterator iter=s.find(temp);
1068 while(temp && iter==s.end())
1084 std::size_t it1_b(0),it1_e(0),it2_b(0),it2_e(0);
1085 while(it1_b!=std::string::npos && it2_b!=std::string::npos)
1089 if(it1_e!=it2_e && it1_e!=std::string::npos && it2_e!=std::string::npos)
1091 std::string elt1(node1.substr(it1_b,it1_e-it1_b)),elt2(node2.substr(it2_b,it2_e-it2_b));
1109 for(std::list<Node *>::const_iterator it=dd.begin();it!=dd.end();it++)
1119 list<ElementaryNode *>
ret;
1121 for(list<Node *>::const_iterator iter=setOfNode.begin();iter!=setOfNode.end();iter++)
1123 list<ElementaryNode *> myCurrentSet=(*iter)->getRecursiveConstituents();
1124 ret.insert(ret.end(),myCurrentSet.begin(),myCurrentSet.end());
1134 for(list<Node *>::const_iterator iter=setOfNode.begin();iter!=setOfNode.end();iter++)
1136 if ( dynamic_cast<ComposedNode*> (*iter) )
1139 ret.insert(ret.end(),myCurrentSet.begin(),myCurrentSet.end());
1140 ret.push_back(*iter);
1144 list<ElementaryNode *> myCurrentSet=(*iter)->getRecursiveConstituents();
1145 ret.insert(ret.end(),myCurrentSet.begin(),myCurrentSet.end());
1156 for(list<Node *>::iterator iter=setOfNode.begin();iter!=setOfNode.end();iter++)
1158 if ( dynamic_cast<ElementaryNode*> (*iter) )
1160 list<ElementaryNode *> myCurrentSet=(*iter)->getRecursiveConstituents();
1161 ret.insert(ret.end(),myCurrentSet.begin(),myCurrentSet.end());
1166 ret.insert(ret.end(),myCurrentSet.begin(),myCurrentSet.end());
1169 ret.push_back(
this);
1181 list<ProgressWeight>
ret;
1183 for(list<Node *>::const_iterator iter=setOfNode.begin();iter!=setOfNode.end();iter++)
1186 ret.insert(ret.end(),myCurrentSet.begin(),myCurrentSet.end());
1198 return getPortName<InPort>(inPort);
1203 return getPortName<OutPort>(outPort);
1210 for(list<Node *>::iterator iter=constituents.begin();iter!=constituents.end();iter++)
1211 ret+=(*iter)->getNumberOfInputPorts();
1219 for(list<Node *>::iterator iter=constituents.begin();iter!=constituents.end();iter++)
1220 ret+=(*iter)->getNumberOfOutputPorts();
1227 list<InputPort *>
ret;
1228 for(list<Node *>::iterator iter=constituents.begin();iter!=constituents.end();iter++)
1230 list<InputPort *> currentsPorts=(*iter)->getSetOfInputPort();
1231 ret.insert(ret.end(),currentsPorts.begin(),currentsPorts.end());
1239 list<OutputPort *>
ret;
1240 for(list<Node *>::iterator iter=constituents.begin();iter!=constituents.end();iter++)
1242 list<OutputPort *> currentsPorts=(*iter)->getSetOfOutputPort();
1243 ret.insert(ret.end(),currentsPorts.begin(),currentsPorts.end());
1251 list<InputDataStreamPort *>
ret;
1252 for(list<Node *>::iterator iter=constituents.begin();iter!=constituents.end();iter++)
1254 list<InputDataStreamPort *> currentsPorts=(*iter)->getSetOfInputDataStreamPort();
1255 ret.insert(ret.end(),currentsPorts.begin(),currentsPorts.end());
1263 list<OutputDataStreamPort *>
ret;
1264 for(list<Node *>::iterator iter=constituents.begin();iter!=constituents.end();iter++)
1266 list<OutputDataStreamPort *> currentsPorts=(*iter)->getSetOfOutputDataStreamPort();
1267 ret.insert(ret.end(),currentsPorts.begin(),currentsPorts.end());
1274 string portName, nodeName;
1277 Node *child = getChildByShortName(nodeName);
1282 string what(
"ComposedNode::getOutPort : the port with name "); what+=name; what+=
" does not exist on the current level";
1300 string portName, nodeName;
1303 Node *child = getChildByName(nodeName);
1308 string what(
"ComposedNode::getInputPort : the port with name "); what+=name; what+=
" does not exist on the current level";
1320 string portName, nodeName;
1323 Node *child = getChildByShortName(nodeName);
1328 string what(
"ComposedNode::getOutputPort : the port with name "); what+=name; what+=
" does not exist on the current level";
1335 string portName, nodeName;
1338 Node *child = getChildByName(nodeName);
1343 string what(
"ComposedNode::getInputDataStreamPort : the port with name "); what+=name; what+=
" does not exist on the current level";
1350 string portName, nodeName;
1353 Node *child = getChildByName(nodeName);
1358 string what(
"ComposedNode::getOutputDataStreamPort : the port with name "); what+=name; what+=
" does not exist on the current level";
1408 _errorDetails=_errorDetails + ex.
what();
1446 if((dynamic_cast<DataFlowPort *>(start) || dynamic_cast<DataFlowPort *>(end))
1447 && (dynamic_cast<DataStreamPort *>(start) || dynamic_cast<DataStreamPort *>(end)))
1450 list<ComposedNode *>::const_iterator iter;
1451 for(iter=pointsOfViewStart.begin();iter!=pointsOfViewStart.end() && !isOK;iter++)
1452 isOK=(*iter)->isRepeatedUnpredictablySeveralTimes();
1453 for(iter=pointsOfViewEnd.begin();iter!=pointsOfViewEnd.end() && !isOK;iter++)
1454 isOK=(*iter)->isRepeatedUnpredictablySeveralTimes();
1456 throw Exception(
"ComposedNode::checkLinkPossibility : Request for cross protocol link impossible.");
1494 for(list<Node *>::iterator iter=constituents.begin(); iter!=constituents.end(); iter++)
1496 (*iter)->accept(visitor);
1503 std::list<InputPort *> lip;
return lip;
1509 std::list<OutputPort *> lop;
return lop;
1536 for(list<Node *>::iterator iter=constituents.begin(); iter!=constituents.end(); iter++)
1538 if(!(*iter)->isValid())
1554 std::string report=
"<error node= " +
getName();
1555 switch(effectiveState)
1558 report=report+
" state= INVALID";
1561 report=report+
" state= ERROR";
1564 report=report+
" state= FAILED";
1569 report=report +
">\n" ;
1574 for(list<Node *>::iterator iter=constituents.begin(); iter!=constituents.end(); iter++)
1576 std::string rep=(*iter)->getErrorReport();
1579 report=report+rep+
"\n";
1582 report=report+
"</error>";
1590 DEBTRACE(
"ComposedNode::checkBasicConsistency");
1591 std::list<InputPort *>::const_iterator iter;
1593 for(iter=inports.begin();iter!=inports.end();iter++)
1594 (*iter)->checkBasicConsistency();
1604 DEBTRACE(
"ComposedNode::shutdown");
1606 for(list<Node *>::iterator iter=nodes.begin();iter!=nodes.end();iter++)
1607 (*iter)->shutdown(level);
1616 DEBTRACE(
"ComposedNode::cleanNodes");
1618 for(list<Node *>::iterator iter=nodes.begin();iter!=nodes.end();iter++)
1619 (*iter)->cleanNodes();
1632 for(std::list<Node *>::iterator iter=nodes.begin();iter!=nodes.end();iter++)
1633 (*iter)->resetState(level);