24 #ifndef FAUDES_CGENERATOR_H
25 #define FAUDES_CGENERATOR_H
83 bool Controllable(
void)
const {
return ( (mFlags & mControllableFlag) != 0 ); }
99 bool Observable(
void)
const {
return ( (mFlags & mObservableFlag) != 0 ); }
116 bool Forcible(
void)
const {
return ( (mFlags & mForcibleFlag) != 0 ); }
132 bool Highlevel(
void)
const {
return ( (mFlags & mAbstractionFlag) != 0 ); }
137 bool Lowlevel(
void)
const {
return ( (mFlags & mAbstractionFlag) == 0 ); }
143 virtual bool IsDefault(
void)
const {
return mFlags==mDefCFlags;};
146 const static fType mControllableFlag =0x01;
147 const static fType mObservableFlag =0x02;
148 const static fType mForcibleFlag =0x04;
149 const static fType mAbstractionFlag =0x08;
153 const static fType mDefCFlags =0x0a;
156 const static fType mAllCFlags =0x0f;
194 virtual void DoRead(
TokenReader& rTr,
const std::string& rLabel=
"",
const Type* pContext=0);
210 virtual void DoWrite(
TokenWriter& rTw,
const std::string& rLabel=
"",
const Type* pContext=0)
const;
227 virtual void DoXWrite(
TokenWriter& rTw,
const std::string& rLabel=
"",
const Type* pContext=0)
const;
246 #ifdef FAUDES_COMPATIBILITY
272 template <
class GlobalAttr,
class StateAttr,
class EventAttr,
class TransAttr>
330 return dynamic_cast< const TcGenerator*
> (pOther); };
601 bool Observable(
const std::string& rName)
const;
729 bool Forcible(
const std::string& rName)
const;
857 bool Highlevel(
const std::string& rName)
const;
879 bool Lowlevel(
const std::string& rName)
const;
919 #ifdef FAUDES_COMPATIBILITY
939 #define THIS TcGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
940 #define BASE TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
941 #define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
946 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator()");
951 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator(rOtherGen)");
956 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator(rOtherGen)");
960 TEMP THIS::TcGenerator(
const std::string& rFileName) :
BASE(rFileName) {
961 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator(rFilename) : done");
966 FD_DG(
"TcGenerator(" <<
this <<
")::operator = [v]" << &rOtherGen);
967 return Assign(rOtherGen);
972 FD_DG(
"TcGenerator(" <<
this <<
")::Assign([type] " << &rSrc <<
")");
974 if(&rSrc==static_cast<const Type*>(
this))
return *
this;
985 res->EventSymbolTablep(BASE::mpEventSymbolTable);
986 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
987 res->mReindexOnWrite=BASE::mReindexOnWrite;
1002 THIS res= BASE::NewAGen();
1016 EventAttr attr=BASE::EventAttribute(index);
1017 return attr.Controllable();
1021 TEMP bool THIS::Controllable(
const std::string& rName)
const {
1022 EventAttr attr=BASE::EventAttribute(rName);
1023 return attr.Controllable();
1028 FD_DG(
"TcGenerator(" <<
this <<
")::InsControllableEvent(" << index <<
")");
1030 attr.SetControllable();
1031 BASE::InsEvent(index,attr);
1035 TEMP Idx THIS::InsControllableEvent(
const std::string& rName) {
1036 FD_DG(
"TcGenerator(" <<
this <<
")::InsControllableEvent(" << rName <<
")");
1038 attr.SetControllable();
1039 return BASE::InsEvent(rName,attr);
1043 TEMP void THIS::InsUncontrollableEvent(
Idx index) {
1044 FD_DG(
"TcGenerator(" <<
this <<
")::InsUncontrollableEvent(" << index <<
")");
1046 attr.ClrControllable();
1047 BASE::InsEvent(index,attr);
1051 TEMP Idx THIS::InsUncontrollableEvent(
const std::string& rName) {
1052 FD_DG(
"TcGenerator(" <<
this <<
")::InsUncontrollableEvent(" << rName <<
")");
1054 attr.ClrControllable();
1055 return BASE::InsEvent(rName,attr);
1060 FD_DG(
"TcGenerator(" <<
this <<
")::SetControllable(" << index <<
")");
1061 EventAttr attr=BASE::EventAttribute(index);
1062 attr.SetControllable();
1063 BASE::pAlphabet->Attribute(index,attr);
1067 TEMP void THIS::SetControllable(
const std::string& rName) {
1068 FD_DG(
"TcGenerator(" <<
this <<
")::SetControllable(" << rName <<
")");
1069 Idx index = BASE::EventIndex(rName);
1070 SetControllable(index);
1075 FD_DG(
"TcGenerator(" <<
this <<
")::SetControllable(rEvents)");
1076 EventSet::Iterator it;
1077 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1078 SetControllable(*it);
1084 FD_DG(
"TcGenerator(" <<
this <<
")::ClrControllable(" << index <<
")");
1085 EventAttr attr=BASE::EventAttribute(index);
1086 attr.ClrControllable();
1087 BASE::pAlphabet->Attribute(index,attr);
1091 TEMP void THIS::ClrControllable(
const std::string& rName) {
1092 FD_DG(
"TcGenerator(" <<
this <<
")::ClrControllable(" << rName <<
")");
1093 Idx index = BASE::EventIndex(rName);
1094 ClrControllable(index);
1099 FD_DG(
"TcGenerator(" <<
this <<
")::ClrControllable(rEvents)");
1100 EventSet::Iterator it;
1101 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1102 ClrControllable(*it);
1108 FD_DG(
"TcGenerator(" <<
this <<
")::ControllableEvents()");
1110 EventSet::Iterator it;
1111 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1112 if(Controllable(*it)) res.
Insert(*it);
1120 FD_DG(
"TcGenerator(" <<
this <<
")::UncontrollableEvents()");
1122 EventSet::Iterator it;
1123 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1124 if(!Controllable(*it)) res.
Insert(*it);
1131 EventAttr attr=BASE::EventAttribute(index);
1132 return attr.Observable();
1136 TEMP bool THIS::Observable(
const std::string& rName)
const {
1137 EventAttr attr=BASE::EventAttribute(rName);
1138 return attr.Observable();
1143 FD_DG(
"TcGenerator(" <<
this <<
")::InsObservableEvent(" << index <<
")");
1145 attr.SetObservable();
1146 BASE::InsEvent(index,attr);
1150 TEMP Idx THIS::InsObservableEvent(
const std::string& rName) {
1151 FD_DG(
"TcGenerator(" <<
this <<
")::InsObservableEvent(" << rName <<
")");
1153 attr.SetObservable();
1154 return BASE::InsEvent(rName,attr);
1159 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnobservableEvent(" << index <<
")");
1161 attr.ClrObservable();
1162 BASE::InsEvent(index,attr);
1166 TEMP Idx THIS::InsUnobservableEvent(
const std::string& rName) {
1167 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnobservableEvent(" << rName <<
")");
1169 attr.ClrObservable();
1170 return BASE::InsEvent(rName,attr);
1175 FD_DG(
"TcGenerator(" <<
this <<
")::SetObservable(" << index <<
")");
1176 EventAttr attr=BASE::EventAttribute(index);
1177 attr.SetObservable();
1178 BASE::pAlphabet->Attribute(index,attr);
1182 TEMP void THIS::SetObservable(
const std::string& rName) {
1183 FD_DG(
"TcGenerator(" <<
this <<
")::SetObservable(" << rName <<
")");
1184 Idx index = BASE::EventIndex(rName);
1185 SetObservable(index);
1190 FD_DG(
"TcGenerator(" <<
this <<
")::SetObservable(rEvents)");
1191 EventSet::Iterator it;
1192 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1199 FD_DG(
"TcGenerator(" <<
this <<
")::ClrObservable(" << index <<
")");
1200 EventAttr attr=BASE::EventAttribute(index);
1201 attr.ClrObservable();
1202 BASE::pAlphabet->Attribute(index,attr);
1206 TEMP void THIS::ClrObservable(
const std::string& rName) {
1207 FD_DG(
"TcGenerator(" <<
this <<
")::ClrObservable(" << rName <<
")");
1208 Idx index = BASE::EventIndex(rName);
1209 ClrObservable(index);
1214 FD_DG(
"TcGenerator(" <<
this <<
")::ClrObservable(rEvents)");
1215 EventSet::Iterator it;
1216 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1223 FD_DG(
"TcGenerator(" <<
this <<
")::ObservableEvents()");
1225 EventSet::Iterator it;
1226 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1227 if(Observable(*it)) res.
Insert(*it);
1235 FD_DG(
"TcGenerator(" <<
this <<
")::UnobservableEvents()");
1237 EventSet::Iterator it;
1238 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1239 if(!Observable(*it)) res.
Insert(*it);
1247 EventAttr attr=BASE::EventAttribute(index);
1248 return attr.Forcible();
1252 TEMP bool THIS::Forcible(
const std::string& rName)
const {
1253 EventAttr attr=BASE::EventAttribute(rName);
1254 return attr.Forcible();
1259 FD_DG(
"TcGenerator(" <<
this <<
")::InsForcibleEvent(" << index <<
")");
1262 BASE::InsEvent(index,attr);
1266 TEMP Idx THIS::InsForcibleEvent(
const std::string& rName) {
1267 FD_DG(
"TcGenerator(" <<
this <<
")::InsForcibleEvent(" << rName <<
")");
1270 return BASE::InsEvent(rName,attr);
1275 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnforcibleEvent(" << index <<
")");
1278 BASE::InsEvent(index,attr);
1282 TEMP Idx THIS::InsUnforcibleEvent(
const std::string& rName) {
1283 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnforcibleEvent(" << rName <<
")");
1286 return BASE::InsEvent(rName,attr);
1291 FD_DG(
"TcGenerator(" <<
this <<
")::SetForcible(" << index <<
")");
1292 EventAttr attr=BASE::EventAttribute(index);
1294 BASE::pAlphabet->Attribute(index,attr);
1298 TEMP void THIS::SetForcible(
const std::string& rName) {
1299 FD_DG(
"TcGenerator(" <<
this <<
")::SetForcible(" << rName <<
")");
1300 Idx index = BASE::EventIndex(rName);
1306 FD_DG(
"TcGenerator(" <<
this <<
")::SetForcible(rEvents)");
1307 EventSet::Iterator it;
1308 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1315 FD_DG(
"TcGenerator(" <<
this <<
")::ClrForcible(" << index <<
")");
1316 EventAttr attr=BASE::EventAttribute(index);
1318 BASE::pAlphabet->Attribute(index,attr);
1322 TEMP void THIS::ClrForcible(
const std::string& rName) {
1323 FD_DG(
"TcGenerator(" <<
this <<
")::ClrForcible(" << rName <<
")");
1324 Idx index = BASE::EventIndex(rName);
1330 FD_DG(
"TcGenerator(" <<
this <<
")::ClrForcible(rEvents)");
1331 EventSet::Iterator it;
1332 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1339 FD_DG(
"TcGenerator(" <<
this <<
")::ForcibleEvents()");
1341 EventSet::Iterator it;
1342 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1343 if(Forcible(*it)) res.
Insert(*it);
1351 FD_DG(
"TcGenerator(" <<
this <<
")::UnforcibleEvents()");
1353 EventSet::Iterator it;
1354 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1355 if(!Forcible(*it)) res.
Insert(*it);
1363 EventAttr attr=BASE::EventAttribute(index);
1364 return attr.Highlevel();
1368 TEMP bool THIS::Highlevel(
const std::string& rName)
const {
1369 EventAttr attr=BASE::EventAttribute(rName);
1370 return attr.Highlevel();
1375 EventAttr attr=BASE::EventAttribute(index);
1376 return attr.Lowlevel();
1380 TEMP bool THIS::Lowlevel(
const std::string& rName)
const {
1381 EventAttr attr=BASE::EventAttribute(rName);
1382 return attr.Lowlevel();
1387 FD_DG(
"TcGenerator(" <<
this <<
")::InsHighlevelEvent(" << index <<
")");
1389 attr.SetHighlevel();
1390 BASE::InsEvent(index,attr);
1394 TEMP Idx THIS::InsHighlevelEvent(
const std::string& rName) {
1395 FD_DG(
"TcGenerator(" <<
this <<
")::InsHighlevelEvent(" << rName <<
")");
1397 attr.SetHighlevel();
1398 return BASE::InsEvent(rName,attr);
1403 FD_DG(
"TcGenerator(" <<
this <<
")::InsLowlevelEvent(" << index <<
")");
1406 BASE::InsEvent(index,attr);
1410 TEMP Idx THIS::InsLowlevelEvent(
const std::string& rName) {
1411 FD_DG(
"TcGenerator(" <<
this <<
")::InsLowlevelEvent(" << rName <<
")");
1414 return BASE::InsEvent(rName,attr);
1419 FD_DG(
"TcGenerator(" <<
this <<
")::SetHighlevel(" << index <<
")");
1420 EventAttr attr=BASE::EventAttribute(index);
1421 attr.SetHighlevel();
1422 BASE::pAlphabet->Attribute(index,attr);
1426 TEMP void THIS::SetHighlevel(
const std::string& rName) {
1427 FD_DG(
"TcGenerator(" <<
this <<
")::SetHighlevel(" << rName <<
")");
1428 Idx index = BASE::EventIndex(rName);
1429 SetHighlevel(index);
1434 FD_DG(
"TcGenerator(" <<
this <<
")::SetHighlevel(rEvents)");
1435 EventSet::Iterator it;
1436 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1443 FD_DG(
"TcGenerator(" <<
this <<
")::SetLowlevel(" << index <<
")");
1444 EventAttr attr=BASE::EventAttribute(index);
1446 BASE::pAlphabet->Attribute(index,attr);
1450 TEMP void THIS::SetLowlevel(
const std::string& rName) {
1451 FD_DG(
"TcGenerator(" <<
this <<
")::SetLowlevel(" << rName <<
")");
1452 Idx index = BASE::EventIndex(rName);
1458 FD_DG(
"TcGenerator(" <<
this <<
")::SetLowlevel(rEvents)");
1459 EventSet::Iterator it;
1460 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1467 FD_DG(
"TcGenerator(" <<
this <<
")::HighlevelEvents()");
1469 EventSet::Iterator it;
1470 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1471 if(Highlevel(*it)) res.
Insert(*it);
1479 FD_DG(
"TcGenerator(" <<
this <<
")::LowlevelEvents()");
1481 EventSet::Iterator it;
1482 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1483 if(Lowlevel(*it)) res.
Insert(*it);