24 #ifndef FAUDES_CGENERATOR_H
25 #define FAUDES_CGENERATOR_H
246 #ifdef FAUDES_COMPATIBILITY
272 template <
class GlobalAttr,
class StateAttr,
class EventAttr,
class TransAttr>
330 return dynamic_cast< const TcGenerator*
> (pOther); };
597 bool Observable(
const std::string& rName)
const;
725 bool Forcible(
const std::string& rName)
const;
853 bool Highlevel(
const std::string& rName)
const;
875 bool Lowlevel(
const std::string& rName)
const;
915 #ifdef FAUDES_COMPATIBILITY
935 #define THIS TcGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
936 #define BASE TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
937 #define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
942 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator()");
947 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator(rOtherGen)");
952 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator(rOtherGen)");
956 TEMP THIS::TcGenerator(
const std::string& rFileName) :
BASE(rFileName) {
957 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator(rFilename) : done");
966 res->EventSymbolTablep(BASE::mpEventSymbolTable);
967 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
968 res->mReindexOnWrite=BASE::mReindexOnWrite;
983 THIS res= BASE::NewAGen();
996 TEMP bool THIS::Controllable(
Idx index)
const {
997 EventAttr attr=BASE::EventAttribute(index);
998 return attr.Controllable();
1002 TEMP bool THIS::Controllable(
const std::string& rName)
const {
1003 EventAttr attr=BASE::EventAttribute(rName);
1004 return attr.Controllable();
1009 FD_DG(
"TcGenerator(" <<
this <<
")::InsControllableEvent(" << index <<
")");
1011 attr.SetControllable();
1012 BASE::InsEvent(index,attr);
1016 TEMP Idx THIS::InsControllableEvent(
const std::string& rName) {
1017 FD_DG(
"TcGenerator(" <<
this <<
")::InsControllableEvent(" << rName <<
")");
1019 attr.SetControllable();
1020 return BASE::InsEvent(rName,attr);
1024 TEMP void THIS::InsUncontrollableEvent(
Idx index) {
1025 FD_DG(
"TcGenerator(" <<
this <<
")::InsUncontrollableEvent(" << index <<
")");
1027 attr.ClrControllable();
1028 BASE::InsEvent(index,attr);
1032 TEMP Idx THIS::InsUncontrollableEvent(
const std::string& rName) {
1033 FD_DG(
"TcGenerator(" <<
this <<
")::InsUncontrollableEvent(" << rName <<
")");
1035 attr.ClrControllable();
1036 return BASE::InsEvent(rName,attr);
1041 FD_DG(
"TcGenerator(" <<
this <<
")::SetControllable(" << index <<
")");
1042 EventAttr attr=BASE::EventAttribute(index);
1043 attr.SetControllable();
1044 BASE::pAlphabet->Attribute(index,attr);
1048 TEMP void THIS::SetControllable(
const std::string& rName) {
1049 FD_DG(
"TcGenerator(" <<
this <<
")::SetControllable(" << rName <<
")");
1050 Idx index = BASE::EventIndex(rName);
1051 SetControllable(index);
1056 FD_DG(
"TcGenerator(" <<
this <<
")::SetControllable(rEvents)");
1057 EventSet::Iterator it;
1058 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1059 SetControllable(*it);
1065 FD_DG(
"TcGenerator(" <<
this <<
")::ClrControllable(" << index <<
")");
1066 EventAttr attr=BASE::EventAttribute(index);
1067 attr.ClrControllable();
1068 BASE::pAlphabet->Attribute(index,attr);
1072 TEMP void THIS::ClrControllable(
const std::string& rName) {
1073 FD_DG(
"TcGenerator(" <<
this <<
")::ClrControllable(" << rName <<
")");
1074 Idx index = BASE::EventIndex(rName);
1075 ClrControllable(index);
1080 FD_DG(
"TcGenerator(" <<
this <<
")::ClrControllable(rEvents)");
1081 EventSet::Iterator it;
1082 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1083 ClrControllable(*it);
1089 FD_DG(
"TcGenerator(" <<
this <<
")::ControllableEvents()");
1091 EventSet::Iterator it;
1092 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1093 if(Controllable(*it)) res.
Insert(*it);
1101 FD_DG(
"TcGenerator(" <<
this <<
")::UncontrollableEvents()");
1103 EventSet::Iterator it;
1104 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1105 if(!Controllable(*it)) res.
Insert(*it);
1112 EventAttr attr=BASE::EventAttribute(index);
1113 return attr.Observable();
1117 TEMP bool THIS::Observable(
const std::string& rName)
const {
1118 EventAttr attr=BASE::EventAttribute(rName);
1119 return attr.Observable();
1124 FD_DG(
"TcGenerator(" <<
this <<
")::InsObservableEvent(" << index <<
")");
1126 attr.SetObservable();
1127 BASE::InsEvent(index,attr);
1131 TEMP Idx THIS::InsObservableEvent(
const std::string& rName) {
1132 FD_DG(
"TcGenerator(" <<
this <<
")::InsObservableEvent(" << rName <<
")");
1134 attr.SetObservable();
1135 return BASE::InsEvent(rName,attr);
1140 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnobservableEvent(" << index <<
")");
1142 attr.ClrObservable();
1143 BASE::InsEvent(index,attr);
1147 TEMP Idx THIS::InsUnobservableEvent(
const std::string& rName) {
1148 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnobservableEvent(" << rName <<
")");
1150 attr.ClrObservable();
1151 return BASE::InsEvent(rName,attr);
1156 FD_DG(
"TcGenerator(" <<
this <<
")::SetObservable(" << index <<
")");
1157 EventAttr attr=BASE::EventAttribute(index);
1158 attr.SetObservable();
1159 BASE::pAlphabet->Attribute(index,attr);
1163 TEMP void THIS::SetObservable(
const std::string& rName) {
1164 FD_DG(
"TcGenerator(" <<
this <<
")::SetObservable(" << rName <<
")");
1165 Idx index = BASE::EventIndex(rName);
1166 SetObservable(index);
1171 FD_DG(
"TcGenerator(" <<
this <<
")::SetObservable(rEvents)");
1172 EventSet::Iterator it;
1173 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1180 FD_DG(
"TcGenerator(" <<
this <<
")::ClrObservable(" << index <<
")");
1181 EventAttr attr=BASE::EventAttribute(index);
1182 attr.ClrObservable();
1183 BASE::pAlphabet->Attribute(index,attr);
1187 TEMP void THIS::ClrObservable(
const std::string& rName) {
1188 FD_DG(
"TcGenerator(" <<
this <<
")::ClrObservable(" << rName <<
")");
1189 Idx index = BASE::EventIndex(rName);
1190 ClrObservable(index);
1195 FD_DG(
"TcGenerator(" <<
this <<
")::ClrObservable(rEvents)");
1196 EventSet::Iterator it;
1197 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1204 FD_DG(
"TcGenerator(" <<
this <<
")::ObservableEvents()");
1206 EventSet::Iterator it;
1207 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1208 if(Observable(*it)) res.
Insert(*it);
1216 FD_DG(
"TcGenerator(" <<
this <<
")::UnobservableEvents()");
1218 EventSet::Iterator it;
1219 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1220 if(!Observable(*it)) res.
Insert(*it);
1228 EventAttr attr=BASE::EventAttribute(index);
1229 return attr.Forcible();
1233 TEMP bool THIS::Forcible(
const std::string& rName)
const {
1234 EventAttr attr=BASE::EventAttribute(rName);
1235 return attr.Forcible();
1240 FD_DG(
"TcGenerator(" <<
this <<
")::InsForcibleEvent(" << index <<
")");
1243 BASE::InsEvent(index,attr);
1247 TEMP Idx THIS::InsForcibleEvent(
const std::string& rName) {
1248 FD_DG(
"TcGenerator(" <<
this <<
")::InsForcibleEvent(" << rName <<
")");
1251 return BASE::InsEvent(rName,attr);
1256 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnforcibleEvent(" << index <<
")");
1259 BASE::InsEvent(index,attr);
1263 TEMP Idx THIS::InsUnforcibleEvent(
const std::string& rName) {
1264 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnforcibleEvent(" << rName <<
")");
1267 return BASE::InsEvent(rName,attr);
1272 FD_DG(
"TcGenerator(" <<
this <<
")::SetForcible(" << index <<
")");
1273 EventAttr attr=BASE::EventAttribute(index);
1275 BASE::pAlphabet->Attribute(index,attr);
1279 TEMP void THIS::SetForcible(
const std::string& rName) {
1280 FD_DG(
"TcGenerator(" <<
this <<
")::SetForcible(" << rName <<
")");
1281 Idx index = BASE::EventIndex(rName);
1287 FD_DG(
"TcGenerator(" <<
this <<
")::SetForcible(rEvents)");
1288 EventSet::Iterator it;
1289 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1296 FD_DG(
"TcGenerator(" <<
this <<
")::ClrForcible(" << index <<
")");
1297 EventAttr attr=BASE::EventAttribute(index);
1299 BASE::pAlphabet->Attribute(index,attr);
1303 TEMP void THIS::ClrForcible(
const std::string& rName) {
1304 FD_DG(
"TcGenerator(" <<
this <<
")::ClrForcible(" << rName <<
")");
1305 Idx index = BASE::EventIndex(rName);
1311 FD_DG(
"TcGenerator(" <<
this <<
")::ClrForcible(rEvents)");
1312 EventSet::Iterator it;
1313 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1320 FD_DG(
"TcGenerator(" <<
this <<
")::ForcibleEvents()");
1322 EventSet::Iterator it;
1323 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1324 if(Forcible(*it)) res.
Insert(*it);
1332 FD_DG(
"TcGenerator(" <<
this <<
")::UnforcibleEvents()");
1334 EventSet::Iterator it;
1335 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1336 if(!Forcible(*it)) res.
Insert(*it);
1344 EventAttr attr=BASE::EventAttribute(index);
1345 return attr.Highlevel();
1349 TEMP bool THIS::Highlevel(
const std::string& rName)
const {
1350 EventAttr attr=BASE::EventAttribute(rName);
1351 return attr.Highlevel();
1356 EventAttr attr=BASE::EventAttribute(index);
1357 return attr.Lowlevel();
1361 TEMP bool THIS::Lowlevel(
const std::string& rName)
const {
1362 EventAttr attr=BASE::EventAttribute(rName);
1363 return attr.Lowlevel();
1368 FD_DG(
"TcGenerator(" <<
this <<
")::InsHighlevelEvent(" << index <<
")");
1370 attr.SetHighlevel();
1371 BASE::InsEvent(index,attr);
1375 TEMP Idx THIS::InsHighlevelEvent(
const std::string& rName) {
1376 FD_DG(
"TcGenerator(" <<
this <<
")::InsHighlevelEvent(" << rName <<
")");
1378 attr.SetHighlevel();
1379 return BASE::InsEvent(rName,attr);
1384 FD_DG(
"TcGenerator(" <<
this <<
")::InsLowlevelEvent(" << index <<
")");
1387 BASE::InsEvent(index,attr);
1391 TEMP Idx THIS::InsLowlevelEvent(
const std::string& rName) {
1392 FD_DG(
"TcGenerator(" <<
this <<
")::InsLowlevelEvent(" << rName <<
")");
1395 return BASE::InsEvent(rName,attr);
1400 FD_DG(
"TcGenerator(" <<
this <<
")::SetHighlevel(" << index <<
")");
1401 EventAttr attr=BASE::EventAttribute(index);
1402 attr.SetHighlevel();
1403 BASE::pAlphabet->Attribute(index,attr);
1407 TEMP void THIS::SetHighlevel(
const std::string& rName) {
1408 FD_DG(
"TcGenerator(" <<
this <<
")::SetHighlevel(" << rName <<
")");
1409 Idx index = BASE::EventIndex(rName);
1410 SetHighlevel(index);
1415 FD_DG(
"TcGenerator(" <<
this <<
")::SetHighlevel(rEvents)");
1416 EventSet::Iterator it;
1417 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1424 FD_DG(
"TcGenerator(" <<
this <<
")::SetLowlevel(" << index <<
")");
1425 EventAttr attr=BASE::EventAttribute(index);
1427 BASE::pAlphabet->Attribute(index,attr);
1431 TEMP void THIS::SetLowlevel(
const std::string& rName) {
1432 FD_DG(
"TcGenerator(" <<
this <<
")::SetLowlevel(" << rName <<
")");
1433 Idx index = BASE::EventIndex(rName);
1439 FD_DG(
"TcGenerator(" <<
this <<
")::SetLowlevel(rEvents)");
1440 EventSet::Iterator it;
1441 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1448 FD_DG(
"TcGenerator(" <<
this <<
")::HighlevelEvents()");
1450 EventSet::Iterator it;
1451 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1452 if(Highlevel(*it)) res.
Insert(*it);
1460 FD_DG(
"TcGenerator(" <<
this <<
")::LowlevelEvents()");
1462 EventSet::Iterator it;
1463 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1464 if(Lowlevel(*it)) res.
Insert(*it);