11 #ifndef FAUDES_HIO_ENVIRONMENT_H
12 #define FAUDES_HIO_ENVIRONMENT_H
46 template <
class GlobalAttr,
class StateAttr,
class EventAttr,
class TransAttr>
191 void SetYe(
const std::string& rName);
215 void SetUe(
const std::string& rName);
245 bool IsYe(
const std::string& rName)
const;
267 bool IsUe(
const std::string& rName)
const;
341 void SetYl(
const std::string& rName);
365 void SetUl(
const std::string& rName);
395 bool IsYl(
const std::string& rName)
const;
417 bool IsUl(
const std::string& rName)
const;
457 bool IsY(
const std::string& rName)
const;
487 bool IsU(
const std::string& rName)
const;
517 bool IsE(
const std::string& rName)
const;
547 bool IsL(
const std::string& rName)
const;
627 bool IsQYe(
const std::string& rName)
const;
703 bool IsQUe(
const std::string& rName)
const;
779 bool IsQUl(
const std::string& rName)
const;
931 bool IsErr(
const std::string& rName)
const;
959 #define THIS THioEnvironment<GlobalAttr, StateAttr, EventAttr, TransAttr>
960 #define BASE TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
961 #define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
966 FD_DG(
"HioEnvironment(" <<
this <<
")::HioEnvironment()");
971 FD_DG(
"HioEnvironment(" <<
this <<
")::HioEnvironment(rOtherGen)");
976 FD_DG(
"HioEnvironment(" <<
this <<
")::HioEnvironment(rOtherGen)");
986 ) :
BASE(rOtherGen) {
987 FD_DG(
"HioEnvironment(" <<
this <<
")::HioEnvironment(rOtherGen)");
995 TEMP THIS::THioEnvironment(
const std::string& rFileName) :
BASE(rFileName) {
996 FD_DG(
"HioEnvironment(" <<
this <<
")::HioEnvironment(rFilename) : done");
1004 res->EventSymbolTablep(BASE::mpEventSymbolTable);
1005 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
1011 return new THIS(*
this);
1017 THIS res= BASE::NewAGen();
1025 EventAttr attr=BASE::EventAttribute(index);
1030 TEMP bool THIS::IsY(
const std::string& rName)
const {
1031 EventAttr attr=BASE::EventAttribute(rName);
1037 EventAttr attr=BASE::EventAttribute(index);
1042 TEMP bool THIS::IsU(
const std::string& rName)
const {
1043 EventAttr attr=BASE::EventAttribute(rName);
1049 FD_DG(
"HioEnvironment(" <<
this <<
")::YEvents()");
1051 EventSet::Iterator it;
1052 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1053 if(IsY(*it)) res.
Insert(*it);
1060 FD_DG(
"HioEnvironment(" <<
this <<
")::UEvents()");
1062 EventSet::Iterator it;
1063 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1064 if(IsU(*it)) res.
Insert(*it);
1073 FD_DG(
"HioEnvironment(" <<
this <<
")::InsYeEvent(" << index <<
")");
1077 BASE::InsEvent(index,attr);
1081 TEMP Idx THIS::InsYeEvent(
const std::string& rName) {
1082 FD_DG(
"HioEnvironment(" <<
this <<
")::InsYeEvent(" << rName <<
")");
1086 return BASE::InsEvent(rName,attr);
1091 FD_DG(
"HioEnvironment(" <<
this <<
")::InsUeEvent(" << index <<
")");
1095 BASE::InsEvent(index,attr);
1099 TEMP Idx THIS::InsUeEvent(
const std::string& rName) {
1100 FD_DG(
"HioEnvironment(" <<
this <<
")::InsUeEvent(" << rName <<
")");
1104 return BASE::InsEvent(rName,attr);
1109 FD_DG(
"HioEnvironment(" <<
this <<
")::SetYe(" << index <<
")");
1110 EventAttr attr=BASE::EventAttribute(index);
1113 BASE::pAlphabet->Attribute(index,attr);
1117 TEMP void THIS::SetYe(
const std::string& rName) {
1118 FD_DG(
"HioEnvironment(" <<
this <<
")::SetYe(" << rName <<
")");
1119 Idx index = BASE::EventIndex(rName);
1125 FD_DG(
"HioEnvironment(" <<
this <<
")::SetYe(rEvents)");
1126 EventSet::Iterator it;
1127 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1134 FD_DG(
"HioEnvironment(" <<
this <<
")::SetUe(" << index <<
")");
1135 EventAttr attr=BASE::EventAttribute(index);
1138 BASE::pAlphabet->Attribute(index,attr);
1142 TEMP void THIS::SetUe(
const std::string& rName) {
1143 FD_DG(
"HioEnvironment(" <<
this <<
")::SetUe(" << rName <<
")");
1144 Idx index = BASE::EventIndex(rName);
1150 FD_DG(
"HioEnvironment(" <<
this <<
")::SetUe(rEvents)");
1151 EventSet::Iterator it;
1152 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1159 EventAttr attr=BASE::EventAttribute(index);
1160 return (attr.IsY() && attr.IsE());
1164 TEMP bool THIS::IsYe(
const std::string& rName)
const {
1165 EventAttr attr=BASE::EventAttribute(rName);
1166 return (attr.IsY() && attr.IsE());
1171 EventAttr attr=BASE::EventAttribute(index);
1172 return (attr.IsU() && attr.IsE());
1176 TEMP bool THIS::IsUe(
const std::string& rName)
const {
1177 EventAttr attr=BASE::EventAttribute(rName);
1178 return (attr.IsU() && attr.IsE());
1183 FD_DG(
"HioEnvironment(" <<
this <<
")::YeEvents()");
1185 EventSet::Iterator it;
1186 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1187 if(IsYe(*it)) res.
Insert(*it);
1194 FD_DG(
"HioEnvironment(" <<
this <<
")::UeEvents()");
1196 EventSet::Iterator it;
1197 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1198 if(IsUe(*it)) res.
Insert(*it);
1207 FD_DG(
"HioEnvironment(" <<
this <<
")::InsYlEvent(" << index <<
")");
1211 BASE::InsEvent(index,attr);
1215 TEMP Idx THIS::InsYlEvent(
const std::string& rName) {
1216 FD_DG(
"HioEnvironment(" <<
this <<
")::InsYlEvent(" << rName <<
")");
1220 return BASE::InsEvent(rName,attr);
1225 FD_DG(
"HioEnvironment(" <<
this <<
")::InsUlEvent(" << index <<
")");
1229 BASE::InsEvent(index,attr);
1233 TEMP Idx THIS::InsUlEvent(
const std::string& rName) {
1234 FD_DG(
"HioEnvironment(" <<
this <<
")::InsUlEvent(" << rName <<
")");
1238 return BASE::InsEvent(rName,attr);
1243 FD_DG(
"HioEnvironment(" <<
this <<
")::SetYl(" << index <<
")");
1244 EventAttr attr=BASE::EventAttribute(index);
1247 BASE::pAlphabet->Attribute(index,attr);
1251 TEMP void THIS::SetYl(
const std::string& rName) {
1252 FD_DG(
"HioEnvironment(" <<
this <<
")::SetYl(" << rName <<
")");
1253 Idx index = BASE::EventIndex(rName);
1259 FD_DG(
"HioEnvironment(" <<
this <<
")::SetYl(rEvents)");
1260 EventSet::Iterator it;
1261 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1268 FD_DG(
"HioEnvironment(" <<
this <<
")::SetUl(" << index <<
")");
1269 EventAttr attr=BASE::EventAttribute(index);
1272 BASE::pAlphabet->Attribute(index,attr);
1276 TEMP void THIS::SetUl(
const std::string& rName) {
1277 FD_DG(
"HioEnvironment(" <<
this <<
")::SetUl(" << rName <<
")");
1278 Idx index = BASE::EventIndex(rName);
1284 FD_DG(
"HioEnvironment(" <<
this <<
")::SetUl(rEvents)");
1285 EventSet::Iterator it;
1286 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1293 EventAttr attr=BASE::EventAttribute(index);
1294 return (attr.IsY() && attr.IsL());
1298 TEMP bool THIS::IsYl(
const std::string& rName)
const {
1299 EventAttr attr=BASE::EventAttribute(rName);
1300 return (attr.IsY() && attr.IsL());
1305 EventAttr attr=BASE::EventAttribute(index);
1306 return (attr.IsU() && attr.IsL());
1310 TEMP bool THIS::IsUl(
const std::string& rName)
const {
1311 EventAttr attr=BASE::EventAttribute(rName);
1312 return (attr.IsU() && attr.IsL());
1317 FD_DG(
"HioEnvironment(" <<
this <<
")::YlEvents()");
1319 EventSet::Iterator it;
1320 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1321 if(IsYl(*it)) res.
Insert(*it);
1328 FD_DG(
"HioEnvironment(" <<
this <<
")::UlEvents()");
1330 EventSet::Iterator it;
1331 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1332 if(IsUl(*it)) res.
Insert(*it);
1341 EventAttr attr=BASE::EventAttribute(index);
1346 TEMP bool THIS::IsE(
const std::string& rName)
const {
1347 EventAttr attr=BASE::EventAttribute(rName);
1353 EventAttr attr=BASE::EventAttribute(index);
1358 TEMP bool THIS::IsL(
const std::string& rName)
const {
1359 EventAttr attr=BASE::EventAttribute(rName);
1365 FD_DG(
"HioEnvironment(" <<
this <<
")::EEvents()");
1367 EventSet::Iterator it;
1368 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1369 if(IsE(*it)) res.
Insert(*it);
1376 FD_DG(
"HioEnvironment(" <<
this <<
")::EEvents()");
1378 EventSet::Iterator it;
1379 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1380 if(IsL(*it)) res.
Insert(*it);
1393 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQYe(" << index <<
")");
1394 StateAttr attr=BASE::StateAttribute(index);
1403 BASE::pStates->Attribute(index,attr);
1407 TEMP void THIS::SetQYe(
const std::string& rName) {
1408 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQYe(" << rName <<
")");
1409 Idx index = BASE::StateIndex(rName);
1415 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQYe(rStates)");
1416 StateSet::Iterator sit;
1417 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1424 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQYe(" << index <<
")");
1425 StateAttr attr=BASE::StateAttribute(index);
1428 BASE::pStates->Attribute(index,attr);
1432 TEMP void THIS::ClrQYe(
const std::string& rName) {
1433 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQYe(" << rName <<
")");
1434 Idx index = BASE::StateIndex(rName);
1440 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQYe(rStates)");
1441 StateSet::Iterator sit;
1442 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1449 StateAttr attr=BASE::StateAttribute(index);
1450 return attr.IsQY() && attr.IsQE() && attr.IsQL();
1454 TEMP bool THIS::IsQYe(
const std::string& rName)
const {
1455 Idx index = BASE::StateIndex(rName);
1456 return IsQYe(index);
1461 FD_DG(
"HioEnvironment(" <<
this <<
")::QYeStates()");
1463 StateSet::Iterator sit;
1464 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1465 if(IsQYe(*sit)) res.
Insert(*sit);
1473 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQUe(" << index <<
")");
1474 StateAttr attr=BASE::StateAttribute(index);
1483 BASE::pStates->Attribute(index,attr);
1487 TEMP void THIS::SetQUe(
const std::string& rName) {
1488 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQUe(" << rName <<
")");
1489 Idx index = BASE::StateIndex(rName);
1495 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQUe(rStates)");
1496 StateSet::Iterator sit;
1497 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1504 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQUe(" << index <<
")");
1505 StateAttr attr=BASE::StateAttribute(index);
1508 BASE::pStates->Attribute(index,attr);
1512 TEMP void THIS::ClrQUe(
const std::string& rName) {
1513 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQUe(" << rName <<
")");
1514 Idx index = BASE::StateIndex(rName);
1520 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQUe(rStates)");
1521 StateSet::Iterator sit;
1522 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1529 StateAttr attr=BASE::StateAttribute(index);
1530 return attr.IsQU() && attr.IsQE();
1534 TEMP bool THIS::IsQUe(
const std::string& rName)
const {
1535 Idx index = BASE::StateIndex(rName);
1536 return IsQUe(index);
1541 FD_DG(
"HioEnvironment(" <<
this <<
")::QUeStates()");
1543 StateSet::Iterator sit;
1544 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1545 if(IsQUe(*sit)) res.
Insert(*sit);
1555 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQUl(" << index <<
")");
1556 StateAttr attr=BASE::StateAttribute(index);
1565 BASE::pStates->Attribute(index,attr);
1569 TEMP void THIS::SetQUl(
const std::string& rName) {
1570 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQUl(" << rName <<
")");
1571 Idx index = BASE::StateIndex(rName);
1577 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQUl(rStates)");
1578 StateSet::Iterator sit;
1579 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1586 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQUl(" << index <<
")");
1587 StateAttr attr=BASE::StateAttribute(index);
1590 BASE::pStates->Attribute(index,attr);
1594 TEMP void THIS::ClrQUl(
const std::string& rName) {
1595 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQUl(" << rName <<
")");
1596 Idx index = BASE::StateIndex(rName);
1602 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQUl(rStates)");
1603 StateSet::Iterator sit;
1604 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1611 StateAttr attr=BASE::StateAttribute(index);
1612 return attr.IsQU() && attr.IsQL();
1616 TEMP bool THIS::IsQUl(
const std::string& rName)
const {
1617 Idx index = BASE::StateIndex(rName);
1618 return IsQUl(index);
1623 FD_DG(
"HioEnvironment(" <<
this <<
")::QUlStates()");
1625 StateSet::Iterator sit;
1626 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1627 if(IsQUl(*sit)) res.
Insert(*sit);
1636 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQYlUe(" << index <<
")");
1637 StateAttr attr=BASE::StateAttribute(index);
1646 BASE::pStates->Attribute(index,attr);
1650 TEMP void THIS::SetQYlUe(
const std::string& rName) {
1651 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQYlUe(" << rName <<
")");
1652 Idx index = BASE::StateIndex(rName);
1658 FD_DG(
"HioEnvironment(" <<
this <<
")::SetQYlUe(rStates)");
1659 StateSet::Iterator sit;
1660 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1667 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQYlUe(" << index <<
")");
1668 StateAttr attr=BASE::StateAttribute(index);
1670 BASE::pStates->Attribute(index,attr);
1674 TEMP void THIS::ClrQYlUe(
const std::string& rName) {
1675 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQYlUe(" << rName <<
")");
1676 Idx index = BASE::StateIndex(rName);
1682 FD_DG(
"HioEnvironment(" <<
this <<
")::ClrQYlUe(rStates)");
1683 StateSet::Iterator sit;
1684 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1691 StateAttr attr=BASE::StateAttribute(index);
1692 return attr.IsQYlUe();
1696 TEMP bool THIS::IsQYlUe(
const std::string& rName)
const {
1697 Idx index = BASE::StateIndex(rName);
1698 return IsQYlUe(index);
1703 FD_DG(
"HioEnvironment(" <<
this <<
")::QYlUeStates()");
1705 StateSet::Iterator sit;
1706 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1707 if(IsQYlUe(*sit)) res.
Insert(*sit);
1714 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(" << index <<
")");
1715 StateAttr attr=BASE::StateAttribute(index);
1717 BASE::pStates->Attribute(index,attr);
1721 TEMP void THIS::SetErr(
const std::string& rName) {
1722 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(" << rName <<
")");
1723 Idx index = BASE::StateIndex(rName);
1729 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(rStates)");
1730 StateSet::Iterator sit;
1731 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1738 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(" << index <<
")");
1739 StateAttr attr=BASE::StateAttribute(index);
1741 BASE::pStates->Attribute(index,attr);
1745 TEMP void THIS::ClrErr(
const std::string& rName) {
1746 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(" << rName <<
")");
1747 Idx index = BASE::StateIndex(rName);
1753 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(rStates)");
1754 StateSet::Iterator sit;
1755 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1762 StateAttr attr=BASE::StateAttribute(index);
1763 return attr.IsErr();
1767 TEMP bool THIS::IsErr(
const std::string& rName)
const {
1768 Idx index = BASE::StateIndex(rName);
1769 return IsErr(index);
1774 FD_DG(
"HioPlant(" <<
this <<
")::ErrStates()");
1776 StateSet::Iterator sit;
1777 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1778 if(IsErr(*sit)) res.
Insert(*sit);
1832 std::string& rReportStr);
1888 #define HIOENVIRONMENT_H
bool Insert(const Idx &rIndex)
void InsYeEvent(Idx index)
void SetQYe(const std::string &rName)
Idx InsUeEvent(const std::string &rName)
void SetErr(const StateSet &rStates)
void SetYl(const std::string &rName)
bool IsUl(const std::string &rName) const
void InsUeEvent(Idx index)
bool IsU(const std::string &rName) const
void ClrQUl(const StateSet &rStates)
virtual THioEnvironment * Copy(void) const
void InsUlEvent(Idx index)
void SetQUe(const std::string &rName)
EventSet YEvents(void) const
void SetQYe(const StateSet &rStates)
bool IsL(Idx index) const
bool IsQYe(Idx index) const
EventSet UeEvents(void) const
void SetUe(const std::string &rName)
bool IsQYlUe(Idx index) const
bool IsUl(Idx index) const
EventSet YeEvents(void) const
bool IsL(const std::string &rName) const
void SetQYlUe(const StateSet &rStates)
THioEnvironment(const Generator &rOtherGen, const EventSet &rYl, const EventSet &rUl, const EventSet &rYe, const EventSet &rUe)
bool IsYl(const std::string &rName) const
bool IsYe(Idx index) const
StateSet QYeStates(void) const
bool IsQUl(const std::string &rName) const
void SetYe(const std::string &rName)
EventSet LEvents(void) const
void SetYe(const EventSet &rEvents)
bool IsErr(const std::string &rName) const
virtual bool UpdateAttributes(void)
void SetQUl(const StateSet &rStates)
void ClrQUl(const std::string &rName)
bool IsQUe(const std::string &rName) const
Idx InsYlEvent(const std::string &rName)
bool IsYl(Idx index) const
bool IsQUe(Idx index) const
bool IsQYe(const std::string &rName) const
void SetQUl(const std::string &rName)
EventSet UlEvents(void) const
bool IsQUl(Idx index) const
bool IsErr(Idx index) const
EventSet UEvents(void) const
bool IsUe(Idx index) const
void ClrQUe(const StateSet &rStates)
void InsYlEvent(Idx index)
bool IsU(Idx index) const
void SetUl(const std::string &rName)
bool IsY(const std::string &rName) const
bool IsY(Idx index) const
Idx InsYeEvent(const std::string &rName)
void SetQYlUe(const std::string &rName)
StateSet QYlUeStates(void) const
void SetUl(const EventSet &rEvents)
bool IsUe(const std::string &rName) const
StateSet QUlStates(void) const
StateSet ErrStates(void) const
void ClrQYlUe(const std::string &rName)
THioEnvironment(const std::string &rFileName)
void SetUe(const EventSet &rEvents)
void SetQUe(const StateSet &rStates)
THioEnvironment(const Generator &rOtherGen)
bool IsE(const std::string &rName) const
EventSet YlEvents(void) const
THioEnvironment NewHioEnvironment(void) const
void ClrErr(const StateSet &rStates)
THioEnvironment * New(void) const
void ClrErr(const std::string &rName)
THioEnvironment(const THioEnvironment &rOtherGen)
EventSet EEvents(void) const
void ClrQYe(const StateSet &rStates)
void ClrQYe(const std::string &rName)
StateSet QUeStates(void) const
bool IsYe(const std::string &rName) const
Idx InsUlEvent(const std::string &rName)
void SetYl(const EventSet &rEvents)
void SetErr(const std::string &rName)
bool IsE(Idx index) const
void ClrQUe(const std::string &rName)
void ClrQYlUe(const StateSet &rStates)
bool IsQYlUe(const std::string &rName) const
Iterator Begin(void) const
void HioStatePartition(HioConstraint &rHioConstraint)
bool IsHioEnvironmentForm(HioEnvironment &rHioEnvironment, StateSet &rQYe, StateSet &rQUe, StateSet &rQUl, StateSet &rQYlUe, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)
THioEnvironment< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioEnvironment