11 #ifndef FAUDES_HIO_CONTROLLER_H
12 #define FAUDES_HIO_CONTROLLER_H
47 template <
class GlobalAttr,
class StateAttr,
class EventAttr,
class TransAttr>
202 void SetYp(
const std::string& rName);
226 void SetUp(
const std::string& rName);
256 bool IsYp(
const std::string& rName)
const;
278 bool IsUp(
const std::string& rName)
const;
352 void SetYc(
const std::string& rName);
376 void SetUc(
const std::string& rName);
406 bool IsYc(
const std::string& rName)
const;
428 bool IsUc(
const std::string& rName)
const;
457 bool IsY(
Idx index)
const;
468 bool IsY(
const std::string& rName)
const;
487 bool IsU(
Idx index)
const;
498 bool IsU(
const std::string& rName)
const;
517 bool IsP(
Idx index)
const;
528 bool IsP(
const std::string& rName)
const;
547 bool IsC(
Idx index)
const;
558 bool IsC(
const std::string& rName)
const;
586 void SetQYp(
const std::string& rName);
609 void ClrQYP(
const std::string& rName);
638 bool IsQYP(
const std::string& rName)
const;
662 void SetQUp(
const std::string& rName);
685 void ClrQUp(
const std::string& rName);
714 bool IsQUp(
const std::string& rName)
const;
738 void SetQUc(
const std::string& rName);
761 void ClrQUc(
const std::string& rName);
790 bool IsQUc(
const std::string& rName)
const;
814 void SetQYcUp(
const std::string& rName);
837 void ClrQYcUp(
const std::string& rName);
866 bool IsQYcUp(
const std::string& rName)
const;
890 void SetErr(
const std::string& rName);
913 void ClrErr(
const std::string& rName);
942 bool IsErr(
const std::string& rName)
const;
970 #define THIS THioController<GlobalAttr, StateAttr, EventAttr, TransAttr>
971 #define BASE TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
972 #define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
977 FD_DG(
"HioController(" <<
this <<
")::HioController()");
982 FD_DG(
"HioController(" <<
this <<
")::HioController(rOtherGen)");
987 FD_DG(
"HioController(" <<
this <<
")::HioController(rOtherGen)");
997 ) :
BASE(rOtherGen) {
998 FD_DG(
"HioController(" <<
this <<
")::HioController(rOtherGen)");
1006 TEMP THIS::THioController(
const std::string& rFileName) :
BASE(rFileName) {
1007 FD_DG(
"HioController(" <<
this <<
")::HioController(rFilename) : done");
1015 res->EventSymbolTablep(BASE::mpEventSymbolTable);
1016 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
1022 return new THIS(*
this);
1028 THIS res= BASE::NewAGen();
1036 EventAttr attr=BASE::EventAttribute(index);
1041 TEMP bool THIS::IsY(
const std::string& rName)
const {
1042 EventAttr attr=BASE::EventAttribute(rName);
1048 EventAttr attr=BASE::EventAttribute(index);
1053 TEMP bool THIS::IsU(
const std::string& rName)
const {
1054 EventAttr attr=BASE::EventAttribute(rName);
1060 FD_DG(
"HioController(" <<
this <<
")::YEvents()");
1062 EventSet::Iterator it;
1063 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1064 if(IsY(*it)) res.
Insert(*it);
1071 FD_DG(
"HioController(" <<
this <<
")::UEvents()");
1073 EventSet::Iterator it;
1074 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1075 if(IsU(*it)) res.
Insert(*it);
1084 FD_DG(
"HioController(" <<
this <<
")::InsYpEvent(" << index <<
")");
1088 BASE::InsEvent(index,attr);
1092 TEMP Idx THIS::InsYpEvent(
const std::string& rName) {
1093 FD_DG(
"HioController(" <<
this <<
")::InsYpEvent(" << rName <<
")");
1097 return BASE::InsEvent(rName,attr);
1102 FD_DG(
"HioController(" <<
this <<
")::InsUpEvent(" << index <<
")");
1106 BASE::InsEvent(index,attr);
1110 TEMP Idx THIS::InsUpEvent(
const std::string& rName) {
1111 FD_DG(
"HioController(" <<
this <<
")::InsUpEvent(" << rName <<
")");
1115 return BASE::InsEvent(rName,attr);
1120 FD_DG(
"HioController(" <<
this <<
")::SetYp(" << index <<
")");
1121 EventAttr attr=BASE::EventAttribute(index);
1124 BASE::pAlphabet->Attribute(index,attr);
1128 TEMP void THIS::SetYp(
const std::string& rName) {
1129 FD_DG(
"HioController(" <<
this <<
")::SetYp(" << rName <<
")");
1130 Idx index = BASE::EventIndex(rName);
1136 FD_DG(
"HioController(" <<
this <<
")::SetYp(rEvents)");
1137 EventSet::Iterator it;
1138 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1145 FD_DG(
"HioController(" <<
this <<
")::SetUp(" << index <<
")");
1146 EventAttr attr=BASE::EventAttribute(index);
1149 BASE::pAlphabet->Attribute(index,attr);
1153 TEMP void THIS::SetUp(
const std::string& rName) {
1154 FD_DG(
"HioController(" <<
this <<
")::SetUp(" << rName <<
")");
1155 Idx index = BASE::EventIndex(rName);
1161 FD_DG(
"HioController(" <<
this <<
")::SetUp(rEvents)");
1162 EventSet::Iterator it;
1163 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1170 EventAttr attr=BASE::EventAttribute(index);
1171 return (attr.IsY() && attr.IsP());
1175 TEMP bool THIS::IsYp(
const std::string& rName)
const {
1176 EventAttr attr=BASE::EventAttribute(rName);
1177 return (attr.IsY() && attr.IsP());
1182 EventAttr attr=BASE::EventAttribute(index);
1183 return (attr.IsU() && attr.IsP());
1187 TEMP bool THIS::IsUp(
const std::string& rName)
const {
1188 EventAttr attr=BASE::EventAttribute(rName);
1189 return (attr.IsU() && attr.IsP());
1194 FD_DG(
"HioController(" <<
this <<
")::YpEvents()");
1196 EventSet::Iterator it;
1197 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1198 if(IsYp(*it)) res.
Insert(*it);
1205 FD_DG(
"HioController(" <<
this <<
")::UpEvents()");
1207 EventSet::Iterator it;
1208 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1209 if(IsUp(*it)) res.
Insert(*it);
1218 FD_DG(
"HioController(" <<
this <<
")::InsYcEvent(" << index <<
")");
1222 BASE::InsEvent(index,attr);
1226 TEMP Idx THIS::InsYcEvent(
const std::string& rName) {
1227 FD_DG(
"HioController(" <<
this <<
")::InsYcEvent(" << rName <<
")");
1231 return BASE::InsEvent(rName,attr);
1236 FD_DG(
"HioController(" <<
this <<
")::InsUcEvent(" << index <<
")");
1240 BASE::InsEvent(index,attr);
1244 TEMP Idx THIS::InsUcEvent(
const std::string& rName) {
1245 FD_DG(
"HioController(" <<
this <<
")::InsUcEvent(" << rName <<
")");
1249 return BASE::InsEvent(rName,attr);
1254 FD_DG(
"HioController(" <<
this <<
")::SetYc(" << index <<
")");
1255 EventAttr attr=BASE::EventAttribute(index);
1258 BASE::pAlphabet->Attribute(index,attr);
1262 TEMP void THIS::SetYc(
const std::string& rName) {
1263 FD_DG(
"HioController(" <<
this <<
")::SetYc(" << rName <<
")");
1264 Idx index = BASE::EventIndex(rName);
1270 FD_DG(
"HioController(" <<
this <<
")::SetYc(rEvents)");
1271 EventSet::Iterator it;
1272 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1279 FD_DG(
"HioController(" <<
this <<
")::SetUc(" << index <<
")");
1280 EventAttr attr=BASE::EventAttribute(index);
1283 BASE::pAlphabet->Attribute(index,attr);
1287 TEMP void THIS::SetUc(
const std::string& rName) {
1288 FD_DG(
"HioController(" <<
this <<
")::SetUc(" << rName <<
")");
1289 Idx index = BASE::EventIndex(rName);
1295 FD_DG(
"HioController(" <<
this <<
")::SetUc(rEvents)");
1296 EventSet::Iterator it;
1297 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1304 EventAttr attr=BASE::EventAttribute(index);
1305 return (attr.IsY() && attr.IsC());
1309 TEMP bool THIS::IsYc(
const std::string& rName)
const {
1310 EventAttr attr=BASE::EventAttribute(rName);
1311 return (attr.IsY() && attr.IsC());
1316 EventAttr attr=BASE::EventAttribute(index);
1317 return (attr.IsU() && attr.IsC());
1321 TEMP bool THIS::IsUc(
const std::string& rName)
const {
1322 EventAttr attr=BASE::EventAttribute(rName);
1323 return (attr.IsU() && attr.IsC());
1328 FD_DG(
"HioController(" <<
this <<
")::YcEvents()");
1330 EventSet::Iterator it;
1331 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1332 if(IsYc(*it)) res.
Insert(*it);
1339 FD_DG(
"HioController(" <<
this <<
")::UcEvents()");
1341 EventSet::Iterator it;
1342 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1343 if(IsUc(*it)) res.
Insert(*it);
1352 EventAttr attr=BASE::EventAttribute(index);
1357 TEMP bool THIS::IsP(
const std::string& rName)
const {
1358 EventAttr attr=BASE::EventAttribute(rName);
1364 EventAttr attr=BASE::EventAttribute(index);
1369 TEMP bool THIS::IsC(
const std::string& rName)
const {
1370 EventAttr attr=BASE::EventAttribute(rName);
1376 FD_DG(
"HioController(" <<
this <<
")::PEvents()");
1378 EventSet::Iterator it;
1379 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1380 if(IsP(*it)) res.
Insert(*it);
1387 FD_DG(
"HioController(" <<
this <<
")::EEvents()");
1389 EventSet::Iterator it;
1390 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1391 if(IsC(*it)) res.
Insert(*it);
1404 FD_DG(
"HioController(" <<
this <<
")::" << index <<
")");
1405 StateAttr attr=BASE::StateAttribute(index);
1414 BASE::pStates->Attribute(index,attr);
1418 TEMP void THIS::SetQYp(
const std::string& rName) {
1419 FD_DG(
"HioController(" <<
this <<
")::" << rName <<
")");
1420 Idx index = BASE::StateIndex(rName);
1426 FD_DG(
"HioController(" <<
this <<
")::rStates)");
1427 StateSet::Iterator sit;
1428 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1435 FD_DG(
"HioController(" <<
this <<
")::ClrQYP(" << index <<
")");
1436 StateAttr attr=BASE::StateAttribute(index);
1439 BASE::pStates->Attribute(index,attr);
1443 TEMP void THIS::ClrQYP(
const std::string& rName) {
1444 FD_DG(
"HioController(" <<
this <<
")::ClrQYP(" << rName <<
")");
1445 Idx index = BASE::StateIndex(rName);
1451 FD_DG(
"HioController(" <<
this <<
")::ClrQYP(rStates)");
1452 StateSet::Iterator sit;
1453 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1460 StateAttr attr=BASE::StateAttribute(index);
1461 return attr.IsQY() && attr.IsQP() && attr.IsQC();
1465 TEMP bool THIS::IsQYP(
const std::string& rName)
const {
1466 Idx index = BASE::StateIndex(rName);
1467 return IsQYP(index);
1472 FD_DG(
"HioController(" <<
this <<
")::QYPStates()");
1474 StateSet::Iterator sit;
1475 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1476 if(IsQYP(*sit)) res.
Insert(*sit);
1484 FD_DG(
"HioController(" <<
this <<
")::SetQUp(" << index <<
")");
1485 StateAttr attr=BASE::StateAttribute(index);
1494 BASE::pStates->Attribute(index,attr);
1498 TEMP void THIS::SetQUp(
const std::string& rName) {
1499 FD_DG(
"HioController(" <<
this <<
")::SetQUp(" << rName <<
")");
1500 Idx index = BASE::StateIndex(rName);
1506 FD_DG(
"HioController(" <<
this <<
")::SetQUp(rStates)");
1507 StateSet::Iterator sit;
1508 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1515 FD_DG(
"HioController(" <<
this <<
")::ClrQUp(" << index <<
")");
1516 StateAttr attr=BASE::StateAttribute(index);
1519 BASE::pStates->Attribute(index,attr);
1523 TEMP void THIS::ClrQUp(
const std::string& rName) {
1524 FD_DG(
"HioController(" <<
this <<
")::ClrQUp(" << rName <<
")");
1525 Idx index = BASE::StateIndex(rName);
1531 FD_DG(
"HioController(" <<
this <<
")::ClrQUp(rStates)");
1532 StateSet::Iterator sit;
1533 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1540 StateAttr attr=BASE::StateAttribute(index);
1541 return attr.IsQU() && attr.IsQP();
1545 TEMP bool THIS::IsQUp(
const std::string& rName)
const {
1546 Idx index = BASE::StateIndex(rName);
1547 return IsQUp(index);
1552 FD_DG(
"HioController(" <<
this <<
")::QUpStates()");
1554 StateSet::Iterator sit;
1555 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1556 if(IsQUp(*sit)) res.
Insert(*sit);
1566 FD_DG(
"HioController(" <<
this <<
")::SetQUc(" << index <<
")");
1567 StateAttr attr=BASE::StateAttribute(index);
1576 BASE::pStates->Attribute(index,attr);
1580 TEMP void THIS::SetQUc(
const std::string& rName) {
1581 FD_DG(
"HioController(" <<
this <<
")::SetQUc(" << rName <<
")");
1582 Idx index = BASE::StateIndex(rName);
1588 FD_DG(
"HioController(" <<
this <<
")::SetQUc(rStates)");
1589 StateSet::Iterator sit;
1590 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1597 FD_DG(
"HioController(" <<
this <<
")::ClrQUc(" << index <<
")");
1598 StateAttr attr=BASE::StateAttribute(index);
1601 BASE::pStates->Attribute(index,attr);
1605 TEMP void THIS::ClrQUc(
const std::string& rName) {
1606 FD_DG(
"HioController(" <<
this <<
")::ClrQUc(" << rName <<
")");
1607 Idx index = BASE::StateIndex(rName);
1613 FD_DG(
"HioController(" <<
this <<
")::ClrQUc(rStates)");
1614 StateSet::Iterator sit;
1615 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1622 StateAttr attr=BASE::StateAttribute(index);
1623 return attr.IsQU() && attr.IsQC();
1627 TEMP bool THIS::IsQUc(
const std::string& rName)
const {
1628 Idx index = BASE::StateIndex(rName);
1629 return IsQUc(index);
1634 FD_DG(
"HioController(" <<
this <<
")::QUcStates()");
1636 StateSet::Iterator sit;
1637 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1638 if(IsQUc(*sit)) res.
Insert(*sit);
1647 FD_DG(
"HioController(" <<
this <<
")::SetQYcUp(" << index <<
")");
1648 StateAttr attr=BASE::StateAttribute(index);
1657 BASE::pStates->Attribute(index,attr);
1661 TEMP void THIS::SetQYcUp(
const std::string& rName) {
1662 FD_DG(
"HioController(" <<
this <<
")::SetQYcUp(" << rName <<
")");
1663 Idx index = BASE::StateIndex(rName);
1669 FD_DG(
"HioController(" <<
this <<
")::SetQYcUp(rStates)");
1670 StateSet::Iterator sit;
1671 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1678 FD_DG(
"HioController(" <<
this <<
")::ClrQYcUp(" << index <<
")");
1679 StateAttr attr=BASE::StateAttribute(index);
1681 BASE::pStates->Attribute(index,attr);
1685 TEMP void THIS::ClrQYcUp(
const std::string& rName) {
1686 FD_DG(
"HioController(" <<
this <<
")::ClrQYcUp(" << rName <<
")");
1687 Idx index = BASE::StateIndex(rName);
1693 FD_DG(
"HioController(" <<
this <<
")::ClrQYcUp(rStates)");
1694 StateSet::Iterator sit;
1695 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1702 StateAttr attr=BASE::StateAttribute(index);
1703 return attr.IsQYcUp();
1707 TEMP bool THIS::IsQYcUp(
const std::string& rName)
const {
1708 Idx index = BASE::StateIndex(rName);
1709 return IsQYcUp(index);
1714 FD_DG(
"HioController(" <<
this <<
")::QYcUpStates()");
1716 StateSet::Iterator sit;
1717 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1718 if(IsQYcUp(*sit)) res.
Insert(*sit);
1725 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(" << index <<
")");
1726 StateAttr attr=BASE::StateAttribute(index);
1728 BASE::pStates->Attribute(index,attr);
1732 TEMP void THIS::SetErr(
const std::string& rName) {
1733 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(" << rName <<
")");
1734 Idx index = BASE::StateIndex(rName);
1740 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(rStates)");
1741 StateSet::Iterator sit;
1742 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1749 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(" << index <<
")");
1750 StateAttr attr=BASE::StateAttribute(index);
1752 BASE::pStates->Attribute(index,attr);
1756 TEMP void THIS::ClrErr(
const std::string& rName) {
1757 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(" << rName <<
")");
1758 Idx index = BASE::StateIndex(rName);
1764 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(rStates)");
1765 StateSet::Iterator sit;
1766 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1773 StateAttr attr=BASE::StateAttribute(index);
1774 return attr.IsErr();
1778 TEMP bool THIS::IsErr(
const std::string& rName)
const {
1779 Idx index = BASE::StateIndex(rName);
1780 return IsErr(index);
1785 FD_DG(
"HioPlant(" <<
this <<
")::ErrStates()");
1787 StateSet::Iterator sit;
1788 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1789 if(IsErr(*sit)) res.
Insert(*sit);
1843 std::string& rReportStr);