|
|
Go to the documentation of this file.
121 vector< vector<Idx> > suc;
122 vector< vector<Idx> > pre;
183 std::vector<Pnode*> W;
270 std::vector<Pnode*>::iterator wit= W.begin();
271 for(; wit!= W.end(); ++wit) delete *wit;
282 std::map<Idx,Idx> smap;
283 std::map<Idx,Idx> emap;
308 states[smap[tit->X2]].pre[emap[tit->Ev]].push_back(smap[tit->X1]);
309 states[smap[tit->X1]].suc[emap[tit->Ev]].push_back(smap[tit->X2]);
313 eit=rConAlph. Begin();
314 for(; eit != rConAlph. End(); ++eit) conalph.insert(emap[*eit]);
315 eit=rLocAlph. Begin();
316 for(; eit != rLocAlph. End(); ++eit) localph.insert(emap[*eit]);
318 for(; ev < events.size(); ++ev)
321 for(; ev < events.size(); ++ev)
340 for(;st< states.size();++st) universe-> states.insert(st);
352 std::set<Idx>::iterator sit;
353 std::vector<Idx>::iterator vit;
359 for(; idx < states.size(); ++idx) {
360 vit= states[idx].pre[*sit].begin();
361 for(;vit!= states[idx].pre[*sit].end();++vit)
362 states[idx].shaconPre[*sit].push_back(*vit);
370 for(;idx< states.size();++idx) {
371 vit= states[idx].pre[*sit].begin();
372 for(;vit!= states[idx].pre[*sit].end();++vit)
373 states[idx].shauncPre[*sit].push_back(*vit);
381 for(;idx< states.size();++idx) {
382 vit= states[idx].pre[*sit].begin();
383 for(;vit!= states[idx].pre[*sit].end();++vit)
384 states[idx].locconPre.push_back(*vit);
392 for(;idx< states.size();++idx) {
393 vit= states[idx].pre[*sit].begin();
394 for(;vit!= states[idx].pre[*sit].end();++vit)
395 states[idx].locuncPre.push_back(*vit);
404 std::stack<Idx> todo;
405 std::vector<Idx>::iterator vit;
406 std::vector<Idx>::iterator Ivit;
410 for(;idx< states.size();++idx) {
411 vit= states[idx].locuncPre.begin();
412 for(;vit!= states[idx].locuncPre.end();++vit) {
414 while(!todo.empty()) {
417 if(std::find( states[idx].locuncPres.begin(), states[idx].locuncPres.end(),st)
418 != states[idx].locuncPres.end()) continue;
419 states[idx].locuncPres.push_back(st);
420 Ivit= states[st].locuncPre.begin();
421 for(;Ivit!= states[st].locuncPre.end();++Ivit)
427 std::set<Idx> tempset;
428 std::set<Idx>::iterator sit;
429 std::vector<Idx>::iterator IIvit;
435 for(;idx< states.size();++idx) {
436 vit= states[idx].locuncPre.begin();
437 for(;vit!= states[idx].locuncPre.end();++vit) {
439 while(!todo.empty()){
442 if(tempset.find(st)!=tempset.end()) continue;
444 Ivit= states[st].locuncPre.begin();
445 for(;Ivit!= states[st].locuncPre.end();++Ivit)
447 IIvit= states[st].shauncPre[*sit].begin();
448 for(;IIvit!= states[st].shauncPre[*sit].end();++IIvit)
449 states[st].shauncPres[*sit].push_back(*IIvit);
461 vector<Relation> relations;
462 std::stack<Pnode*> todo;
463 std::vector<Pnode*> addSet;
464 std::vector<Pnode*> removeSet;
466 vector<Relation>::iterator relIt;
467 std::vector<Pnode*>::iterator addIt;
468 std::vector<Pnode*>::iterator remIt;
474 relIt=relations.begin();
475 for(; relIt!=relations.end(); ++relIt) {
483 while(!todo.empty()) {
484 Pnode* rop=todo.top();
488 if(rop-> nsize==1) continue;
490 if(rop-> states.empty()) continue;
493 std::set<Idx> sXinter;
494 std::set_intersection(rop-> states.begin(), rop-> states.end(),
495 tb.begin(), tb.end(),
496 std::inserter(sXinter, sXinter.begin()));
499 if(sXinter.size()==rop-> states.size()) continue;
503 removeSet.push_back(rop);
507 nXinter-> states.swap(sXinter);
508 nXinter-> nsize=sXinter.size();
518 addSet.push_back(nXinter);
519 addSet.push_back(nXdiff);
529 for(remIt=removeSet.begin(); remIt!=removeSet.end(); ++remIt) ro.erase(*remIt);
533 for(addIt=addSet.begin(); addIt!=addSet.end(); ++addIt) ro.insert(*addIt);
537 if(B. states.empty()) return;
554 std::set<Idx>::iterator sit;
555 std::set<Idx>::iterator evit;
556 std::vector<Idx>::iterator vit;
565 vit= states[*sit].shaconPre[*evit].begin();
566 for(;vit!= states[*sit].shaconPre[*evit].end();++vit) {
569 rel. pre.insert(*vit);
570 relations.push_back(rel);
582 vit= states[*sit].shauncPre[*evit].begin();
583 for(;vit!= states[*sit].shauncPre[*evit].end();++vit) {
584 rel. pre.insert(*vit);
587 if(!rel. pre.empty()) relations.push_back(rel);
595 vit= states[*sit].locconPre.begin();
596 for(;vit!= states[*sit].locconPre.end();++vit) {
599 rel. pre.insert(*vit);
600 relations.push_back(rel);
611 vit= states[*sit].locuncPre.begin();
612 for(;vit!= states[*sit].locuncPre.end();++vit)
613 rel. pre.insert(*vit);
616 if(!rel. pre.empty()) relations.push_back(rel);
623 std::stack<Pnode*>& todo)
640 std::cout<< "####[SOE]this can not happen[SOE]####\n";
650 std::stack<Idx> stodo;
651 std::set<Idx>::iterator sit;
652 std::vector<Idx>::iterator vit;
653 std::set<Pnode*>::iterator roIt;
657 for(; sit!=rel. pre.end(); ++sit) {
659 for(; roIt!= ro.end(); ++roIt) {
660 if((*roIt)->states.find(*sit)!=(*roIt)->states.end()) {
669 for(;sit!=B. states.end();++sit) {
670 vit= states[*sit].shaconPre[rel. ev].begin();
671 for(;vit!= states[*sit].shaconPre[rel. ev].end();++vit)
676 while(!stodo.empty()) {
679 if(tb.find(idx)!=tb.end()) continue;
682 vit= states[idx].locuncPre.begin();
683 for(;vit!= states[idx].locuncPre.end();++vit)
686 vit= states[idx].locconPre.begin();
687 for(;vit!= states[idx].locconPre.end();++vit)
688 if(todo.top()->states.find(*vit)!=todo.top()->states.end())
700 std::set<Idx>::iterator sit;
701 std::vector<Idx>::iterator vit;
702 std::set<Pnode*>::iterator roIt;
706 for(; sit!=rel. pre.end(); ++sit) {
708 for(; roIt!= ro.end(); ++roIt) {
709 if((*roIt)->states.find(*sit)!=(*roIt)->states.end()) {
721 for(; sit != B. states.end(); ++sit) {
722 vit= states[*sit].shauncPres[rel. ev].begin();
723 for(; vit!= states[*sit].shauncPres[rel. ev].end(); ++vit) tb.insert(*vit);
728 for(; sit != tb.end(); ++sit) {
729 vit= states[*sit].locuncPres.begin();
730 for(; vit != states[*sit].locuncPres.end(); ++vit) tb.insert(*vit);
741 std::stack<Idx> stodo;
742 std::set<Idx>::iterator sit;
743 std::vector<Idx>::iterator vit;
744 std::set<Pnode*>::iterator roIt;
748 for(; sit!=rel. pre.end(); ++sit) {
750 for(; roIt!= ro.end(); ++roIt) {
751 if((*roIt)->states.find(*sit)!=(*roIt)->states.end()) {
763 for(; sit!=B. states.end(); ++sit) {
764 vit= states[*sit].locconPre.begin();
765 for(; vit != states[*sit].locconPre.end(); ++vit)
770 while(!stodo.empty()) {
773 if(tb.find(idx)!=tb.end()) continue;
776 vit= states[idx].locuncPre.begin();
777 for(;vit!= states[idx].locuncPre.end();++vit)
780 vit= states[idx].locconPre.begin();
781 for(;vit!= states[idx].locconPre.end();++vit)
782 if(todo.top()->states.find(*vit)!=todo.top()->states.end())
794 std::vector<Idx>::iterator vit;
795 std::set<Idx>::iterator sit;
796 std::set<Pnode*>::iterator roIt;
800 for(; sit!=rel. pre.end(); ++sit) {
802 for(; roIt!= ro.end(); ++roIt) {
803 if((*roIt)->states.find(*sit)!=(*roIt)->states.end()) {
815 for(; sit != B. states.end(); ++sit) {
816 vit= states[*sit].locuncPres.begin();
817 for(; vit != states[*sit].locuncPres.end(); ++vit)
826 FD_DF( "SOE::refine()");
829 std::set<Pnode*>::iterator roDivIt;
841 FD_DF( "SOE::partition(rMapStateToPartition," << rGenPart. Name() << ")");
846 rMapStateToPartition.clear();
849 std::set<Pnode*>::iterator cRoIt = ro.begin();
850 std::set<Pnode*>::iterator cRoItEnd = ro.end();
851 std::set<Idx>::iterator cSIt;
852 std::set<Idx>::iterator cSItEnd;
855 for(; cRoIt != cRoItEnd; ++cRoIt) {
857 std::ostringstream ostr;
862 cSIt=(*cRoIt)->states.begin();
863 cSItEnd=(*cRoIt)->states.end();
864 for(; cSIt != cSItEnd; ++cSIt) {
869 rMapStateToPartition[st] = newstate;
873 else ostr << st << ",";
885 std::string statename = ostr.str();
886 if(statename.length()>=1) statename.erase(statename.length()-1);
887 statename = "{" + statename + "}";
896 for(; tIt != tItEnd; ++tIt) {
898 rGenPart. SetTransition(rMapStateToPartition[tIt->X1], tIt->Ev,
899 rMapStateToPartition[tIt->X2]);
919 std::map<Idx,Idx>& rMapStateToPartition,
925 SOE soe = SOE(rGenOrig, rConAlph, rLocAlph);
928 soe. partition(rMapStateToPartition, rResGen);
const std::string & Name(void) const
void computeEquStates(Pnode &B, Relation &rel, std::set< Idx > &tb, std::stack< Pnode * > &todo)
void partition(std::map< Idx, Idx > &rMapStateToPartition, Generator &rGenPart)
void partitionClass(Pnode &B)
void initStateMember_Pre()
std::set< Idx > locuncalph
void relCase_4(Pnode &B, Relation &rel, set< Idx > &tb, stack< Pnode * > &todo)
std::set< Idx > shaconalph
std::vector< Idx > events
void relCase_1(Pnode &B, Relation &rel, set< Idx > &tb, stack< Pnode * > &todo)
std::set< Idx > shauncalph
void initStateMember_Pres()
void relCase_3(Pnode &B, Relation &rel, set< Idx > &tb, stack< Pnode * > &todo)
SOE(const Generator &rGenOrig, const EventSet &rConAlph, const EventSet &rLocAlph)
std::set< Idx > locconalph
std::set< Pnode * > roDividers
void relCase_2(Pnode &B, Relation &rel, set< Idx > &tb, stack< Pnode * > &todo)
void computeRel(Pnode &B, std::vector< Relation > &relations)
std::vector< State > states
StateSet::Iterator StatesBegin(void) const
bool SetTransition(Idx x1, Idx ev, Idx x2)
const EventSet & Alphabet(void) const
TransSet::Iterator TransRelBegin(void) const
EventSet::Iterator AlphabetBegin(void) const
void SetInitState(Idx index)
std::string StateName(Idx index) const
StateSet::Iterator StatesEnd(void) const
TransSet::Iterator TransRelEnd(void) const
void SetMarkedState(Idx index)
bool StateNamesEnabled(void) const
EventSet::Iterator AlphabetEnd(void) const
bool ExistsInitState(Idx index) const
bool ExistsMarkedState(Idx index) const
const StateSet & States(void) const
Iterator Begin(void) const
void ComputeSynthObsEquiv(const Generator &rGenOrig, const EventSet &rConAlph, const EventSet &rLocAlph, std::map< Idx, Idx > &rMapStateToPartition, Generator &rResGen)
std::vector< Idx > states
vector< vector< Idx > > shauncPre
vector< vector< Idx > > shauncPres
vector< vector< Idx > > suc
vector< vector< Idx > > shaconPre
vector< vector< Idx > > pre
libFAUDES 2.33k
--- 2025.09.16
--- c++ api documentaion by doxygen
|