70   mpStateSymbolTable(&mStateSymbolTable),
 
   71   mpEventSymbolTable(GlobalEventSymbolTablep()),
 
   73   mStateNamesEnabled(msStateNamesEnabledDefault),  
 
   74   mReindexOnWrite(msReindexOnWriteDefault),  
 
   81   pAlphabetPrototype(&AlphabetVoid()),
 
   82   pStatesPrototype(&StatesVoid()),
 
   83   pTransRelPrototype(&TransRelVoid()),
 
   84   pGlobalPrototype(&GlobalVoid())
 
   87   FD_DG(
"vGenerator(" << 
this << 
")::vGenerator()");
 
  105   mpStateSymbolTable(&mStateSymbolTable),
 
  106   mpEventSymbolTable(GlobalEventSymbolTablep()),
 
  108   mStateNamesEnabled(msStateNamesEnabledDefault),  
 
  109   mReindexOnWrite(msReindexOnWriteDefault),  
 
  114   mpGlobalAttribute(0),
 
  116   pAlphabetPrototype(&AlphabetVoid()),
 
  117   pStatesPrototype(&StatesVoid()),
 
  118   pTransRelPrototype(&TransRelVoid()),
 
  119   pGlobalPrototype(&GlobalVoid())
 
  122   FD_DG(
"vGenerator(" << 
this << 
")::vGenerator(" << &rOtherGen << 
")");
 
  139   mpStateSymbolTable(&mStateSymbolTable),
 
  140   mpEventSymbolTable(GlobalEventSymbolTablep()),
 
  142   mStateNamesEnabled(msStateNamesEnabledDefault),  
 
  143   mReindexOnWrite(msReindexOnWriteDefault),  
 
  148   mpGlobalAttribute(0),
 
  150   pAlphabetPrototype(&AlphabetVoid()),
 
  151   pStatesPrototype(&StatesVoid()),
 
  152   pTransRelPrototype(&TransRelVoid()),
 
  153   pGlobalPrototype(&GlobalVoid())
 
  156   FD_DG(
"vGenerator(" << 
this << 
")::vGenerator(" << rFileName << 
")");
 
  170   Read(rFileName,
"Generator");
 
  177   FD_DG(
"vGenerator(" << 
this << 
")::New()");
 
  189   FD_DG(
"vGenerator(" << 
this << 
")::Copy()");
 
  197   return dynamic_cast< const vGenerator* 
