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     pResGen->
Move(rResGen);
 
   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);
 
   94     FD_DF(
"ParallelLive() cnt " << i << 
" certconf trans #" << rResGen.
TransRel().
Size());
 
   96     FD_DF(
"ParallelLive() cnt " << i << 
" parallel trans #" << rResGen.
TransRel().
Size());
 
  106   FD_DF(
"aParallel(...)");
 
  113   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  114     pResGen= rResGen.
New();
 
  127   if(pResGen != &rResGen) {
 
  128     pResGen->
Move(rResGen);
 
  132   FD_DF(
"aParallel(...): done");
 
  150   if(rGenVec.
Size()==0) {
 
  155   if(rGenVec.
Size()==1) {
 
  156     rResGen=rGenVec.
At(0);
 
  187   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  188     pResGen= rResGen.
New();
 
  201   if(pResGen != &rResGen) {
 
  202     pResGen->
Move(rResGen);
 
  229   Parallel(rGen1,rGen2,rCompositionMap,rResGen);
 
  252   StateSet::Iterator sit;
 
  265   std::map< std::pair<Idx,Idx>, 
Idx>& rCompositionMap, 
 
  269   FD_DF(
"Parallel(" << &rGen1 << 
"," << &rGen2 << 
")");
 
  301   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  302     pResGen= rResGen.
New();
 
  306   rCompositionMap.clear();
 
  309   EventSet::Iterator eit;
 
  316   FD_DF(
"Parallel: inserted indices in rResGen.alphabet( " 
  328   FD_DF(
"Parallel: shared events: " << sharedalphabet.
ToString());
 
  331   std::stack< std::pair<Idx,Idx> > todo;
 
  333   std::pair<Idx,Idx> currentstates, newstates;
 
  336   StateSet::Iterator lit1,lit2;
 
  338   std::map< std::pair<Idx,Idx>, 
Idx>::iterator rcit;
 
  341   FD_DF(
"Parallel: adding all combinations of initial states to todo:");
 
  344       newstates = std::make_pair(*lit1, *lit2);
 
  346       rCompositionMap[newstates] = tmpstate;
 
  347       FD_DF(
"Parallel:   (" << *lit1 << 
"|" << *lit2 << 
") -> "  
  348           << rCompositionMap[newstates]);
 
  350   if(!gen1live.
Exists(newstates.first)) 
continue;
 
  351   if(!gen2live.
Exists(newstates.second)) 
continue;
 
  353       todo.push(newstates);
 
  354       FD_DF(
"Parallel:   todo push: (" << newstates.first << 
"|"  
  355          << newstates.second << 
") -> "  
  356          << rCompositionMap[newstates]);
 
  361   FD_DF(
"Parallel: processing reachable states:");
 
  362   while (! todo.empty()) {
 
  366     FD_WPC(rCompositionMap.size(),rCompositionMap.size()+todo.size(),
"Parallel(): processing"); 
 
  368     currentstates = todo.top();
 
  370     FD_DF(
"Parallel: processing (" << currentstates.first << 
"|"  
  371         << currentstates.second << 
") -> "  
  372         << rCompositionMap[currentstates]);
 
  377     for(; tit1 != tit1_end; ++tit1) {
 
  379       if(! sharedalphabet.
Exists(tit1->Ev)) {
 
  380         FD_DF(
"Parallel:   exists only in rGen1");
 
  381         newstates = std::make_pair(tit1->X2, currentstates.second);
 
  383         rcit = rCompositionMap.find(newstates);
 
  384         if(rcit == rCompositionMap.end()) {
 
  386           rCompositionMap[newstates] = tmpstate;
 
  389       dopush= gen1live.
Exists(newstates.first) && gen2live.
Exists(newstates.second);
 
  392             todo.push(newstates);
 
  393             FD_DF(
"Parallel:   todo push: (" << newstates.first << 
"|"  
  394                 << newstates.second << 
") -> "  
  395                 << rCompositionMap[newstates]);
 
  398           tmpstate = rcit->second;
 
  400         pResGen->
SetTransition(rCompositionMap[currentstates], tit1->Ev, tmpstate);
 
  401         FD_DF(
"Parallel:   add transition to new generator: "  
  402             << rCompositionMap[currentstates] << 
"-" << tit1->Ev << 
"-"  
  407         FD_DF(
"Parallel:   common event");
 
  410         tit2_end = rGen2.
TransRelEnd(currentstates.second, tit1->Ev);
 
  411         for (; tit2 != tit2_end; ++tit2) {
 
  412           newstates = std::make_pair(tit1->X2, tit2->X2);
 
  414           rcit = rCompositionMap.find(newstates);
 
  415           if (rcit == rCompositionMap.end()) {
 
  417             rCompositionMap[newstates] = tmpstate;
 
  420         dopush= gen1live.
Exists(newstates.first) && gen2live.
Exists(newstates.second);
 
  423               todo.push(newstates);
 
  424               FD_DF(
"Parallel:   todo push: (" << newstates.first << 
"|"  
  425                   << newstates.second << 
") -> "  
  426                   << rCompositionMap[newstates]);
 
  429             tmpstate = rcit->second;
 
  433           FD_DF(
"Parallel:   add transition to new generator: "  
  434               << rCompositionMap[currentstates] << 
"-"  
  435               << tit1->Ev << 
"-" << tmpstate);
 
  442     tit2_end = rGen2.
TransRelEnd(currentstates.second);
 
  443     for (; tit2 != tit2_end; ++tit2) {
 
  444       if (! sharedalphabet.
Exists(tit2->Ev)) {
 
  445         FD_DF(
"Parallel:   exists only in rGen2");
 
  446         newstates = std::make_pair(currentstates.first, tit2->X2);
 
  448         rcit = rCompositionMap.find(newstates);
 
  449         if(rcit == rCompositionMap.end()) {
 
  451           rCompositionMap[newstates] = tmpstate;
 
  454       dopush= gen1live.
Exists(newstates.first) && gen2live.
Exists(newstates.second);
 
  457             todo.push(newstates);
 
  458             FD_DF(
"Parallel:   todo push: (" << newstates.first << 
"|"  
  459                 << newstates.second << 
") -> "  
  460                 << rCompositionMap[newstates]);
 
  463           tmpstate = rcit->second;
 
  467         FD_DF(
"Parallel:   add transition to new generator: "  
  468             << rCompositionMap[currentstates] << 
"-"  
  469             << tit2->Ev << 
"-" << tmpstate);
 
  475   rcit=rCompositionMap.begin();
 
  476   while(rcit!=rCompositionMap.end()) {    
 
  485   if(pResGen != &rResGen) {
 
  499   std::map< std::pair<Idx,Idx>, 
Idx>& rCompositionMap, 
 
  502   FD_DF(
"ParallelLive(" << &rGen1 << 
"," << &rGen2 << 
")");
 
  503   Parallel(rGen1,rGen2,rCompositionMap,rResGen,
true);
 
  511   FD_DF(
"ParallelLive(" << &rGen1 << 
"," << &rGen2 << 
")");
 
  512   std::map< std::pair<Idx,Idx>, 
Idx> cmap;
 
  513   Parallel(rGen1,rGen2,cmap,rResGen,
true);
 
  518   std::map< std::pair<Idx,Idx>, 
Idx> cmap;
 
  520   Product(rGen1, rGen2, cmap, rResGen);
 
  536   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  537     pResGen= rResGen.
New();
 
  550   if(pResGen != &rResGen) {
 
  551     pResGen->
Move(rResGen);
 
  570   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  571     pResGen= rResGen.
New();
 
  584   if(pResGen != &rResGen) {
 
  585     pResGen->
Move(rResGen);
 
  594   std::map< std::pair<Idx,Idx>, 
Idx>& rCompositionMap, 
 
  601   Product(rGen1,rGen2,rCompositionMap,rResGen);
 
  608   std::map< std::pair<Idx,Idx>, 
Idx>::iterator rit;
 
  609   for(rit=rCompositionMap.begin(); rit!=rCompositionMap.end(); ++rit){
 
  619   std::map< std::pair<Idx,Idx>, 
Idx>& rCompositionMap, 
 
  622   FD_DF(
"Product(" << rGen1.
Name() << 
"," << rGen2.
Name() << 
")");
 
  623   FD_DF(
"Product(): state counts " << rGen1.
Size() << 
"/" << rGen2.
Size());
 
  627   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  628     pResGen= rResGen.
New();
 
  631   rCompositionMap.clear();
 
  635   FD_DF(
"Product: shared alphabet: " 
  639   std::stack< std::pair<Idx,Idx> > todo;
 
  641   std::pair<Idx,Idx> currentstates, newstates;
 
  645   StateSet::Iterator lit1, lit2;
 
  647   std::map< std::pair<Idx,Idx>, 
Idx>::iterator rcit;
 
  650   FD_DF(
"Product: adding all combinations of initial states to todo:");
 
  655       currentstates = std::make_pair(*lit1, *lit2);
 
  656       todo.push(currentstates);
 
  657       rCompositionMap[currentstates] = pResGen->
InsInitState();
 
  658       FD_DF(
"Product:   (" << *lit1 << 
"|" << *lit2 << 
") -> "  
  659           << rCompositionMap[currentstates]);
 
  664   FD_DF(
"Product: processing reachable states:");
 
  665   while (! todo.empty()) {
 
  669     FD_WPC(rCompositionMap.size(),rCompositionMap.size()+todo.size(),
"Product(): processing"); 
 
  671     currentstates = todo.top();
 
  673     FD_DF(
"Product: processing (" << currentstates.first << 
"|"  
  674         << currentstates.second << 
") -> " << rCompositionMap[currentstates]);
 
  679     tit2_end = rGen2.
TransRelEnd(currentstates.second);
 
  680     while((tit1 != tit1_end) && (tit2 != tit2_end)) {
 
  682       if(tit1->Ev < tit2->Ev) {
 
  687       if(tit1->Ev > tit2->Ev) {
 
  693       while(tit2 != tit2_end) {
 
  695         if(tit1->Ev != tit2->Ev) 
break;
 
  697         newstates = std::make_pair(tit1->X2, tit2->X2);
 
  699         rcit = rCompositionMap.find(newstates);
 
  700         if(rcit == rCompositionMap.end()) {
 
  701           todo.push(newstates);
 
  703           rCompositionMap[newstates] = tmpstate;
 
  705           FD_DF(
"Product: todo push: (" << newstates.first << 
"|"  
  706       << newstates.second << 
") -> " << rCompositionMap[newstates] << 
" todo #" << todo.size());
 
  708           tmpstate = rcit->second;
 
  711         pResGen->
SetTransition(rCompositionMap[currentstates], tit1->Ev, tmpstate);
 
  712         FD_DF(
"Product: add transition to new generator: "  
  713             << rCompositionMap[currentstates] << 
"-" << tit1->Ev << 
"-" << tmpstate);
 
  720         if(tit1->Ev == tit2_begin->Ev) 
 
  727   rcit=rCompositionMap.begin();
 
  728   while(rcit!=rCompositionMap.end()) {    
 
  737   if(pResGen != &rResGen) {
 
  747   FD_DF(
"Product(...): done");
 
  755   const std::map< std::pair<Idx,Idx>, 
Idx>& rCompositionMap, 
 
  758   std::map< std::pair<Idx,Idx>, 
Idx>::const_iterator rcit;
 
  759   for(rcit=rCompositionMap.begin(); rcit!=rCompositionMap.end(); rcit++) {
 
  760     Idx x1=rcit->first.first;
 
  761     Idx x2=rcit->first.second;
 
  762     Idx x12=rcit->second;
 
  768     std::string name12= name1 + 
"|" + name2;
 
  777   const std::map< std::pair<Idx,Idx>, 
Idx>& rCompositionMap, 
 
  778   std::map<Idx,Idx>& rCompositionMap1)
 
  780   rCompositionMap1.clear();
 
  781   std::map< std::pair<Idx,Idx>, 
Idx>::const_iterator rcit;
 
  782   for(rcit=rCompositionMap.begin(); rcit!=rCompositionMap.end(); rcit++) 
 
  783     rCompositionMap1.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.first));
 
  789   const std::map< std::pair<Idx,Idx>, 
Idx>& rCompositionMap, 
 
  790   std::map<Idx,Idx>& rCompositionMap2)
 
  792   rCompositionMap2.clear();
 
  793   std::map< std::pair<Idx,Idx>, 
Idx>::const_iterator rcit;
 
  794   for(rcit=rCompositionMap.begin(); rcit!=rCompositionMap.end(); rcit++) 
 
  795     rCompositionMap2.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.second));
 
  860   std::pair<Idx,Idx> x12(x1,x2);
 
  863   return x12it->second;
 
  871     std::map< std::pair<Idx,Idx>, 
Idx>::const_iterator rcit;
 
  873       mArg1Map.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.first));
 
  874       mArg2Map.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.second));
 
  878   std::map< Idx , Idx >::const_iterator x1it=
mArg1Map.find(x1);
 
  888     std::map< std::pair<Idx,Idx>, 
Idx>::const_iterator rcit;
 
  890       mArg1Map.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.first));
 
  891       mArg2Map.insert(std::pair<Idx,Idx>(rcit->second,rcit->first.second));
 
  895   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)
 
Idx Arg1State(Idx s12) const
 
std::map< Idx, Idx > mArg2Map
 
std::map< Idx, Idx > mArg1Map
 
void DoAssign(const ProductCompositionMap &rSrc)
 
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
 
virtual void Move(vGenerator &rGen)
 
std::string MarkedStatesToString(void) const
 
TransSet::Iterator TransRelBegin(void) const
 
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)
 
std::string CollapsString(const std::string &rString, unsigned int len)