|
|
Go to the documentation of this file.
35 std::map< std::pair<Idx,Idx>, Idx> cmap;
38 if(&rResGen== &rGen1 || &rResGen== &rGen2) {
39 pResGen= rResGen. New();
42 Parallel(rGen1, rGen2, cmap, *pResGen);
44 if(pResGen != &rResGen) {
45 rResGen. Move(*pResGen);
57 std::map< std::pair<Idx,Idx>, Idx> cmap;
62 if(rGenVec. Size()==0) {
66 rResGen=rGenVec. At(0);
71 FD_DF( "Parallel() cnt " << i << " states " << rResGen. Size());
85 if(rGenVec. Size()==0) {
89 rResGen=rGenVec. At(0);
93 FD_DF( "ParallelLive() cnt " << i << " current trans #" << rResGen. TransRel(). Size());
95 FD_DF( "ParallelLive() cnt " << i << " certconf trans #" << rResGen. TransRel(). Size());
97 FD_DF( "ParallelLive() cnt " << i << " parallel trans #" << rResGen. TransRel(). Size());
107 FD_DF( "aParallel(...)");
114 if(&rResGen== &rGen1 || &rResGen== &rGen2) {
115 pResGen= rResGen. New();
128 if(pResGen != &rResGen) {
129 rResGen. Move(*pResGen);
133 FD_DF( "aParallel(...): done");
151 if(rGenVec. Size()==0) {
156 if(rGenVec. Size()==1) {
157 rResGen=rGenVec. At(0);
188 if(&rResGen== &rGen1 || &rResGen== &rGen2) {
189 pResGen= rResGen. New();
202 if(pResGen != &rResGen) {
203 rResGen. Move(*pResGen);
230 Parallel(rGen1,rGen2,rCompositionMap,rResGen);
253 StateSet::Iterator sit;
266 std::map< std::pair<Idx,Idx>, Idx>& rCompositionMap,
270 FD_DF( "Parallel(" << &rGen1 << "," << &rGen2 << ")");
302 if(&rResGen== &rGen1 || &rResGen== &rGen2) {
303 pResGen= rResGen. New();
307 rCompositionMap.clear();
310 EventSet::Iterator eit;
317 FD_DF( "Parallel: inserted indices in rResGen.alphabet( "
329 FD_DF( "Parallel: shared events: " << sharedalphabet. ToString());
332 std::stack< std::pair<Idx,Idx> > todo;
334 std::pair<Idx,Idx> currentstates, newstates;
337 StateSet::Iterator lit1,lit2;
339 std::map< std::pair<Idx,Idx>, Idx>::iterator rcit;
342 FD_DF( "Parallel: adding all combinations of initial states to todo:");
345 newstates = std::make_pair(*lit1, *lit2);
347 rCompositionMap[newstates] = tmpstate;
348 FD_DF( "Parallel: (" << *lit1 << "|" << *lit2 << ") -> "
349 << rCompositionMap[newstates]);
351 if(!gen1live. Exists(newstates.first)) continue;
352 if(!gen2live. Exists(newstates.second)) continue;
354 todo.push(newstates);
355 FD_DF( "Parallel: todo push: (" << newstates.first << "|"
356 << newstates.second << ") -> "
357 << rCompositionMap[newstates]);
362 FD_DF( "Parallel: processing reachable states:");
363 while (! todo.empty()) {
367 FD_WPC(rCompositionMap.size(),rCompositionMap.size()+todo.size(), "Parallel(): processing");
369 currentstates = todo.top();
371 FD_DF( "Parallel: processing (" << currentstates.first << "|"
372 << currentstates.second << ") -> "
373 << rCompositionMap[currentstates]);
378 for(; tit1 != tit1_end; ++tit1) {
380 if(! sharedalphabet. Exists(tit1->Ev)) {
381 FD_DF( "Parallel: exists only in rGen1");
382 newstates = std::make_pair(tit1->X2, currentstates.second);
384 rcit = rCompositionMap.find(newstates);
385 if(rcit == rCompositionMap.end()) {
387 rCompositionMap[newstates] = tmpstate;
390 dopush= gen1live. Exists(newstates.first) && gen2live. Exists(newstates.second);
393 todo.push(newstates);
394 FD_DF( "Parallel: todo push: (" << newstates.first << "|"
395 << newstates.second << ") -> "
396 << rCompositionMap[newstates]);
399 tmpstate = rcit->second;
401 pResGen-> SetTransition(rCompositionMap[currentstates], tit1->Ev, tmpstate);
402 FD_DF( "Parallel: add transition to new generator: "
403 << rCompositionMap[currentstates] << "-" << tit1->Ev << "-"
408 FD_DF( "Parallel: common event");
411 tit2_end = rGen2. TransRelEnd(currentstates.second, tit1->Ev);
412 for (; tit2 != tit2_end; ++tit2) {
413 newstates = std::make_pair(tit1->X2, tit2->X2);
415 rcit = rCompositionMap.find(newstates);
416 if (rcit == rCompositionMap.end()) {
418 rCompositionMap[newstates] = tmpstate;
421 dopush= gen1live. Exists(newstates.first) && gen2live. Exists(newstates.second);
424 todo.push(newstates);
425 FD_DF( "Parallel: todo push: (" << newstates.first << "|"
426 << newstates.second << ") -> "
427 << rCompositionMap[newstates]);
430 tmpstate = rcit->second;
434 FD_DF( "Parallel: add transition to new generator: "
435 << rCompositionMap[currentstates] << "-"
436 << tit1->Ev << "-" << tmpstate);
443 tit2_end = rGen2. TransRelEnd(currentstates.second);
444 for (; tit2 != tit2_end; ++tit2) {
445 if (! sharedalphabet. Exists(tit2->Ev)) {
446 FD_DF( "Parallel: exists only in rGen2");
447 newstates = std::make_pair(currentstates.first, tit2->X2);
449 rcit = rCompositionMap.find(newstates);
450 if(rcit == rCompositionMap.end()) {
452 rCompositionMap[newstates] = tmpstate;
455 dopush= gen1live. Exists(newstates.first) && gen2live. Exists(newstates.second);
458 todo.push(newstates);
459 FD_DF( "Parallel: todo push: (" << newstates.first << "|"
460 << newstates.second << ") -> "
461 << rCompositionMap[newstates]);
464 tmpstate = rcit->second;
468 FD_DF( "Parallel: add transition to new generator: "
469 << rCompositionMap[currentstates] << "-"
470 << tit2->Ev << "-" << tmpstate);
476 rcit=rCompositionMap.begin();
477 while(rcit!=rCompositionMap.end()) {
486 if(pResGen != &rResGen) {
487 rResGen. Move(*pResGen);
501 std::map< std::pair<Idx,Idx>, Idx>& rCompositionMap,
504 FD_DF( "ParallelLive(" << &rGen1 << "," << &rGen2 << ")");
505 Parallel(rGen1,rGen2,rCompositionMap,rResGen, true);
513 FD_DF( "ParallelLive(" << &rGen1 << "," << &rGen2 << ")");
514 std::map< std::pair<Idx,Idx>, Idx> cmap;
515 Parallel(rGen1,rGen2,cmap,rResGen, true);
520 std::map< std::pair<Idx,Idx>, Idx> cmap;
522 Product(rGen1, rGen2, cmap, rResGen);
538 if(&rResGen== &rGen1 || &rResGen== &rGen2) {
539 pResGen= rResGen. New();
552 if(pResGen != &rResGen) {
553 rResGen. Move(*pResGen);
572 if(&rResGen== &rGen1 || &rResGen== &rGen2) {
573 pResGen= rResGen. New();
586 if(pResGen != &rResGen) {
587 rResGen. Move(*pResGen);
596 std::map< std::pair<Idx,Idx>, Idx>& rCompositionMap,
603 Product(rGen1,rGen2,rCompositionMap,rResGen);
610 std::map< std::pair<Idx,Idx>, Idx>::iterator rit;
611 for(rit=rCompositionMap.begin(); rit!=rCompositionMap.end(); ++rit){
621 std::map< std::pair<Idx,Idx>, Idx>& rCompositionMap,
624 FD_DF( "Product(" << rGen1. Name() << "," << rGen2. Name() << ")");
625 FD_DF( "Product(): state counts " << rGen1. Size() << "/" << rGen2. Size());
629 if(&rResGen== &rGen1 || &rResGen== &rGen2) {
630 pResGen= rResGen. New();
633 rCompositionMap.clear();
637 FD_DF( "Product: shared alphabet: "
641 std::stack< std::pair<Idx,Idx> > todo;
643 std::pair<Idx,Idx> currentstates, newstates;
647 StateSet::Iterator lit1, lit2;
649 std::map< std::pair<Idx,Idx>, Idx>::iterator rcit;
652 FD_DF( "Product: adding all combinations of initial states to todo:");
657 currentstates = std::make_pair(*lit1, *lit2);
658 todo.push(currentstates);
659 rCompositionMap[currentstates] = pResGen-> InsInitState();
660 FD_DF( "Product: (" << *lit1 << "|" << *lit2 << ") -> "
661 << rCompositionMap[currentstates]);
666 FD_DF( "Product: processing reachable states:");
667 while (! todo.empty()) {
671 FD_WPC(rCompositionMap.size(),rCompositionMap.size()+todo.size(), "Product(): processing");
673 currentstates = todo.top();
675 FD_DF( "Product: processing (" << currentstates.first << "|"
676 << currentstates.second << ") -> " << rCompositionMap[currentstates]);
681 tit2_end = rGen2. TransRelEnd(currentstates.second);
682 while((tit1 != tit1_end) && (tit2 != tit2_end)) {
684 if(tit1->Ev < tit2->Ev) {
689 if(tit1->Ev > tit2->Ev) {
695 while(tit2 != tit2_end) {
697 if(tit1->Ev != tit2->Ev) break;
699 newstates = std::make_pair(tit1->X2, tit2->X2);
701 rcit = rCompositionMap.find(newstates);
702 if(rcit == rCompositionMap.end()) {
703 todo.push(newstates);
705 rCompositionMap[newstates] = tmpstate;
707 FD_DF( "Product: todo push: (" << newstates.first << "|"
708 << newstates.second << ") -> " << rCompositionMap[newstates] << " todo #" << todo.size());
710 tmpstate = rcit->second;
713 pResGen-> SetTransition(rCompositionMap[currentstates], tit1->Ev, tmpstate);
714 FD_DF( "Product: add transition to new generator: "
715 << rCompositionMap[currentstates] << "-" << tit1->Ev << "-" << tmpstate);
722 if(tit1->Ev == tit2_begin->Ev)
729 rcit=rCompositionMap.begin();
730 while(rcit!=rCompositionMap.end()) {
739 if(pResGen != &rResGen) {
749 FD_DF( "Product(...): done");
757 const std::map< std::pair<Idx,Idx>, Idx>& rCompositionMap,
760 std::map< std::pair<Idx,Idx>, Idx>::const_iterator rcit;
761 for(rcit=rCompositionMap.begin(); rcit!=rCompositionMap.end(); rcit++) {
762 Idx x1=rcit->first.first;
763 Idx x2=rcit->first.second;
764 Idx x12=rcit->second;
770 std::string name12= name1 + "|" + name2;
779 const std::map< std::pair<Idx,Idx>, Idx>& rCompositionMap,
780 std::map<Idx,Idx>& rCompositionMap1)
782 rCompositionMap1.clear();
783 std::map< std::pair<Idx,Idx>, Idx>::const_iterator rcit;
784 for(rcit=rCompositionMap.begin(); rcit!=rCompositionMap.end(); rcit++)
785 rCompositionMap1.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.first));
791 const std::map< std::pair<Idx,Idx>, Idx>& rCompositionMap,
792 std::map<Idx,Idx>& rCompositionMap2)
794 rCompositionMap2.clear();
795 std::map< std::pair<Idx,Idx>, Idx>::const_iterator rcit;
796 for(rcit=rCompositionMap.begin(); rcit!=rCompositionMap.end(); rcit++)
797 rCompositionMap2.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.second));
865 std::pair<Idx,Idx> x12(x1,x2);
868 return x12it->second;
876 std::map< std::pair<Idx,Idx>, Idx>::const_iterator rcit;
878 mArg1Map.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.first));
879 mArg2Map.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.second));
883 std::map< Idx , Idx >::const_iterator x1it= mArg1Map.find(x1);
893 std::map< std::pair<Idx,Idx>, Idx>::const_iterator rcit;
895 mArg1Map.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.first));
896 mArg2Map.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.second));
900 std::map< Idx , Idx >::const_iterator x2it= mArg2Map.find(x2);
#define FD_WPC(cntnow, contdone, message)
#define FAUDES_TYPE_IMPLEMENTATION(ftype, ctype, cbase)
const std::string & Name(void) const
bool Exists(const Idx &rIndex) const
bool DoEqual(const ProductCompositionMap &rOther) const
virtual ~ProductCompositionMap(void)
void DoCopy(const ProductCompositionMap &rSrc)
Idx Arg1State(Idx s12) const
std::map< Idx, Idx > mArg2Map
std::map< Idx, Idx > mArg1Map
const std::map< std::pair< Idx, Idx >, Idx > & StlMap(void) const
ProductCompositionMap(void)
Idx CompState(Idx s1, Idx s2) const
Idx Arg2State(Idx s12) const
std::map< std::pair< Idx, Idx >, Idx > mCompositionMap
std::vector< int >::size_type Position
virtual const T & At(const Position &pos) const
TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const
StateSet::Iterator StatesBegin(void) const
StateSet::Iterator InitStatesBegin(void) const
const TransSet & TransRel(void) const
bool SetTransition(Idx x1, Idx ev, Idx x2)
const EventSet & Alphabet(void) const
std::string MarkedStatesToString(void) const
TransSet::Iterator TransRelBegin(void) const
virtual vGenerator & Move(Type &rGen)
EventSet::Iterator AlphabetBegin(void) const
virtual vGenerator * New(void) const
void ClearStateNames(void)
bool ExistsState(Idx index) const
std::string StateName(Idx index) const
StateSet::Iterator StatesEnd(void) const
TransSet::Iterator TransRelEnd(void) const
void SetMarkedState(Idx index)
virtual void EventAttributes(const EventSet &rEventSet)
bool StateNamesEnabled(void) const
StateSet::Iterator InitStatesEnd(void) const
EventSet::Iterator AlphabetEnd(void) const
StateSet CoaccessibleSet(void) const
bool ExistsMarkedState(Idx index) const
std::string AlphabetToString(void) const
std::string UniqueStateName(const std::string &rName) const
void InjectAlphabet(const EventSet &rNewalphabet)
bool Exists(const T &rElem) const
bool EqualAttributes(const TBaseSet &rOtherSet) const
void Product(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void aParallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void aProduct(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void Parallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void SetComposedStateNames(const Generator &rGen1, const Generator &rGen2, const std::map< std::pair< Idx, Idx >, Idx > &rCompositionMap, Generator &rGen12)
void RemoveNonCoaccessibleOut(Generator &g)
void CompositionMap1(const std::map< std::pair< Idx, Idx >, Idx > &rCompositionMap, std::map< Idx, Idx > &rCompositionMap1)
void ParallelLive(const GeneratorVector &rGenVec, Generator &rResGen)
std::string ToStringInteger(Int number)
void CompositionMap2(const std::map< std::pair< Idx, Idx >, Idx > &rCompositionMap, std::map< Idx, Idx > &rCompositionMap2)
AutoRegisterType< ProductCompositionMap > gRtiProductCompositionMap("ProductCompositionMap")
std::string CollapsString(const std::string &rString, unsigned int len)
libFAUDES 2.34d
--- 2026.03.11
--- c++ api documentaion by doxygen
|