11 #ifndef FAUDES_HIO_CONTROLLER_H
12 #define FAUDES_HIO_CONTROLLER_H
47 template <
class GlobalAttr,
class StateAttr,
class EventAttr,
class TransAttr>
192 void SetYp(
const std::string& rName);
216 void SetUp(
const std::string& rName);
246 bool IsYp(
const std::string& rName)
const;
268 bool IsUp(
const std::string& rName)
const;
342 void SetYc(
const std::string& rName);
366 void SetUc(
const std::string& rName);
396 bool IsYc(
const std::string& rName)
const;
418 bool IsUc(
const std::string& rName)
const;
458 bool IsY(
const std::string& rName)
const;
488 bool IsU(
const std::string& rName)
const;
518 bool IsP(
const std::string& rName)
const;
548 bool IsC(
const std::string& rName)
const;
628 bool IsQYP(
const std::string& rName)
const;
704 bool IsQUp(
const std::string& rName)
const;
780 bool IsQUc(
const std::string& rName)
const;
932 bool IsErr(
const std::string& rName)
const;
960 #define THIS THioController<GlobalAttr, StateAttr, EventAttr, TransAttr>
961 #define BASE TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
962 #define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
967 FD_DG(
"HioController(" <<
this <<
")::HioController()");
972 FD_DG(
"HioController(" <<
this <<
")::HioController(rOtherGen)");
977 FD_DG(
"HioController(" <<
this <<
")::HioController(rOtherGen)");
987 ) :
BASE(rOtherGen) {
988 FD_DG(
"HioController(" <<
this <<
")::HioController(rOtherGen)");
996 TEMP THIS::THioController(
const std::string& rFileName) :
BASE(rFileName) {
997 FD_DG(
"HioController(" <<
this <<
")::HioController(rFilename) : done");
1005 res->EventSymbolTablep(BASE::mpEventSymbolTable);
1006 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
1012 return new THIS(*
this);
1018 THIS res= BASE::NewAGen();
1026 EventAttr attr=BASE::EventAttribute(index);
1031 TEMP bool THIS::IsY(
const std::string& rName)
const {
1032 EventAttr attr=BASE::EventAttribute(rName);
1038 EventAttr attr=BASE::EventAttribute(index);
1043 TEMP bool THIS::IsU(
const std::string& rName)
const {
1044 EventAttr attr=BASE::EventAttribute(rName);
1050 FD_DG(
"HioController(" <<
this <<
")::YEvents()");
1052 EventSet::Iterator it;
1053 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1054 if(IsY(*it)) res.
Insert(*it);
1061 FD_DG(
"HioController(" <<
this <<
")::UEvents()");
1063 EventSet::Iterator it;
1064 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1065 if(IsU(*it)) res.
Insert(*it);
1074 FD_DG(
"HioController(" <<
this <<
")::InsYpEvent(" << index <<
")");
1078 BASE::InsEvent(index,attr);
1082 TEMP Idx THIS::InsYpEvent(
const std::string& rName) {
1083 FD_DG(
"HioController(" <<
this <<
")::InsYpEvent(" << rName <<
")");
1087 return BASE::InsEvent(rName,attr);
1092 FD_DG(
"HioController(" <<
this <<
")::InsUpEvent(" << index <<
")");
1096 BASE::InsEvent(index,attr);
1100 TEMP Idx THIS::InsUpEvent(
const std::string& rName) {
1101 FD_DG(
"HioController(" <<
this <<
")::InsUpEvent(" << rName <<
")");
1105 return BASE::InsEvent(rName,attr);
1110 FD_DG(
"HioController(" <<
this <<
")::SetYp(" << index <<
")");
1111 EventAttr attr=BASE::EventAttribute(index);
1114 BASE::pAlphabet->Attribute(index,attr);
1118 TEMP void THIS::SetYp(
const std::string& rName) {
1119 FD_DG(
"HioController(" <<
this <<
")::SetYp(" << rName <<
")");
1120 Idx index = BASE::EventIndex(rName);
1126 FD_DG(
"HioController(" <<
this <<
")::SetYp(rEvents)");
1127 EventSet::Iterator it;
1128 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1135 FD_DG(
"HioController(" <<
this <<
")::SetUp(" << index <<
")");
1136 EventAttr attr=BASE::EventAttribute(index);
1139 BASE::pAlphabet->Attribute(index,attr);
1143 TEMP void THIS::SetUp(
const std::string& rName) {
1144 FD_DG(
"HioController(" <<
this <<
")::SetUp(" << rName <<
")");
1145 Idx index = BASE::EventIndex(rName);
1151 FD_DG(
"HioController(" <<
this <<
")::SetUp(rEvents)");
1152 EventSet::Iterator it;
1153 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1160 EventAttr attr=BASE::EventAttribute(index);
1161 return (attr.IsY() && attr.IsP());
1165 TEMP bool THIS::IsYp(
const std::string& rName)
const {
1166 EventAttr attr=BASE::EventAttribute(rName);
1167 return (attr.IsY() && attr.IsP());
1172 EventAttr attr=BASE::EventAttribute(index);
1173 return (attr.IsU() && attr.IsP());
1177 TEMP bool THIS::IsUp(
const std::string& rName)
const {
1178 EventAttr attr=BASE::EventAttribute(rName);
1179 return (attr.IsU() && attr.IsP());
1184 FD_DG(
"HioController(" <<
this <<
")::YpEvents()");
1186 EventSet::Iterator it;
1187 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1188 if(IsYp(*it)) res.
Insert(*it);
1195 FD_DG(
"HioController(" <<
this <<
")::UpEvents()");
1197 EventSet::Iterator it;
1198 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1199 if(IsUp(*it)) res.
Insert(*it);
1208 FD_DG(
"HioController(" <<
this <<
")::InsYcEvent(" << index <<
")");
1212 BASE::InsEvent(index,attr);
1216 TEMP Idx THIS::InsYcEvent(
const std::string& rName) {
1217 FD_DG(
"HioController(" <<
this <<
")::InsYcEvent(" << rName <<
")");
1221 return BASE::InsEvent(rName,attr);
1226 FD_DG(
"HioController(" <<
this <<
")::InsUcEvent(" << index <<
")");
1230 BASE::InsEvent(index,attr);
1234 TEMP Idx THIS::InsUcEvent(
const std::string& rName) {
1235 FD_DG(
"HioController(" <<
this <<
")::InsUcEvent(" << rName <<
")");
1239 return BASE::InsEvent(rName,attr);
1244 FD_DG(
"HioController(" <<
this <<
")::SetYc(" << index <<
")");
1245 EventAttr attr=BASE::EventAttribute(index);
1248 BASE::pAlphabet->Attribute(index,attr);
1252 TEMP void THIS::SetYc(
const std::string& rName) {
1253 FD_DG(
"HioController(" <<
this <<
")::SetYc(" << rName <<
")");
1254 Idx index = BASE::EventIndex(rName);
1260 FD_DG(
"HioController(" <<
this <<
")::SetYc(rEvents)");
1261 EventSet::Iterator it;
1262 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1269 FD_DG(
"HioController(" <<
this <<
")::SetUc(" << index <<
")");
1270 EventAttr attr=BASE::EventAttribute(index);
1273 BASE::pAlphabet->Attribute(index,attr);
1277 TEMP void THIS::SetUc(
const std::string& rName) {
1278 FD_DG(
"HioController(" <<
this <<
")::SetUc(" << rName <<
")");
1279 Idx index = BASE::EventIndex(rName);
1285 FD_DG(
"HioController(" <<
this <<
")::SetUc(rEvents)");
1286 EventSet::Iterator it;
1287 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1294 EventAttr attr=BASE::EventAttribute(index);
1295 return (attr.IsY() && attr.IsC());
1299 TEMP bool THIS::IsYc(
const std::string& rName)
const {
1300 EventAttr attr=BASE::EventAttribute(rName);
1301 return (attr.IsY() && attr.IsC());
1306 EventAttr attr=BASE::EventAttribute(index);
1307 return (attr.IsU() && attr.IsC());
1311 TEMP bool THIS::IsUc(
const std::string& rName)
const {
1312 EventAttr attr=BASE::EventAttribute(rName);
1313 return (attr.IsU() && attr.IsC());
1318 FD_DG(
"HioController(" <<
this <<
")::YcEvents()");
1320 EventSet::Iterator it;
1321 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1322 if(IsYc(*it)) res.
Insert(*it);
1329 FD_DG(
"HioController(" <<
this <<
")::UcEvents()");
1331 EventSet::Iterator it;
1332 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1333 if(IsUc(*it)) res.
Insert(*it);
1342 EventAttr attr=BASE::EventAttribute(index);
1347 TEMP bool THIS::IsP(
const std::string& rName)
const {
1348 EventAttr attr=BASE::EventAttribute(rName);
1354 EventAttr attr=BASE::EventAttribute(index);
1359 TEMP bool THIS::IsC(
const std::string& rName)
const {
1360 EventAttr attr=BASE::EventAttribute(rName);
1366 FD_DG(
"HioController(" <<
this <<
")::PEvents()");
1368 EventSet::Iterator it;
1369 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1370 if(IsP(*it)) res.
Insert(*it);
1377 FD_DG(
"HioController(" <<
this <<
")::EEvents()");
1379 EventSet::Iterator it;
1380 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1381 if(IsC(*it)) res.
Insert(*it);
1394 FD_DG(
"HioController(" <<
this <<
")::" << index <<
")");
1395 StateAttr attr=BASE::StateAttribute(index);
1404 BASE::pStates->Attribute(index,attr);
1408 TEMP void THIS::SetQYp(
const std::string& rName) {
1409 FD_DG(
"HioController(" <<
this <<
")::" << rName <<
")");
1410 Idx index = BASE::StateIndex(rName);
1416 FD_DG(
"HioController(" <<
this <<
")::rStates)");
1417 StateSet::Iterator sit;
1418 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1425 FD_DG(
"HioController(" <<
this <<
")::ClrQYP(" << index <<
")");
1426 StateAttr attr=BASE::StateAttribute(index);
1429 BASE::pStates->Attribute(index,attr);
1433 TEMP void THIS::ClrQYP(
const std::string& rName) {
1434 FD_DG(
"HioController(" <<
this <<
")::ClrQYP(" << rName <<
")");
1435 Idx index = BASE::StateIndex(rName);
1441 FD_DG(
"HioController(" <<
this <<
")::ClrQYP(rStates)");
1442 StateSet::Iterator sit;
1443 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1450 StateAttr attr=BASE::StateAttribute(index);
1451 return attr.IsQY() && attr.IsQP() && attr.IsQC();
1455 TEMP bool THIS::IsQYP(
const std::string& rName)
const {
1456 Idx index = BASE::StateIndex(rName);
1457 return IsQYP(index);
1462 FD_DG(
"HioController(" <<
this <<
")::QYPStates()");
1464 StateSet::Iterator sit;
1465 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1466 if(IsQYP(*sit)) res.
Insert(*sit);
1474 FD_DG(
"HioController(" <<
this <<
")::SetQUp(" << index <<
")");
1475 StateAttr attr=BASE::StateAttribute(index);
1484 BASE::pStates->Attribute(index,attr);
1488 TEMP void THIS::SetQUp(
const std::string& rName) {
1489 FD_DG(
"HioController(" <<
this <<
")::SetQUp(" << rName <<
")");
1490 Idx index = BASE::StateIndex(rName);
1496 FD_DG(
"HioController(" <<
this <<
")::SetQUp(rStates)");
1497 StateSet::Iterator sit;
1498 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1505 FD_DG(
"HioController(" <<
this <<
")::ClrQUp(" << index <<
")");
1506 StateAttr attr=BASE::StateAttribute(index);
1509 BASE::pStates->Attribute(index,attr);
1513 TEMP void THIS::ClrQUp(
const std::string& rName) {
1514 FD_DG(
"HioController(" <<
this <<
")::ClrQUp(" << rName <<
")");
1515 Idx index = BASE::StateIndex(rName);
1521 FD_DG(
"HioController(" <<
this <<
")::ClrQUp(rStates)");
1522 StateSet::Iterator sit;
1523 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1530 StateAttr attr=BASE::StateAttribute(index);
1531 return attr.IsQU() && attr.IsQP();
1535 TEMP bool THIS::IsQUp(
const std::string& rName)
const {
1536 Idx index = BASE::StateIndex(rName);
1537 return IsQUp(index);
1542 FD_DG(
"HioController(" <<
this <<
")::QUpStates()");
1544 StateSet::Iterator sit;
1545 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1546 if(IsQUp(*sit)) res.
Insert(*sit);
1556 FD_DG(
"HioController(" <<
this <<
")::SetQUc(" << index <<
")");
1557 StateAttr attr=BASE::StateAttribute(index);
1566 BASE::pStates->Attribute(index,attr);
1570 TEMP void THIS::SetQUc(
const std::string& rName) {
1571 FD_DG(
"HioController(" <<
this <<
")::SetQUc(" << rName <<
")");
1572 Idx index = BASE::StateIndex(rName);
1578 FD_DG(
"HioController(" <<
this <<
")::SetQUc(rStates)");
1579 StateSet::Iterator sit;
1580 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1587 FD_DG(
"HioController(" <<
this <<
")::ClrQUc(" << index <<
")");
1588 StateAttr attr=BASE::StateAttribute(index);
1591 BASE::pStates->Attribute(index,attr);
1595 TEMP void THIS::ClrQUc(
const std::string& rName) {
1596 FD_DG(
"HioController(" <<
this <<
")::ClrQUc(" << rName <<
")");
1597 Idx index = BASE::StateIndex(rName);
1603 FD_DG(
"HioController(" <<
this <<
")::ClrQUc(rStates)");
1604 StateSet::Iterator sit;
1605 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1612 StateAttr attr=BASE::StateAttribute(index);
1613 return attr.IsQU() && attr.IsQC();
1617 TEMP bool THIS::IsQUc(
const std::string& rName)
const {
1618 Idx index = BASE::StateIndex(rName);
1619 return IsQUc(index);
1624 FD_DG(
"HioController(" <<
this <<
")::QUcStates()");
1626 StateSet::Iterator sit;
1627 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1628 if(IsQUc(*sit)) res.
Insert(*sit);
1637 FD_DG(
"HioController(" <<
this <<
")::SetQYcUp(" << index <<
")");
1638 StateAttr attr=BASE::StateAttribute(index);
1647 BASE::pStates->Attribute(index,attr);
1651 TEMP void THIS::SetQYcUp(
const std::string& rName) {
1652 FD_DG(
"HioController(" <<
this <<
")::SetQYcUp(" << rName <<
")");
1653 Idx index = BASE::StateIndex(rName);
1659 FD_DG(
"HioController(" <<
this <<
")::SetQYcUp(rStates)");
1660 StateSet::Iterator sit;
1661 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1668 FD_DG(
"HioController(" <<
this <<
")::ClrQYcUp(" << index <<
")");
1669 StateAttr attr=BASE::StateAttribute(index);
1671 BASE::pStates->Attribute(index,attr);
1675 TEMP void THIS::ClrQYcUp(
const std::string& rName) {
1676 FD_DG(
"HioController(" <<
this <<
")::ClrQYcUp(" << rName <<
")");
1677 Idx index = BASE::StateIndex(rName);
1683 FD_DG(
"HioController(" <<
this <<
")::ClrQYcUp(rStates)");
1684 StateSet::Iterator sit;
1685 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1692 StateAttr attr=BASE::StateAttribute(index);
1693 return attr.IsQYcUp();
1697 TEMP bool THIS::IsQYcUp(
const std::string& rName)
const {
1698 Idx index = BASE::StateIndex(rName);
1699 return IsQYcUp(index);
1704 FD_DG(
"HioController(" <<
this <<
")::QYcUpStates()");
1706 StateSet::Iterator sit;
1707 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1708 if(IsQYcUp(*sit)) res.
Insert(*sit);
1715 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(" << index <<
")");
1716 StateAttr attr=BASE::StateAttribute(index);
1718 BASE::pStates->Attribute(index,attr);
1722 TEMP void THIS::SetErr(
const std::string& rName) {
1723 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(" << rName <<
")");
1724 Idx index = BASE::StateIndex(rName);
1730 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(rStates)");
1731 StateSet::Iterator sit;
1732 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1739 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(" << index <<
")");
1740 StateAttr attr=BASE::StateAttribute(index);
1742 BASE::pStates->Attribute(index,attr);
1746 TEMP void THIS::ClrErr(
const std::string& rName) {
1747 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(" << rName <<
")");
1748 Idx index = BASE::StateIndex(rName);
1754 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(rStates)");
1755 StateSet::Iterator sit;
1756 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
1763 StateAttr attr=BASE::StateAttribute(index);
1764 return attr.IsErr();
1768 TEMP bool THIS::IsErr(
const std::string& rName)
const {
1769 Idx index = BASE::StateIndex(rName);
1770 return IsErr(index);
1775 FD_DG(
"HioPlant(" <<
this <<
")::ErrStates()");
1777 StateSet::Iterator sit;
1778 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1779 if(IsErr(*sit)) res.
Insert(*sit);
1833 std::string& rReportStr);
bool Insert(const Idx &rIndex)
void SetQYp(const std::string &rName)
void SetUc(const std::string &rName)
void ClrQUc(const std::string &rName)
StateSet ErrStates(void) const
bool IsP(Idx index) const
EventSet PEvents(void) const
bool IsQYP(Idx index) const
void ClrQYP(const StateSet &rStates)
THioController(const THioController &rOtherGen)
void ClrQUp(const std::string &rName)
void ClrQUp(const StateSet &rStates)
bool IsUc(const std::string &rName) const
void SetYp(const std::string &rName)
bool IsQUp(const std::string &rName) const
EventSet YcEvents(void) const
void SetQUc(const StateSet &rStates)
void InsYcEvent(Idx index)
StateSet QYcUpStates(void) const
bool IsQYcUp(Idx index) const
void SetQUp(const std::string &rName)
StateSet QYPStates(void) const
bool IsYp(const std::string &rName) const
void InsYpEvent(Idx index)
void SetUc(const EventSet &rEvents)
void SetUp(const std::string &rName)
THioController(const Generator &rOtherGen)
bool IsY(const std::string &rName) const
void InsUcEvent(Idx index)
void ClrQYcUp(const std::string &rName)
void SetErr(const std::string &rName)
void ClrQYP(const std::string &rName)
void SetQUc(const std::string &rName)
bool IsU(Idx index) const
bool IsYc(const std::string &rName) const
bool IsY(Idx index) const
EventSet CEvents(void) const
void ClrErr(const StateSet &rStates)
bool IsQYP(const std::string &rName) const
void SetErr(const StateSet &rStates)
bool IsQYcUp(const std::string &rName) const
bool IsUp(const std::string &rName) const
bool IsC(const std::string &rName) const
bool IsU(const std::string &rName) const
virtual THioController * Copy(void) const
void SetYc(const EventSet &rEvents)
Idx InsYcEvent(const std::string &rName)
StateSet QUpStates(void) const
EventSet UcEvents(void) const
THioController(const std::string &rFileName)
void ClrErr(const std::string &rName)
void SetQUp(const StateSet &rStates)
EventSet YEvents(void) const
EventSet UEvents(void) const
THioController NewHioController(void) const
bool IsQUc(const std::string &rName) const
EventSet YpEvents(void) const
bool IsUc(Idx index) const
THioController * New(void) const
void SetUp(const EventSet &rEvents)
Idx InsUpEvent(const std::string &rName)
bool IsUp(Idx index) const
bool IsYp(Idx index) const
bool IsQUp(Idx index) const
void SetYc(const std::string &rName)
void SetQYcUp(const std::string &rName)
void SetQYcUp(const StateSet &rStates)
virtual bool UpdateAttributes(void)
void SetQYp(const StateSet &rStates)
void ClrQYcUp(const StateSet &rStates)
Idx InsYpEvent(const std::string &rName)
void SetYp(const EventSet &rEvents)
THioController(const Generator &rOtherGen, const EventSet &rYc, const EventSet &rUc, const EventSet &rYp, const EventSet &rUp)
Idx InsUcEvent(const std::string &rName)
StateSet QUcStates(void) const
EventSet UpEvents(void) const
void ClrQUc(const StateSet &rStates)
bool IsQUc(Idx index) const
bool IsC(Idx index) const
bool IsP(const std::string &rName) const
void InsUpEvent(Idx index)
bool IsErr(Idx index) const
bool IsYc(Idx index) const
bool IsErr(const std::string &rName) const
Iterator Begin(void) const
THioController< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioController
void HioStatePartition(HioConstraint &rHioConstraint)
bool IsHioControllerForm(HioController &rHioController, StateSet &rQUc, StateSet &rQYP, StateSet &rQUp, StateSet &rQYcUp, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)