> (pOther);
 
  211     const TransSet* pNewTransRelPrototype) {
 
  212   FD_DG(
"vGenerator(" << 
this << 
")::ConfigureAtributes(..)");
 
  217   FD_DG(
"vGenerator(" << 
this << 
")::ConfigureAtributes(): done");
 
  264   FD_DG(
"vGenerator(" << 
this << 
")::DoAssign(" << &rGen << 
")");
 
  266   if(&rGen==
this) 
return;
 
  284 #ifdef FAUDES_DEBUG_CODE 
  286     FD_DG(
"vGenerator()::Copy(): invalid generator");
 
  291   FD_DG(
"vGenerator(" << 
this << 
")::DoAssign(" << &rGen << 
"): done");
 
  296   FD_DG(
"vGenerator(" << 
this << 
")::Assign([type] " << &rSrc << 
")");
 
  298   if(&rSrc==
this) 
return *
this;
 
  312   FD_DG(
"vGenerator(" << 
this << 
")::Assign(" << &rGen << 
")");
 
  329 #ifdef FAUDES_DEBUG_CODE 
  331     FD_DG(
"vGenerator()::Copy(): invalid generator");
 
  342   FD_DG(
"vGenerator(" << 
this << 
")::Move(" << &rGen << 
")");
 
  349   if(
typeid(*pt)!=
typeid(*opt)) tmm=
true;
 
  352   if(
typeid(*pt)!=
typeid(*opt)) tmm=
true;
 
  355   if(
typeid(*pt)!=
typeid(*opt)) tmm=
true;
 
  358   if(
typeid(*pt)!=
typeid(*opt)) tmm=
true;
 
  361     FD_DG(
"vGenerator(" << 
this << 
")::Move(" << &rGen << 
"): using std copy");
 
  402   FD_DG(
"vGenerator(" << 
this << 
")::operator = " << &rOtherGen);
 
  403   FD_DG(
"vGenerator(" << 
this << 
")::operator =  types " << 
typeid(*this).name() << 
" <= " << 
typeid(rOtherGen).name());
 
  409   FD_DG(
"vGenerator(" << 
this << 
")::Version(" << version << 
")");
 
  410   std::ostringstream o;
 
  417   FD_DG(
"vGenerator(" << 
this << 
")::Version(" << rVersion << 
")");
 
  420     std::stringstream errstr;
 
  421     errstr << 
"Destination must not match source.";
 
  422     throw Exception(
"vGenerator::Version(string)", errstr.str(), 96);
 
  427   EventSet::Iterator eit;
 
  428   StateSet::Iterator lit;
 
  430   std::map<Idx,Idx> eventoldnewmap;
 
  435     eventoldnewmap[*eit] = newevent;
 
  461   FD_DG(
"vGenerator(" << 
this << 
")::Version(" << rPattern << 
", " << rReplacement << 
", ...)");
 
  464     std::stringstream errstr;
 
  465     errstr << 
"Destination must not match source.";
 
  466     throw Exception(
"vGenerator::Version(string,string)", errstr.str(), 96);
 
  469   if(rPattern.empty()) {
 
  474   if(rPattern==rReplacement) {
 
  482   EventSet::Iterator eit;
 
  483   StateSet::Iterator lit;
 
  485   std::map<Idx,Idx> eventoldnewmap;
 
  487   std::string newstring;
 
  488   std::string::size_type pos = 0;
 
  489   int patternlength=rPattern.size();
 
  490   int replacementlength=rReplacement.size();
 
  495     while( (pos = newstring.find(rPattern, pos)) != std::string::npos ) {
 
  496         newstring.replace(pos, patternlength, rReplacement);
 
  498         pos=pos+replacementlength;
 
  501     eventoldnewmap[*eit] = newevent;
 
  507   while( (pos = newstring.find(rPattern, pos)) != std::string::npos ) {
 
  508     newstring.replace(pos, patternlength, rReplacement);
 
  509     pos=pos+replacementlength;
 
  511   rResGen.
Name(newstring);
 
  535   FD_DG(
"vGenerator(" << 
this << 
")::Valid()");
 
  543   StateSet::Iterator lit;
 
  560   NameSet::Iterator eit;
 
  580   FD_DG(
"vGenerator(" << 
this << 
")::Clear()");
 
  588   FD_DG(
"vGenerator(" << 
this << 
")::Clear(): done");
 
  672   FD_DG(
"vGenerator::ClearMinStateIndexMap()");
 
  686   FD_DG(
"vGenerator::SetMinStateIndexMap()");
 
  691   StateSet::Iterator it;
 
  729 #ifdef FAUDES_DEBUG_CONTAINER 
  730   std::map<Idx,Idx>::const_iterator _it;
 
  732     FD_DC(
"vGenerator::MinStateIndexMap: " << _it->first
 
  733     << 
" <-- " << 
SStr(_it->second));
 
  741   std::map<Idx,Idx>::const_iterator minit;
 
  744     return minit->second;
 
  765   StateSet::Iterator sit;
 
  842   FD_DG(
"vGenerator(" << 
this << 
")::EventName("  
  843       << index << 
",\"" << rName << 
"\")");
 
  844 #ifdef FAUDES_CHECKED 
  846     std::stringstream errstr;
 
  847     errstr << 
"event \"" << index << 
"\" not found in generator \"" 
  849     throw Exception(
"vGenerator::EventName(name)", errstr.str(), 89);
 
  857   std::string name=rName;
 
  858   if(name==
"") name=
"ev";
 
  866   FD_DG(
"vGenerator(" << 
this << 
")::EventRename(" << 
EStr(event) << 
", " << rNewName << 
")");
 
  867 #ifdef FAUDES_CHECKED 
  869     std::stringstream errstr;
 
  870     errstr << 
"event \"" << 
event << 
"\" not found in generator \"" 
  872     throw Exception(
"vGenerator::EventReame(name)", errstr.str(), 89);
 
  880   if(newidx==event) 
return true;
 
  888     if(tit->Ev!=event) {++tit; 
continue;}
 
  895   for(tit=newtrans->
Begin(); tit!=newtrans->
End(); tit++) {
 
  904   FD_DG(
"vGenerator(" << 
this << 
")::EventRename(" << 
EStr(event) << 
", " << rNewName << 
"):OK");
 
  952   FD_DG(
"vGenerator(" << 
this << 
")::StateName("  
  953       << index << 
",\"" << rName << 
"\")");
 
  954 #ifdef FAUDES_CHECKED 
  956     std::stringstream errstr;
 
  957     errstr << 
"state name \"" << rName << 
"\" not found in generator \"" 
  959     throw Exception(
"vGenerator::StateName(name)", errstr.str(), 90);
 
  968   FD_DG(
"vGenerator(" << 
this << 
")::ClearStateNames()");
 
  975   FD_DG(
"Generator(" << 
this << 
")::ClrStateName(\"" << index << 
"\")");
 
  976 #ifdef FAUDES_CHECKED 
  978     std::stringstream errstr;
 
  979     errstr << 
"state \"" << index << 
"\" not found in generator \"" 
  981     throw Exception(
"vGenerator::ClrStateName(name)", errstr.str(), 90);
 
  989   FD_DG(
"vGenerator(" << 
this << 
")::ClrStateName(\"" << rName << 
"\")");
 
 1013   FD_DG(
"vGenerator(" << 
this << 
")::SetDefaultStateNames()");
 
 1015   StateSet::Iterator it;
 
 1025   FD_DG(
"vGenerator(" << 
this << 
")::EnforceStateNames(temp)");
 
 1026   StateSet::Iterator it;
 
 1037   std::string name=rName;
 
 1038   if(name==
"") name=
"st";
 
 1105    const std::string& rX1, 
const std::string& rEv, 
const std::string& rX2)
 const  
 1122   const std::string& rX1, 
const std::string& rEv, 
const std::string& rX2)
 const  
 1168   FD_DG(
"vGenerator::InjectAlphabet()  " << rNewAlphabet.
ToString());
 
 1169 #ifdef FAUDES_CHECKED 
 1171     std::stringstream errstr;
 
 1172     errstr << 
"symboltable mismatch aka not implemented" << std::endl;
 
 1173     throw Exception(
"vGenerator::InjectAlphabet", errstr.str(), 88);
 
 1182   FD_DG(
"vGenerator::RestrictAlphabet()  " << rNewAlphabet.
ToString());
 
 1183 #ifdef FAUDES_CHECKED 
 1185     std::stringstream errstr;
 
 1186     errstr << 
"symboltable mismatch aka not implemented" << std::endl;
 
 1187     throw Exception(
"vGenerator::RestrictAlphabet", errstr.str(), 88);
 
 1196   FD_DG(
"vGenerator(" << 
this << 
")::InsEvent(" << index << 
")");
 
 1202   FD_DG(
"vGenerator(" << 
this << 
")::InsEvent(\"" << rName << 
"\")");
 
 1213   FD_DG(
"vGenerator(" << 
this << 
")::DelEvent(" << index << 
")");
 
 1220   FD_DG(
"vGenerator(" << 
this << 
")::DelEvent(\"" << rName << 
"\")");
 
 1228   FD_DG(
"vGenerator(" << 
this << 
")::DelEvents(\""  
 1230   EventSet::Iterator it;
 
 1231   for (it = rEvents.
Begin(); it != rEvents.
End(); ++it) {
 
 1238   FD_DG(
"vGenerator(" << 
this << 
")::DelEventFromAlphabet("  
 1245   FD_DG(
"vGenerator(" << 
this << 
")::InsState()");
 
 1251   FD_DG(
"vGenerator(" << 
this << 
")::InsState(" << index << 
")");
 
 1257   FD_DG(
"vGenerator(" << 
this << 
")::InsState(\"" << rName << 
"\")");
 
 1270   FD_DG(
"vGenerator(" << 
this << 
")::InjectState(\"" << 
SStr(index) << 
"\")");
 
 1276   FD_DG(
"vGenerator(" << 
this << 
")::InjectStates(" << rNewStates.
ToString() << 
")");
 
 1285   FD_DG(
"vGenerator(" << 
this << 
")::InsInitState()");
 
 1294   FD_DG(
"vGenerator(" << 
this << 
")::InsInitState(\"" << rName << 
"\")");
 
 1316   FD_DG(
"vGenerator(" << 
this << 
")::InsMarkedState()");
 
 1332   FD_DG(
"vGenerator(" << 
this << 
")::InsMarkedState(\"" << rName << 
"\")");
 
 1348   FD_DG(
"vGenerator(" << 
this << 
")::DelState(" << index << 
")");
 
 1363   FD_DG(
"vGenerator(" << 
this << 
")::DelState(\"" << rName << 
"\")");
 
 1366 #ifdef FAUDES_CHECKED 
 1368     std::stringstream errstr;
 
 1369     errstr << 
"state name \"" << rName << 
"\" not found in generator \"" 
 1371     throw Exception(
"vGenerator::DelState(name)", errstr.str(), 90);
 
 1379   FD_DG(
"vGenerator(" << 
this << 
")::DelStates("  
 1381   StateSet::Iterator cit;
 
 1382   StateSet::Iterator cit_end;
 
 1384   for (cit = rDelStates.
Begin(); cit != rDelStates.
End(); ++cit) {
 
 1397   FD_DG(
"vGenerator(" << 
this << 
")::DelStateFromStates(" << index << 
")");
 
 1404   FD_DG(
"vGenerator(" << 
this << 
")::DelState(" << *pos << 
")");
 
 1410   FD_DG(
"vGenerator(" << 
this << 
")::RestrictStates("  
 1413   StateSet::Iterator cit;
 
 1414   StateSet::Iterator cit_end;
 
 1430   FD_DG(
"vGenerator(" << 
this << 
")::SetInitState(" << index << 
")");
 
 1431 #ifdef FAUDES_CHECKED 
 1433     std::stringstream errstr;
 
 1434     errstr << 
"vGenerator::SetMarkedState: index " << index 
 
 1435      << 
" not in stateset";
 
 1436     throw Exception(
"vGenerator::SetInitState(..)", errstr.str(), 91);
 
 1444   FD_DG(
"vGenerator(" << 
this << 
")::SetInitState(\"" << rName << 
"\")");
 
 1446 #ifdef FAUDES_CHECKED 
 1448     std::stringstream errstr;
 
 1449     errstr << 
"State name \"" << rName << 
"\" not known in Generator";
 
 1450     throw Exception(
"vGenerator::SetInitState(..)", errstr.str(), 90);
 
 1458   FD_DG(
"vGenerator(" << 
this << 
")::InjectInitStates("  
 1459   << rNewInitStates.
ToString() << 
")");
 
 1466   FD_DG(
"vGenerator(" << 
this << 
")::ClrInitState(" << index << 
")");
 
 1467 #ifdef FAUDES_CHECKED 
 1469     std::stringstream errstr;
 
 1470     errstr << 
"vGenerator::SetMarkedState: index " << index 
 
 1471      << 
" not in stateset";
 
 1472     throw Exception(
"vGenerator::ClrInitState(..)", errstr.str(), 91);
 
 1480   FD_DG(
"vGenerator(" << 
this << 
")::ClrInitState(\"" << rName << 
"\")");
 
 1482 #ifdef FAUDES_CHECKED 
 1484     std::stringstream errstr;
 
 1485     errstr << 
"State name \"" << rName << 
"\" not known in Generator";
 
 1486     throw Exception(
"vGenerator::ClrInitState(..)", errstr.str(), 90);
 
 1494   FD_DG(
"vGenerator(" << 
this << 
")::ClrInitState(" << *pos << 
")");
 
 1505   FD_DG(
"vGenerator(" << 
this << 
")::SetMarkedState(" << index << 
")");
 
 1506 #ifdef FAUDES_CHECKED 
 1508     std::stringstream errstr;
 
 1509     errstr << 
"vGenerator::SetMarkedState: index " << index 
 
 1510      << 
" not in stateset";
 
 1511     throw Exception(
"vGenerator::SetMarkedState(..)", errstr.str(), 91);
 
 1519   FD_DG(
"vGenerator(" << 
this << 
")::SetMarkedState(\"" << rName << 
"\")");
 
 1521 #ifdef FAUDES_CHECKED 
 1523     std::stringstream errstr;
 
 1524     errstr << 
"State name \"" << rName << 
"\" not known in Generator";
 
 1525     throw Exception(
"vGenerator::SetMarkedState(..)", errstr.str(), 90);
 
 1533   FD_DG(
"vGenerator(" << 
this << 
")::InjectMarkedStates("  
 1534   << rNewMarkedStates.
ToString() << 
")");
 
 1541   FD_DG(
"vGenerator(" << 
this << 
")::ClrMarkedState(" << index << 
")");
 
 1542 #ifdef FAUDES_CHECKED 
 1544     std::stringstream errstr;
 
 1545     errstr << 
"vGenerator::ClrMarkedState: index " << index 
 
 1546      << 
" not in stateset";
 
 1547     throw Exception(
"vGenerator::ClrMarkedState(..)", errstr.str(), 91);
 
 1555   FD_DG(
"vGenerator(" << 
this << 
")::ClrMarkedState(\"" << rName << 
"\")");
 
 1557 #ifdef FAUDES_CHECKED 
 1559     std::stringstream errstr;
 
 1560     errstr << 
"State name \"" << rName << 
"\" not known in Generator";
 
 1561     throw Exception(
"vGenerator::ClrMarkedState(..)", errstr.str(), 90);
 
 1569   FD_DG(
"vGenerator(" << 
this << 
")::ClrMarkedState(" << *pos << 
")");
 
 1580   FD_DG(
"vGenerator::InjectTransition(" << 
TStr(rTrans) << 
")");
 
 1586   FD_DG(
"vGenerator::InjectTransRel(...)");
 
 1593   FD_DG(
"vGenerator(" << 
this << 
")::SetTransition(\"" 
 1594   << rX1 << 
"\", \"" << rEv << 
"\", \"" << rX2 << 
"\")");
 
 1597 #ifdef FAUDES_CHECKED 
 1599     FD_ERR(
"vGenerator::SetTransition: state " << rX1 
 
 1600      << 
" not in stateset");
 
 1601     std::stringstream errstr;
 
 1602     errstr << 
"State name " << rX1 << 
" not found in Generator";
 
 1603     throw Exception(
"vGenerator::SetTransition(..)", errstr.str(), 90);
 
 1606     FD_ERR(
"vGenerator::SetTransition: event " << rEv << 
" not in alphabet");
 
 1607     std::stringstream errstr;
 
 1608     errstr << 
"Event name " << rEv << 
" not found in event domain of Generator";
 
 1609     throw Exception(
"vGenerator::SetTransition(..)", errstr.str(), 95);
 
 1612     FD_ERR(
"vGenerator::SetTransition: state " << rX2 << 
" not in stateset");
 
 1613     std::stringstream errstr;
 
 1614     errstr << 
"State name " << rX2 << 
" not found in Generator";
 
 1615     throw Exception(
"vGenerator::SetTransition(..)", errstr.str(), 90);
 
 1629   FD_DG(
"vGenerator(" << 
this << 
")::SetTransition(" << rTransition.
X1 << 
","  
 1630   << rTransition.
Ev << 
"," << rTransition.
X2 << 
")");
 
 1631 #ifdef FAUDES_CHECKED 
 1633     std::stringstream errstr;
 
 1634     errstr << 
"vGenerator::SetTransition: state " << 
SStr(rTransition.
X1) 
 
 1635      << 
" not in stateset";
 
 1636     throw Exception(
"vGenerator::SetTransition(..)", errstr.str(), 95);
 
 1639     std::stringstream errstr;
 
 1640     errstr << 
"vGenerator::SetTransition: event " << 
EStr(rTransition.
Ev) 
 
 1641      << 
" not in alphabet ";
 
 1642     throw Exception(
"vGenerator::SetTransition(..)", errstr.str(), 95);
 
 1645     std::stringstream errstr;
 
 1646     errstr << 
"vGenerator::SetTransition: state " << 
SStr(rTransition.
X2) 
 
 1647      << 
" not in stateset";
 
 1648     throw Exception(
"vGenerator::SetTransition(..)", errstr.str(), 95);
 
 1658   FD_DG(
"vGenerator(" << 
this << 
")::ClrTransition("  
 1659   << x1 << 
"," << ev << 
"," << x2 << 
")");
 
 1665   FD_DG(
"vGenerator(" << 
this << 
")::ClrTransition(" << 
TStr(rTransition) << 
")");
 
 1671   FD_DG(
"vGenerator(" << 
this << 
")::ClrTransition(" << 
TStr(*it)<< 
")" );
 
 1677   FD_DG(
"vGenerator(" << 
this << 
")::ClrTransition("  
 1678   << x1 << 
"," << ev << 
")");
 
 1684   FD_DG(
"vGenerator(" << 
this << 
")::ClrTransition("  
 1691   FD_DG(
"vGenerator(" << 
this << 
")::TransAttribute("  
 1692   << 
TStr(rTrans) << 
",\"" << rAttr.
ToString() << 
"\")");
 
 1720   FD_DG(
"vGenerator(" << 
this << 
")::EventAttribute("  
 1728   FD_DG(
"vGenerator(" << 
this << 
")::EventAttributes("  
 1735   FD_DG(
"vGenerator(" << 
this << 
")::ClrEventAttribute(\"" << 
EStr(index) << 
"\")");
 
 1741   FD_DG(
"vGenerator(" << 
this << 
")::StateAttribute("  
 1748   FD_DG(
"vGenerator(" << 
this << 
")::ClrStateAttribute(\"" << index << 
"\")");
 
 1844   FD_DG(
"vGenerator(" << 
this << 
")::GlobalAttribute("  
 1849   std::stringstream errstr;
 
 1850   errstr << 
"cannot cast global attribute " << rAttr.
ToString() << 
" for generator " << 
Name();
 
 1851   throw Exception(
"vGenerator::GlobalAttribute", errstr.str(), 63);
 
 1856   FD_DG(
"vGenerator(" << 
this << 
")::GlobalAttributeTry("  
 1863   FD_DG(
"vGenerator(" << 
this << 
")::GlobalAttribute()");
 
 1869   FD_DG(
"vGenerator(" << 
this << 
")::GlobalAttributep()");
 
 1900     const std::string& rX1, 
const std::string& rEv, 
const std::string& rX2)
 const {
 
 1924     resultset.
Insert(it->Ev);
 
 1980   if(it==it_end) 
return 0;
 
 1982 #ifdef FAUDES_CHECKED 
 1985     std::stringstream errstr;
 
 1986     errstr << 
"successor state does not exist uniquely" << std::endl;
 
 1987     throw Exception(
"vGenerator::SuccessorState", errstr.str(), 92);
 
 1997   std::stack<Idx> todo;
 
 1998   StateSet::Iterator sit;
 
 2006   while(!todo.empty()) {
 
 2011     if(accessibleset.
Exists(x1)) 
continue; 
 
 2013     accessibleset.
Insert(x1);
 
 2017     for(; tit != tit_end; ++tit) 
 
 2022   accessibleset.
Name(
"AccessibleSet");
 
 2023   return accessibleset;
 
 2033     FD_DF(
"vGenerator::accessible: generator is accessible");
 
 2036   FD_DF(
"vGenerator::accessible: generator is accessible but empty");
 
 2043     FD_DF(
"vGenerator::accessible: generator is accessible");
 
 2046   FD_DF(
"vGenerator::accessible: generator is not accessible");
 
 2056   StateSet::Iterator sit;
 
 2057   std::stack<Idx> todo;
 
 2065   while(!todo.empty()) {
 
 2070     if(coaccessibleset.
Exists(x2)) 
continue; 
 
 2072     coaccessibleset.
Insert(x2);
 
 2076     for(; tit != tit_end; ++tit) 
 
 2081   coaccessibleset.
Name(
"CoaccessibleSet");
 
 2082   return coaccessibleset;
 
 2092     FD_DF(
"vGenerator::coaccessible: generator is coaccessible");
 
 2095   FD_DF(
"vGenerator::coaccessible: generator is not coaccessible");
 
 2102     FD_DF(
"vGenerator::coaccessible: generator is coaccessible");
 
 2105   FD_DF(
"vGenerator::coaccessible: generator is not coaccessible");
 
 2111   FD_DF(
"vGenerator::trimset: trim states: "  
 2114   res.
Name(
"TrimSet");
 
 2125   if(accessiblebool && coaccessiblebool) {
 
 2126     FD_DF(
"vGenerator::Trim(): generator is nontrivial");
 
 2129   FD_DF(
"vGenerator::Trim(): generator is trivial");
 
 2139   FD_DF(
"vGenerator::IsTrim(): result " << res);
 
 2146   FD_DF(
"vGenerator::BlockingSet: blocking states: "  
 2158   StateSet::Iterator sit=rStates.
Begin();
 
 2159   StateSet::Iterator sit_end=rStates.
End();
 
 2160   for(;sit!=sit_end;sit++){
 
 2163     if(tit==tit_end) 
break;
 
 2166   return sit==sit_end;
 
 2174   std::stack<Idx> todo;
 
 2177   while(tit!=tit_end){
 
 2178     if(!rSigmaO.
Exists(tit->Ev)) { ++tit; 
continue; }
 
 2187   while(!todo.empty()) {
 
 2192     if(good.
Exists(x2)) 
continue; 
 
 2198     for(; tit != tit_end; ++tit) 
 
 2199       if(tit->X1 != x2) todo.push(tit->X1);
 
 2201   FD_DG(
"IsComplete(" << 
Name() << 
"): done");
 
 2221     StateSet::Iterator sit_end = 
States().
End();
 
 2223     for(; sit!=sit_end; ++sit) {
 
 2224       if(termset.
Exists(*sit)) 
continue;
 
 2227       for (; tit != tit_end; ++tit) {
 
 2228         if(!termset.
Exists(tit->X2)) 
break;
 
 2259     while(tit!=tit_end) {
 
 2260       if(!rSigmaO.
Exists(tit->Ev)) { ++tit; 
continue; } 
 
 2261       if(!domain.
Exists(tit->X2)) { ++tit; 
continue; } 
 
 2268     StateSet::Iterator sit;
 
 2269     std::stack<Idx> todo;
 
 2270     for(sit = target.
Begin(); sit != target.
End(); ++sit) 
 
 2272     while(!todo.empty()) {
 
 2277       if(good.
Exists(x2)) 
continue; 
 
 2283       for(; tit != tit_end; ++tit) 
 
 2284         if(tit->X1 != x2) todo.push(tit->X1);
 
 2288     if(domain <= good) 
break;
 
 2291     domain = domain * good;
 
 2306   FD_DG(
"Generator::TerminalStates(" << 
Name() << 
")");
 
 2312   StateSet::Iterator sit=rStates.
Begin();
 
 2313   StateSet::Iterator sit_end=rStates.
End();
 
 2314   for(;sit!=sit_end;sit++){
 
 2317     if(tit==tit_end) res.
Insert(*sit);
 
 2320   res.
Name(
"TerminalStates");
 
 2336     FD_DG(
"vGenerator::IsDeterministic: more than one initial state");
 
 2344     if ((it1->X1 == it2->X1) && (it1->Ev == it2->Ev)) {
 
 2345       FD_DG(
"IsDeterministic(): at least one state " 
 2346       << 
"contains more than on transition with same event: "  
 2390   std::string label=rLabel;
 
 2392   if(label==
"") label=
"Generator"; 
 
 2393   FD_DG(
"vGenerator(" << 
this << 
")::DoWrite(): section " << label);
 
 2425   std::string label=rLabel;
 
 2426   if(label==
"") label=
"Generator"; 
 
 2427   FD_DG(
"vGenerator(" << 
this << 
")::DoDWrite(): section " << label);
 
 2455   std::string label=rLabel;
 
 2457   if(label==
"") label=
"Generator";
 
 2462   FD_DG(
"vGenerator(" << 
this << 
")::DoXWrite(..): section " << btag.
StringValue() << 
" #" << 
Size());
 
 2534     std::map<Idx,Idx> reversemap;
 
 2535     std::map<Idx,Idx>::const_iterator minit;
 
 2536     StateSet::Iterator sit;
 
 2540     for(minit = reversemap.begin(); minit != reversemap.end(); ++minit) {
 
 2542       std::map<Idx,Idx>::const_iterator conit=minit;
 
 2543       Idx start = conit->first;
 
 2545       for(; conit != reversemap.end(); ++conit) {
 
 2546         if(
StateName(conit->second) != 
"") 
break;
 
 2548         if(conit->first != start+anoncount) 
break;
 
 2555         rTw << start+anoncount-1;
 
 2560       if(minit == reversemap.end()) 
break;
 
 2562       std::string statename = 
StateName(minit->second);
 
 2563       if (statename != 
"") rTw << statename;
 
 2564       else rTw << minit->first;
 
 2575     StateSet::Iterator sit;
 
 2578       StateSet::Iterator conit=sit;
 
 2584         if(*conit != start+anoncount) 
break;
 
 2591         rTw << start+anoncount-1;
 
 2598       std::string statename = 
StateName(*sit);
 
 2599       if((statename != 
"") && symexpl) {
 
 2601       } 
else if(statename != 
"") {
 
 2619   std::string label=rLabel;
 
 2620   if(label.empty()) label=rStateSet.
Name();
 
 2629     std::map<Idx,Idx> reversemap;
 
 2630     std::map<Idx,Idx>::const_iterator minit;
 
 2631     StateSet::Iterator sit;
 
 2632     for (sit = rStateSet.
Begin(); sit != rStateSet.
End(); ++sit) 
 
 2635     for(minit = reversemap.begin(); minit != reversemap.end(); ++minit) {
 
 2637       std::map<Idx,Idx>::const_iterator conit=minit;
 
 2638       Idx start = conit->first;
 
 2640       for(; conit != reversemap.end(); ++conit) {
 
 2641         if(
StateName(conit->second) != 
"") 
break;
 
 2643         if(conit->first != start+anoncount) 
break;
 
 2650         rTw << start+anoncount-1;
 
 2655       if(minit == reversemap.end()) 
break;
 
 2657       std::string statename = 
StateName(minit->second);
 
 2658       if (statename != 
"") rTw << statename;
 
 2659       else rTw << minit->first;
 
 2669     StateSet::Iterator sit;
 
 2670     for(sit = rStateSet.
Begin(); sit != rStateSet.
End(); ++sit) {
 
 2672       StateSet::Iterator conit=sit;
 
 2675       for(; conit != rStateSet.
End(); ++conit) {
 
 2678         if(*conit != start+anoncount) 
break;
 
 2685         rTw << start+anoncount-1;
 
 2690       if(sit == rStateSet.
End()) 
break;
 
 2692       std::string statename = 
StateName(*sit);
 
 2693       if (statename != 
"") rTw << statename;
 
 2708   StateSet::Iterator sit;
 
 2709   for(sit = rStateSet.
Begin(); sit != rStateSet.
End(); ++sit) {
 
 2721   std::string label=rLabel;
 
 2722   if(label==
"") label=rStateSet.
Name();
 
 2723   if(label==
"") label=
"StateSet";
 
 2728   std::map<Idx,Idx> reversemap;
 
 2729   std::map<Idx,Idx>::const_iterator minit;
 
 2730   StateSet::Iterator sit;
 
 2731   for (sit = rStateSet.
Begin(); sit != rStateSet.
End(); ++sit) {
 
 2735   for(minit = reversemap.begin(); minit != reversemap.end(); ++minit) {
 
 2737     std::map<Idx,Idx>::const_iterator conit=minit;
 
 2738     Idx start = conit->first;
 
 2740     for(; conit != reversemap.end(); ++conit) {
 
 2741       if(
StateName(conit->second) != 
"") 
break;
 
 2745       if(conit->first != start+anoncount) 
break;
 
 2758     if(minit == reversemap.end() )
 
 2762     std::string statename = 
StateName(minit->second);
 
 2763     Idx index=minit->first;
 
 2828   int oldcolumns = rTw.
Columns();
 
 2838     if (smalltransrel) {
 
 2839       std::string x1name = 
StateName(tit->X1);
 
 2854     if (smalltransrel) {
 
 2855       std::string x2name = 
StateName(tit->X2);
 
 2876   int oldcolumns = rTw.
Columns();
 
 2882     std::ostringstream ox1;
 
 2886       ox1 << x1name << 
"#" << x1;
 
 2892     std::ostringstream oev;
 
 2895     oev << evname << 
"#" << ev;
 
 2898     std::ostringstream ox2;
 
 2902       ox2 << x2name << 
"#" << x2;
 
 2950   rTw.
WriteEnd(
"TransitionRelation");
 
 2971   FD_DG(
"vGenerator(" << 
this << 
")::DotWrite(" << rFileName << 
")");
 
 2975   StateSet::Iterator lit;
 
 2981     if(!xname.empty()) circles=
false;
 
 2983     if(xname.length()>2) circles=
false;
 
 2989     std::ofstream stream;
 
 2990     stream.exceptions(std::ios::badbit|std::ios::failbit);
 
 2991     stream.open(rFileName.c_str());
 
 2992     stream << 
"// dot output generated by libFAUDES vGenerator" << std::endl;
 
 2993     stream << 
"digraph \"" << 
Name() << 
"\" {" << std::endl;
 
 2994     stream << 
"  rankdir=LR" << std::endl;
 
 2996       stream << 
"  node [shape=circle];" << std::endl;
 
 2998       stream << 
"  node [shape=rectangle, style=rounded];" << std::endl;
 
 2999     stream << std::endl;
 
 3001     stream << 
"  // initial states" << std::endl;
 
 3006       stream << 
"  dot_dummyinit_" << i << 
" [shape=none, label=\"\", width=\"0.0\", height=\"0.0\" ];" << std::endl;
 
 3007       stream << 
"  dot_dummyinit_" << i << 
" -> \"" << xname << 
"\";" << std::endl; 
 
 3010     stream << std::endl;
 
 3012     stream << 
"  // mstates" << std::endl;
 
 3017         stream << 
"  \"" << xname << 
"\" [shape=doublecircle];" << std::endl;
 
 3020     "<<TABLE BORDER=\"0\"><TR><TD>" +
 
 3022     "</TD><TD WIDTH=\"2\"></TD><TD BGCOLOR=\"black\" BORDER=\"0\" WIDTH=\"8\"></TD></TR></TABLE>>";
 
 3023         stream << 
"  \"" << xname << 
"\" [ label=" << xlabel <<
"];" << std::endl;
 
 3026     stream << std::endl;
 
 3028     stream << 
"  // rest of stateset" << std::endl;
 
 3033   stream << 
"  \"" << xname << 
"\";" << std::endl;
 
 3036     stream << std::endl;
 
 3038     stream << 
"  // transition relation" << std::endl;
 
 3040     for(tit = trx1x2ev.
Begin(); tit != trx1x2ev.
End();) {
 
 3042       if(!elabel.empty()) elabel = elabel + 
", ";
 
 3043       if(elabel.length()>9) elabel = elabel + 
"\n";
 
 3050       if(tit==trx1x2ev.
End())
 
 3053         flush=((tit->X1 != x1) || (tit->X2 != x2));
 
 3060         stream << 
"  \"" << x1name  << 
"\" -> \"" << x2name
 
 3061        << 
"\" [label=\"" << elabel << 
"\"];" << std::endl;
 
 3065     stream << 
"}" << std::endl;
 
 3068   catch (std::ios::failure&) {
 
 3070         "Exception opening/writing dotfile \""+rFileName+
"\"", 2);
 
 3077   FD_DG(
"vGenerator(" << 
this << 
")::DDotWrite(" << rFileName << 
")");
 
 3078   StateSet::Iterator lit;
 
 3081     std::ofstream stream;
 
 3082     stream.exceptions(std::ios::badbit|std::ios::failbit);
 
 3083     stream.open(rFileName.c_str());
 
 3084     stream << 
"digraph \"" << 
Name() << 
"\" {" << std::endl;
 
 3085     stream << 
"  rankdir=LR" << std::endl;
 
 3086     stream << 
"  node [shape=circle];" << std::endl;
 
 3087     stream << std::endl;
 
 3088     stream << 
"  // istates" << std::endl;
 
 3091       stream << 
"  dot_dummyinit_" << i << 
" [shape=none, label=\"\" ];" << std::endl;
 
 3092       stream << 
"  dot_dummyinit_" << i << 
" -> \""  
 3093        << 
SStr(*lit)  << 
"\";" << std::endl; 
 
 3096     stream << std::endl;
 
 3097     stream << 
"  // mstates" << std::endl;
 
 3099       stream << 
"  \"" << 
SStr(*lit) << 
"\" [shape=doublecircle];" << std::endl;
 
 3101     stream << std::endl;
 
 3102     stream << 
"  // rest of stateset" << std::endl;
 
 3106   stream << 
"  \"" << 
SStr(*lit) << 
"\";" << std::endl;
 
 3109     stream << std::endl;
 
 3110     stream << 
"  // transition relation" << std::endl;
 
 3112       stream << 
"  \"" << 
SStr(tit->X1) 
 
 3113        << 
"\" -> \"" << 
SStr(tit->X2)
 
 3114        << 
"\" [label=\"" << 
EventName(tit->Ev) << 
"\"];" << std::endl;
 
 3116     stream << 
"}" << std::endl;
 
 3119   catch (std::ios::failure&) {
 
 3120     throw Exception(
"vGenerator::DDotWrite", 
 
 3121         "Exception opening/writing dotfile \""+rFileName+
"\"", 2);
 
 3128   FD_DG(
"vGenerator(" << 
this << 
")::XDotWrite(" << rFileName << 
")");
 
 3129   StateSet::Iterator lit;
 
 3132     std::ofstream stream;
 
 3133     stream.exceptions(std::ios::badbit|std::ios::failbit);
 
 3134     stream.open(rFileName.c_str());
 
 3135     stream << 
"digraph \"___" << 
Name() << 
"___\" {" << std::endl;
 
 3136     stream << 
"  rankdir=LR" << std::endl;
 
 3137     stream << 
"  node [shape=circle];" << std::endl;
 
 3138     stream << std::endl;
 
 3139     stream << 
"  // stateset" << std::endl;
 
 3141       stream << 
"  \"s" << *lit << 
"\";" << std::endl;
 
 3144       stream << 
"  \"s" << *lit << 
"\";" << std::endl;
 
 3149       stream << 
"  \"s" << *lit << 
"\";" << std::endl;
 
 3151     stream << std::endl;
 
 3152     stream << 
"  // transition relation" << std::endl;
 
 3154       stream << 
"  \"s" << tit->X1 
 
 3155        << 
"\" -> \"s" << tit->X2
 
 3156        << 
"\" [label=\"e" << tit->Ev << 
"\" " << 
"polyline" << 
"];" << std::endl;
 
 3158     stream << 
"}" << std::endl;
 
 3161   catch (std::ios::failure&) {
 
 3162     throw Exception(
"vGenerator::XDotWrite", 
 
 3163         "Exception opening/writing dotfile \""+rFileName+
"\"", 2);
 
 3170   std::string label=rLabel;
 
 3171   if(label==
"") label=
"Generator"; 
 
 3172   FD_DG(
"vGenerator(" << 
this << 
")::DoRead(): file " << rTr.
FileName() << 
"  section " << label);
 
 3178   int seclev=rTr.
Level();
 
 3187     FD_DG(
"vGenerator(" << 
this << 
")::DoRead(): relaxed native header")
 
 3188     std::string name=
"Generator";
 
 3200     FD_DG(
"vGenerator(" << 
this << 
")::DoRead(): relaxed native core")
 
 3208     FD_DG(
"vGenerator(" << 
this << 
")::DoRead(): " << token.
Str());
 
 3219     FD_DG(
"vGenerator(" << 
this << 
")::DoRead(): native extra items")
 
 3223     if(token.
IsBegin(
"InitStates"))
 
 3230     if(token.
IsBegin(
"MarkedStates"))
 
 3239   if(native) xml=
false;
 
 3242     FD_DG(
"vGenerator(" << 
this << 
")::DoRead(): xml")
 
 3244     std::string name=
"generator";
 
 3263   FD_DG(
"vGenerator(" << 
this << 
")::DoRead(): done");
 
 3268   FD_DG(
"vGenerator(" << 
this << 
")::ReadAlphabet(\""  
 3281   FD_DG(
"vGenerator(" << 
this << 
")::ReadStates(\"" << rTr.
FileName() << 
"\")");
 
 3284   std::string label=
"";
 
 3288   if(label==
"") 
return;
 
 3290   FD_DG(
"vGenerator(" << 
this << 
")::ReadStates(..): attribute type " << 
typeid(*attrp).name());
 
 3301   while(!rTr.
Eos(label)) {
 
 3308       FD_DG(
"vGenerator(" << 
this << 
")::ReadStates(\"" << rTr.
FileName() << 
"\"): by index " << index);
 
 3311   std::stringstream errstr;
 
 3312   errstr << 
"Token " << token.
IntegerValue() << 
" appears twice in stateset" 
 3314   throw Exception(
"vGenerator::ReadStates", errstr.str(), 80);
 
 3317       attrp->
Read(rTr,
"",
this);
 
 3333       std::size_t pos= statename.find_first_of(
'#');
 
 3334       if(pos==std::string::npos) symimpl=
true;
 
 3335       if(pos!=std::string::npos) symexpl=
true;
 
 3336       if(pos!=std::string::npos && pos < statename.size()-1) {
 
 3337   std::string suffix=statename.substr(pos+1);
 
 3338         index=
ToIdx(suffix);
 
 3339         statename=statename.substr(0,pos);
 
 3340         FD_DG(
"vGenerator(" << 
this << 
")::ReadStates(\"" << rTr.
FileName() << 
"\"): extracted suffix from  " << token.
StringValue() << 
": " << statename << 
" idx " << index);
 
 3345   std::stringstream errstr;
 
 3346   errstr << 
"State " << statename << 
"(idx " << index <<
") appears twice in stateset" 
 3348   throw Exception(
"vGenerator::ReadStates", errstr.str(), 80);
 
 3351       attrp->
Read(rTr,
"",
this);
 
 3362     if(token.
IsBegin(
"Consecutive")) {
 
 3364       Token token1,token2;
 
 3367       FD_DG(
"vGenerator(" << 
this << 
")::ReadStates(\"" << rTr.
FileName() << 
"\"): consecutive range");
 
 3370   std::stringstream errstr;
 
 3371   errstr << 
"Invalid range of consecutive states"  << rTr.
FileLine();
 
 3372   throw Exception(
"vGenerator::ReadStates", errstr.str(), 80);
 
 3377     std::stringstream errstr;
 
 3378     errstr << 
"Index " << index << 
" appears twice in stateset" 
 3380     throw Exception(
"vGenerator::ReadStates", errstr.str(), 80);
 
 3390     std::stringstream errstr;
 
 3391     errstr << 
"Invalid token" << rTr.
FileLine();
 
 3392     throw Exception(
"vGenerator::ReadStates", errstr.str(), 80);
 
 3396   if(symimpl && symexpl) {
 
 3398     std::stringstream errstr;
 
 3399     errstr << 
"StateSet with inconsitent explicit symboltable" << rTr.
FileLine();
 
 3400     throw Exception(
"vGenerator::ReadStates", errstr.str(), 80);
 
 3404   FD_DG(
"vGenerator(" << 
this << 
")::ReadStates(\"" << rTr.
FileName() << 
"\"): done");
 
 3410   FD_DG(
"vGenerator(" << 
this << 
")::ReadStateSet(\"" << rLabel<< 
"\")");
 
 3414   FD_DG(
"vGenerator(" << 
this << 
")::ReadStateSet(..): attribute type " << 
typeid(*attrp).name());
 
 3418   rStateSet.
Name(rLabel);
 
 3420   while(!rTr.
Eos(rLabel)) {
 
 3430   std::stringstream errstr;
 
 3431   errstr << 
"Token " << token.
IntegerValue() << 
" not in generator stateset" 
 3433   throw Exception(
"vGenerator::ReadStateSet", errstr.str(), 80);
 
 3436       attrp->
Read(rTr,
"",
this);
 
 3450       std::size_t pos= statename.find_first_of(
'#');
 
 3451       if(pos!=std::string::npos) {
 
 3453   std::stringstream errstr;
 
 3454   errstr << 
"invalid symbolic name: " << token.
StringValue() 
 
 3455            << 
" (no suffix allowed in external state sets)" << rTr.
FileLine();
 
 3456   throw Exception(
"vGenerator::ReadStateSet", errstr.str(), 80);
 
 3461   std::stringstream errstr;
 
 3462   errstr << 
"Symbolic name " << token.
StringValue() << 
" not in stateset" 
 3464   throw Exception(
"vGenerator::ReadStateSet", errstr.str(), 80);
 
 3467       attrp->
Read(rTr,
"",
this);
 
 3479       std::string name=
"";
 
 3485       FD_DG(
"vGenerator::ReadStateSet(): got idx " << index << 
" " << name);
 
 3493         std::stringstream errstr;
 
 3494         errstr << 
"Cannot figure index for state token " << token.
Str() << rTr.
FileLine();
 
 3495         throw Exception(
"vGenerator::ReadStateSet", errstr.str(), 80);
 
 3498       if(rStateSet.
Exists(index)) {
 
 3500         std::stringstream errstr;
 
 3501         errstr << 
"Doublet state from token " << token.
Str() << rTr.
FileLine();
 
 3502         throw Exception(
"vGenerator::ReadStateSet", errstr.str(), 80);
 
 3512       if(!rTr.
Eos(
"State")) { 
 
 3513         FD_DG(
"vGenerator(" << 
this << 
")::ReadStates(\"" << rTr.
FileName() << 
"\"): attribute ?");
 
 3514         attrp->
Read(rTr,
"",
this);
 
 3528       Token token1,token2;
 
 3543     std::stringstream errstr;
 
 3544     errstr << 
"Invalid range of consecutive states"  << rTr.
FileLine();
 
 3545     throw Exception(
"vGenerator::ReadStateSet", errstr.str(), 80);
 
 3551       if(idx1==0 || idx2 < idx1) {
 
 3553   std::stringstream errstr;
 
 3554   errstr << 
"Invalid range of consecutive states"  << rTr.
FileLine();
 
 3555   throw Exception(
"vGenerator::ReadStateSet", errstr.str(), 80);
 
 3558       FD_DG(
"vGenerator(" << 
this << 
")::ReadStateSet(\"" << rTr.
FileName() << 
"\"): consecutive range " << idx1 << 
" to " << idx2);    
 
 3559       for(
Idx index = idx1; index <= idx2; ++index) {
 
 3562     std::stringstream errstr;
 
 3563     errstr << 
"range not in generator stateset" << rTr.
FileLine();
 
 3564     throw Exception(
"vGenerator::ReadStateSet", errstr.str(), 80);
 
 3580     std::stringstream errstr;
 
 3581     errstr << 
"Section " << rLabel << 
": Invalid token" << rTr.
FileLine() << 
": " << token.
Str();
 
 3582     throw Exception(
"vGenerator::ReadStateSet", errstr.str(), 50);
 
 3591   FD_DG(
"vGenerator(" << 
this << 
")::XReadStateSet(\"" << rLabel<< 
"\")");
 
 3593   FD_DG(
"vGenerator(" << 
this << 
")::ReadStateSet(..): attribute type " << 
typeid(*attrp).name());
 
 3597   std::string label=rLabel;
 
 3598   if(label==
"") label=rStateSet.
Name();
 
 3599   if(label==
"") label=
"StateSet";
 
 3608   while(!rTr.
Eos(label)) {
 
 3612     if(sttag.
IsBegin(
"Consecutive")) {
 
 3621       if(idx1==0 || idx2 < idx1) {
 
 3623   std::stringstream errstr;
 
 3624   errstr << 
"Invalid range of consecutive states"  << rTr.
FileLine();
 
 3625   throw Exception(
"vGenerator::XReadStates", errstr.str(), 80);
 
 3627       FD_DG(
"vGenerator(" << 
this << 
")::XReadStates(\"" << rTr.
FileName() << 
"\"): consecutive range " << idx1 << 
" to " << idx2);
 
 3628       for(
Idx index = idx1; index <= idx2; ++index) {
 
 3629   if(rStateSet.
Exists(index)) {
 
 3631     std::stringstream errstr;
 
 3632     errstr << 
"Doublet state index " << index << 
" " << rTr.
FileLine();
 
 3633     throw Exception(
"vGenerator::XReadStates", errstr.str(), 80);
 
 3648     std::string name=
"";
 
 3654     FD_DG(
"vGenerator::XReadStateSet(): got idx " << index << 
" " << name);
 
 3662       std::stringstream errstr;
 
 3663       errstr << 
"Cannot figure index for state token " << sttag.
Str() << rTr.
FileLine();
 
 3664       throw Exception(
"vGenerator::XReadStateSet", errstr.str(), 80);
 
 3667     if(rStateSet.
Exists(index)) {
 
 3669       std::stringstream errstr;
 
 3670       errstr << 
"Doublet state from token " << sttag.
Str() << rTr.
FileLine();
 
 3671       throw Exception(
"vGenerator::XReadStateSet", errstr.str(), 80);
 
 3681     while(!rTr.
Eos(
"State")) {
 
 3705       FD_DG(
"vGenerator(" << 
this << 
")::XReadStates(\"" << rTr.
FileName() << 
"\"): attribute ?");
 
 3706       attrp->
Read(rTr,
"",
this);
 
 3717   FD_DG(
"vGenerator(" << 
this << 
")::XReadStates(\"" << rTr.
FileName() << 
"\"): done");
 
 3724   FD_DG(
"vGenerator(" << 
this << 
")::ReadTransRel(\"" << rTr.
FileName() << 
"\")");
 
 3726   FD_DG(
"vGenerator(" << 
this << 
")::ReadTransRel(..): attribute type " << 
typeid(*attrp).name());
 
 3729   std::string label=
"";
 
 3732   if(token.
IsBegin(
"TransRel")) label=
"TransRel";
 
 3733   if(token.
IsBegin(
"T")) label=
"T";
 
 3735     std::stringstream errstr;
 
 3736     errstr << 
"Reading TransRel failed in " << rTr.
FileLine() << 
": no valid begin token";
 
 3737     throw Exception(
"vGenerator::ReadTransRel", errstr.str(), 50); 
 
 3748   while(!rTr.
Eos(label)) {
 
 3756     Idx x1 = 0, ev = 0, x2 = 0;
 
 3787     attrp->
Read(rTr,
"",
this);
 
 3794       std::stringstream errstr;
 
 3796       throw Exception(
"vGenerator::ReadTransRel", errstr.str(), 85);
 
 3799       std::stringstream errstr;
 
 3801       throw Exception(
"vGenerator::ReadTransRel", errstr.str(), 85);
 
 3804       std::stringstream errstr;
 
 3806       throw Exception(
"vGenerator::ReadTransRel", errstr.str(), 85);
 
 3819     std::stringstream errstr;
 
 3820     errstr << 
"Reading TransRel failed in " << rTr.
FileLine() << 
" " << oex.
What();
 
 3821     throw Exception(
"vGenerator::ReadTransRel", errstr.str(), 50); 
 
 3828   FD_DG(
"vGenerator(" << 
this << 
")::ReadTransRel(\"" << rTr.
FileName() << 
"\"): done");
 
 3837   FD_DG(
"vGenerator(" << 
this << 
")::XReadTransRel()");
 
 3839   FD_DG(
"vGenerator(" << 
this << 
")::ReadTransRel(..): attribute type " << 
typeid(*attrp).name());
 
 3845   rTr.
ReadBegin(
"TransitionRelation",btag);  
 
 3847   while(!rTr.
Eos(
"TransitionRelation")) {
 
 3851     if(!trtag.
IsBegin(
"Transition")) {
 
 3880     if(x1==0 || x2==0 || ev==0) {
 
 3882       std::stringstream errstr;
 
 3883       errstr << 
"Invalid transition at token " << trtag.
Str() << rTr.
FileLine();
 
 3884       throw Exception(
"vGenerator::XReadTransRel", errstr.str(), 80);
 
 3889       std::stringstream errstr;
 
 3890       errstr << 
"Doublet transition at token " << trtag.
Str() << rTr.
FileLine();
 
 3891       throw Exception(
"vGenerator::XReadTransRel", errstr.str(), 80);
 
 3896       std::stringstream errstr;
 
 3897       errstr << 
"Invalid state x1 " << x1 << 
" " << rTr.
FileLine();
 
 3898       throw Exception(
"vGenerator::XReadTransRel", errstr.str(), 80);
 
 3902       std::stringstream errstr;
 
 3903       errstr << 
"Invalid state x2 " << x2 << 
" " << rTr.
FileLine();
 
 3904       throw Exception(
"vGenerator::XReadTransRel", errstr.str(), 80);
 
 3908       std::stringstream errstr;
 
 3909       errstr << 
"Invalid event  " << evname << 
" " << rTr.
FileLine();
 
 3910       throw Exception(
"vGenerator::XReadTransRel", errstr.str(), 80);
 
 3917     if(!token.
IsEnd(
"Transition")) {
 
 3919       attrp->
Read(rTr,
"",
this);
 
 3925   rTr.
ReadEnd(
"TransitionRelation");
 
 3928   FD_DG(
"vGenerator(" << 
this << 
")::XReadTransRel(\"" << rTr.
FileName() << 
"\"): done");
 
 3952    const std::string& rDotExec)
 const {
 
 3953   FD_DG(
"vGenerator::GraphWrite(...): " << 
typeid(*this).name());
 
 3957     std::stringstream errstr;
 
 3958     errstr << 
"Exception opening temp file";
 
 3959     throw Exception(
"vGenerator::GraphWrite", errstr.str(), 2);
 
 3966     std::stringstream errstr;
 
 3967     errstr << 
"Exception writing dot input file";
 
 3968     throw Exception(
"vGenerator::GraphWrite", errstr.str(), 2);
 
 3975     std::stringstream errstr;
 
 3976     errstr << 
"Exception processing dot file";
 
 3977     throw Exception(
"vGenerator::GraphWrite", errstr.str(), 3);
 
 4094   if(rGenVec.
Size()==0) 
return;
 
 4108   if(rGenVec.
Size()==0) 
return;
 
#define FAUDES_OBJCOUNT_DEC(type)
 
#define FAUDES_OBJCOUNT_INC(type)
 
static void Skip(TokenReader &rTr)
 
virtual bool IsDefault(void) const
 
virtual const char * What() const
 
Type & operator=(const Type &rSrc)
 
const std::string & Name(void) const
 
virtual const std::string & TypeName(void) const
 
bool Exists(const Idx &rIndex) const
 
NameSet::Iterator Find(const Idx &rIndex) const
 
virtual void InsertSet(const NameSet &rOtherSet)
 
SymbolTable * SymbolTablep(void) const
 
bool Insert(const Idx &rIndex)
 
Idx Index(const std::string &rName) const
 
void RestrictSet(const NameSet &rOtherSet)
 
virtual bool Erase(const Idx &rIndex)
 
void RestrictDomain(const IndexSet &rDomain)
 
static SymbolTable * GlobalEventSymbolTablep(void)
 
std::string Symbol(Idx index) const
 
std::string UniqueSymbol(const std::string &rName) const
 
void SetEntry(Idx index, const std::string &rName)
 
Idx Index(const std::string &rName) const
 
std::vector< int >::size_type Position
 
virtual const T & At(const Position &pos) const
 
Iterator Begin(void) const
 
Iterator Find(Idx x1, Idx ev, Idx x2) const
 
bool Exists(const Transition &t) const
 
void RestrictStates(const StateSet &rStateSet)
 
Iterator BeginByX2(Idx x2) const
 
void EraseByX1Ev(Idx x1, Idx ev)
 
bool Insert(const Transition &rTransition)
 
Iterator EndByX2(Idx x2) const
 
bool ExistsByX1Ev(Idx x1, Idx ev) const
 
Iterator Inject(const Iterator &pos, const Transition &rTransition)
 
bool Erase(const Transition &t)
 
StateSet SuccessorStates(Idx x1) const
 
void RestrictEvents(const EventSet &rEventSet)
 
void EraseByX1OrX2(Idx x)
 
TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator
 
void ReSort(TTransSet< OtherCmp > &res) const
 
bool ExistsByX1(Idx x1) const
 
std::string FileLine(void) const
 
bool Eos(const std::string &rLabel)
 
void ReadEnd(const std::string &rLabel)
 
std::string ReadString(void)
 
void ReadBegin(const std::string &rLabel)
 
std::string FileName(void) const
 
void WriteComment(const std::string &rComment)
 
void Write(Token &rToken)
 
void WriteEnd(const std::string &rLabel)
 
void WriteBegin(const std::string &rLabel)
 
std::string Str(void) const
 
const std::string & StringValue(void) const
 
Int AttributeIntegerValue(const std::string &name)
 
bool IsString(void) const
 
Int IntegerValue(void) const
 
bool IsInteger(void) const
 
bool ExistsAttributeString(const std::string &name)
 
void SetEmpty(const std::string &rName)
 
void SetBegin(const std::string &rName)
 
bool ExistsAttributeInteger(const std::string &name)
 
void InsAttributeInteger(const std::string &name, Int value)
 
void InsAttributeString(const std::string &name, const std::string &value)
 
const std::string & AttributeStringValue(const std::string &name)
 
void DWrite(const Type *pContext=0) const
 
void Read(const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
 
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const
 
virtual void XWrite(const std::string &pFileName, const std::string &rLabel="", const Type *pContext=0) const
 
virtual Type & Assign(const Type &rSrc)
 
virtual Type * New(void) const
 
virtual void DoSWrite(TokenWriter &rTw) const
 
virtual Type * Copy(void) const
 
void Write(const Type *pContext=0) const
 
static bool ReindexOnWriteDefault(void)
 
const EventSet * pAlphabetPrototype
 
virtual void TransAttribute(const Transition &rTrans, const Type &rAttr)
 
StateSet::Iterator StatesBegin(void) const
 
StateSet::Iterator InitStatesBegin(void) const
 
virtual bool Valid(void) const
 
const TransSet & TransRel(void) const
 
bool SetTransition(Idx x1, Idx ev, Idx x2)
 
const StateSet & MarkedStates(void) const
 
void ClearInitStates(void)
 
void WriteStates(TokenWriter &rTw) const
 
static const StateSet & StatesVoid(void)
 
const EventSet & Alphabet(void) const
 
void XReadStateSet(TokenReader &rTr, StateSet &rStateSet, const std::string &rLabel="") const
 
std::string TransRelToString(void) const
 
virtual void DDotWrite(const std::string &rFileName) const
 
static void StateNamesEnabledDefault(bool flag)
 
virtual void Move(vGenerator &rGen)
 
const AttributeVoid * pGlobalPrototype
 
std::string MarkedStatesToString(void) const
 
virtual vGenerator & Assign(const Type &rSrc)
 
virtual vGenerator * Copy(void) const
 
bool InitStatesEmpty(void) const
 
std::string StatesToString(void) const
 
EventSet ActiveEventSet(Idx x1) const
 
virtual ~vGenerator(void)
 
void DelEvents(const EventSet &rEvents)
 
const StateSet & InitStates(void) const
 
const SymbolTable & StateSymbolTable(void) const
 
TransSet::Iterator TransRelBegin(void) const
 
void ClrTransition(Idx x1, Idx ev, Idx x2)
 
EventSet * NewEventSetp(void) const
 
EventSet NewEventSet(void) const
 
SymbolTable * EventSymbolTablep(void) const
 
void WriteAlphabet(void) const
 
AttributeVoid * mpGlobalAttribute
 
Idx StateIndex(const std::string &rName) const
 
virtual void ClearEventAttributes(void)
 
void InjectState(Idx index)
 
static const AttributeVoid & GlobalVoid(void)
 
virtual void EventAttribute(Idx index, const Type &rAttr)
 
void SetMinStateIndexMap(void) const
 
virtual void StateAttribute(Idx index, const Type &rAttr)
 
virtual vGenerator & AssignWithoutAttributes(const vGenerator &rGen)
 
StateSet::Iterator FindInitState(Idx index) const
 
void ReadAlphabet(TokenReader &rTr)
 
void ClrTransitions(Idx x1, Idx ev)
 
virtual void RestrictStates(const StateSet &rStates)
 
EventSet::Iterator FindEvent(Idx index) const
 
Idx InitStatesSize(void) const
 
static bool msReindexOnWriteDefault
 
virtual void ClearTransAttributes(void)
 
bool IsAccessible(void) const
 
void ReadStates(TokenReader &rTr)
 
void InsEvents(const EventSet &events)
 
void ClrMarkedState(Idx index)
 
void InjectStates(const StateSet &rNewStates)
 
static SymbolTable * GlobalEventSymbolTablep(void)
 
virtual AttributeVoid * GlobalAttributep(void)
 
bool EventRename(Idx event, const std::string &rNewName)
 
virtual void GlobalAttribute(const Type &rAttr)
 
virtual AttributeVoid * TransAttributep(const Transition &rTrans)
 
EventSet::Iterator AlphabetBegin(void) const
 
SymbolTable mStateSymbolTable
 
void WriteStateSet(const StateSet &rStateSet) const
 
virtual void DeleteCore(void)
 
SymbolTable * mpEventSymbolTable
 
StateSet TransRelStates(void) const
 
static const EventSet & AlphabetVoid(void)
 
virtual void DoWrite(TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
StateSet BlockingStates(void) const
 
bool IsComplete(void) const
 
bool MarkedStatesEmpty(void) const
 
StateSet::Iterator FindMarkedState(Idx index) const
 
virtual AttributeVoid * EventAttributep(Idx index)
 
const std::map< Idx, Idx > & MinStateIndexMap(void) const
 
void DWriteStateSet(TokenWriter &rTw, const StateSet &rStateSet) const
 
Idx MaxStateIndex(void) const
 
void ClrStateName(Idx index)
 
virtual vGenerator * New(void) const
 
void ClearMarkedStates(void)
 
virtual void UpdateCore(void)
 
virtual void ClearStateAttributes(void)
 
bool ExistsTransition(const std::string &rX1, const std::string &rEv, const std::string &rX2) const
 
void EnforceStateNames(const std::string &rTemplate)
 
void InjectMarkedStates(const StateSet &rNewMarkedStates)
 
virtual void ClearGlobalAttribute(void)
 
virtual void DoDWrite(TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
Idx MarkedStatesSize(void) const
 
void SetInitState(Idx index)
 
virtual void DoSWrite(TokenWriter &rTw) const
 
void InsStates(const StateSet &rStates)
 
virtual void GlobalAttributeTry(const Type &rAttr)
 
void ClearStateNames(void)
 
TransSet ActiveTransSet(Idx x1) const
 
void WriteTransRel(void) const
 
void XWriteStateSet(TokenWriter &rTw, const StateSet &rStateSet, const std::string &rLabel="") const
 
void InsMarkedStates(const StateSet &rStates)
 
bool TransRelEmpty(void) const
 
StateSet TrimSet(void) const
 
std::string InitStatesToString(void) const
 
StateSet AccessibleSet(void) const
 
Idx EventIndex(const std::string &rName) const
 
bool ExistsState(Idx index) const
 
virtual const AttributeVoid & GlobalAttribute(void) const
 
virtual AttributeVoid * StateAttributep(Idx index)
 
virtual void ClrTransAttribute(const Transition &rTrans)
 
bool IsCoaccessible(void) const
 
void ConfigureAttributeTypes(const AttributeVoid *pNewGlobalPrototype, const StateSet *pNewStatesPrototype, const EventSet *pNewAlphabetPrototype, const TransSet *pNewTransRelPrototype)
 
StateSet::Iterator MarkedStatesBegin(void) const
 
virtual void DoRead(TokenReader &rTr, const std::string &rLabel="", const Type *pContext=0)
 
const TransSet * pTransRelPrototype
 
void XWriteTransRel(TokenWriter &rTw) const
 
bool DelEventFromAlphabet(Idx index)
 
void InjectTransition(const Transition &rTrans)
 
StateSet::Iterator FindState(Idx index) const
 
std::string StateSetToString(const StateSet &rStateSet) const
 
std::string UniqueEventName(const std::string &rName) const
 
virtual void RestrictAlphabet(const EventSet &rNewalphabet)
 
std::string TStr(const Transition &rTrans) const
 
bool DelStateFromStates(Idx index)
 
static bool msStateNamesEnabledDefault
 
std::string StateName(Idx index) const
 
virtual void DotWrite(const std::string &rFileName) const
 
void XReadTransRel(TokenReader &rTr)
 
virtual void XDotWrite(const std::string &rFileName) const
 
StateSet::Iterator StatesEnd(void) const
 
void ClrInitState(Idx index)
 
void DelStates(const StateSet &rDelStates)
 
TransSet::Iterator TransRelEnd(void) const
 
Idx SuccessorState(Idx x1, Idx ev) const
 
bool IsDeterministic(void) const
 
bool ExistsEvent(Idx index) const
 
std::string EStr(Idx index) const
 
std::map< Idx, Idx > mMinStateIndexMap
 
StateSet TerminalStates(void) const
 
StateSet::Iterator MarkedStatesEnd(void) const
 
void InjectTransRel(const TransSet &rNewtransrel)
 
void SetMarkedState(Idx index)
 
Transition TransitionByNames(const std::string &rX1, const std::string &rEv, const std::string &rX2) const
 
Idx InitState(void) const
 
std::string StateSetToText(const StateSet &rStateSet) const
 
void ReadStateSet(TokenReader &rTr, const std::string &rLabel, StateSet &rStateSet) const
 
bool ReindexOnWrite(void) const
 
virtual void EventAttributes(const EventSet &rEventSet)
 
void InsInitStates(const StateSet &rStates)
 
void InjectInitStates(const StateSet &rNewInitStates)
 
bool StateNamesEnabled(void) const
 
std::string TransRelToText(void) const
 
StateSet::Iterator InitStatesEnd(void) const
 
virtual void NewCore(void)
 
void SetDefaultStateNames(void)
 
void GraphWrite(const std::string &rFileName, const std::string &rOutFormat="", const std::string &rDotExec="dot") const
 
static const TransSet & TransRelVoid(void)
 
virtual void ClrStateAttribute(Idx index)
 
Idx TransRelSize(void) const
 
virtual void Version(const std::string &rVersion, vGenerator &rResGen) const
 
EventSet UsedEvents(void) const
 
EventSet UnusedEvents(void) const
 
virtual const Type * Cast(const Type *pOther) const
 
void ClearMinStateIndexMap(void) const
 
std::string EventName(Idx index) const
 
const StateSet * pStatesPrototype
 
EventSet::Iterator AlphabetEnd(void) const
 
std::string StatesToText(void) const
 
virtual void ClearAttributes(void)
 
virtual void DoXWrite(TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
StateSet CoaccessibleSet(void) const
 
void MinimizeAlphabet(void)
 
Idx AlphabetSize(void) const
 
SymbolTable * mpStateSymbolTable
 
virtual void ClrEventAttribute(Idx index)
 
bool ExistsInitState(Idx index) const
 
std::string SStr(Idx index) const
 
bool ExistsMarkedState(Idx index) const
 
TransSet::Iterator FindTransition(const std::string &rX1, const std::string &rEv, const std::string &rX2) const
 
void DoAssign(const vGenerator &rSrc)
 
std::string AlphabetToString(void) const
 
std::string UniqueStateName(const std::string &rName) const
 
void ReadTransRel(const std::string &rFileName)
 
void DWriteTransRel(TokenWriter &rTw) const
 
const StateSet & States(void) const
 
void InjectAlphabet(const EventSet &rNewalphabet)
 
StateSet SuccessorStates(Idx x1) const
 
bool AlphabetEmpty(void) const
 
virtual const AttributeVoid * AttributeType(void) const
 
virtual TBaseSet & AssignWithoutAttributes(const TBaseSet &rSourceSet)
 
void SetDifference(const TBaseSet< T, Cmp > &rSetA, const TBaseSet< T, Cmp > &rSetB, TBaseSet< T, Cmp > &rRes)
 
bool Exists(const T &rElem) const
 
virtual void Attributes(const TBaseSet &rOtherSet)
 
TTransSet< TransSort::X1EvX2 > TransSet
 
Iterator Find(const T &rElem) const
 
Idx AttributesSize(void) const
 
TTransSet< TransSort::X1X2Ev > TransSetX1X2Ev
 
virtual void RestrictSet(const TBaseSet &rOtherSet)
 
virtual void InsertSet(const TBaseSet &rOtherSet)
 
virtual AttributeVoid * Attributep(const T &rElem)
 
Iterator Begin(void) const
 
virtual const AttributeVoid & Attribute(const T &rElem) const
 
virtual bool Erase(const T &rElem)
 
void SetUnion(const TBaseSet< T, Cmp > &rSetA, const TBaseSet< T, Cmp > &rSetB, TBaseSet< T, Cmp > &rRes)
 
void SetIntersection(const TBaseSet< T, Cmp > &rSetA, const TBaseSet< T, Cmp > &rSetB, TBaseSet< T, Cmp > &rRes)
 
virtual void EraseSet(const TBaseSet &rOtherSet)
 
void ClearAttributes(void)
 
virtual void ClrAttribute(const T &rElem)
 
bool IsComplete(const vGenerator &rGen)
 
void Trim(vGenerator &rGen)
 
void Complete(vGenerator &rGen)
 
bool IsAccessible(const vGenerator &rGen)
 
bool IsTrim(const vGenerator &rGen)
 
void MarkAllStates(vGenerator &rGen)
 
bool IsCoaccessible(const vGenerator &rGen)
 
void AlphabetExtract(const vGenerator &rGen, EventSet &rRes)
 
void Accessible(vGenerator &rGen)
 
void Coaccessible(vGenerator &rGen)
 
bool IsDeterministic(const vGenerator &rGen)
 
Idx ToIdx(const std::string &rString)
 
void ApplyRelabelMap(const RelabelMap &rMap, const vGenerator &rGen, vGenerator &rRes)
 
void ProcessDot(const std::string &rDotFile, const std::string &rOutFile, const std::string &rOutFormat, const std::string &rDotExec)
 
std::string CreateTempFile(void)
 
bool FileDelete(const std::string &rFilename)
 
std::string ToStringInteger(Int number)