24 #ifndef FAUDES_CGENERATOR_H
25 #define FAUDES_CGENERATOR_H
49 #ifdef FAUDES_COMPATIBILITY
75 template <
class GlobalAttr,
class StateAttr,
class EventAttr,
class TransAttr>
138 return dynamic_cast< const TcGenerator*
> (pOther); };
179 void InsControllableEvent(
Idx index);
191 Idx InsControllableEvent(
const std::string& rName);
200 void InsUncontrollableEvent(
Idx index);
212 Idx InsUncontrollableEvent(
const std::string& rName);
220 void SetControllable(
Idx index);
228 void SetControllable(
const std::string& rName);
236 void SetControllable(
const EventSet& rEvents);
244 void ClrControllable(
Idx index);
252 void ClrControllable(
const std::string& rName);
260 void ClrControllable(
const EventSet& rEvents);
271 bool Controllable(
Idx index)
const;
282 bool Controllable(
const std::string& rName)
const;
290 EventSet ControllableEvents(
void)
const;
298 EventSet UncontrollableEvents(
void)
const;
307 void InsObservableEvent(
Idx index);
319 Idx InsObservableEvent(
const std::string& rName);
328 void InsUnobservableEvent(
Idx index);
340 Idx InsUnobservableEvent(
const std::string& rName);
348 void SetObservable(
Idx index);
356 void SetObservable(
const std::string& rName);
364 void SetObservable(
const EventSet& rEvents);
372 void ClrObservable(
Idx index);
380 void ClrObservable(
const std::string& rName);
388 void ClrObservable(
const EventSet& rEvents);
399 bool Observable(
Idx index)
const;
410 bool Observable(
const std::string& rName)
const;
418 EventSet ObservableEvents(
void)
const;
426 EventSet UnobservableEvents(
void)
const;
435 void InsForcibleEvent(
Idx index);
447 Idx InsForcibleEvent(
const std::string& rName);
456 void InsUnforcibleEvent(
Idx index);
468 Idx InsUnforcibleEvent(
const std::string& rName);
476 void SetForcible(
Idx index);
484 void SetForcible(
const std::string& rName);
492 void SetForcible(
const EventSet& rEvents);
500 void ClrForcible(
Idx index);
508 void ClrForcible(
const std::string& rName);
516 void ClrForcible(
const EventSet& rEvents);
527 bool Forcible(
Idx index)
const;
538 bool Forcible(
const std::string& rName)
const;
546 EventSet ForcibleEvents(
void)
const;
554 EventSet UnforcibleEvents(
void)
const;
563 void InsHighlevelEvent(
Idx index);
575 Idx InsHighlevelEvent(
const std::string& rName);
584 void InsLowlevelEvent(
Idx index);
596 Idx InsLowlevelEvent(
const std::string& rName);
604 void SetHighlevel(
Idx index);
612 void SetHighlevel(
const std::string& rName);
620 void SetHighlevel(
const EventSet& rEvents);
628 void SetLowlevel(
Idx index);
636 void SetLowlevel(
const std::string& rName);
644 void SetLowlevel(
const EventSet& rEvents);
655 bool Highlevel(
Idx index)
const;
666 bool Highlevel(
const std::string& rName)
const;
677 bool Lowlevel(
Idx index)
const;
688 bool Lowlevel(
const std::string& rName)
const;
696 EventSet HighlevelEvents(
void)
const;
704 EventSet LowlevelEvents(
void)
const;
728 #ifdef FAUDES_COMPATIBILITY
748 #define THIS TcGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
749 #define BASE TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
750 #define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
755 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator()");
760 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator(rOtherGen)");
765 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator(rOtherGen)");
769 TEMP THIS::TcGenerator(
const std::string& rFileName) :
BASE(rFileName) {
770 FD_DG(
"TcGenerator(" <<
this <<
")::TcGenerator(rFilename) : done");
775 FD_DG(
"TcGenerator(" <<
this <<
")::operator = [v]" << &rOtherGen);
776 return Assign(rOtherGen);
781 FD_DG(
"TcGenerator(" <<
this <<
")::Assign([type] " << &rSrc <<
")");
783 if(&rSrc==
static_cast<const Type*
>(
this))
return *
this;
798 FD_DG(
"TcGenerator(" <<
this <<
")::Assign([type] " << &rSrc <<
"): call base");
808 res->EventSymbolTablep(BASE::mpEventSymbolTable);
809 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
810 res->mReindexOnWrite=BASE::mReindexOnWrite;
825 THIS res= BASE::NewAGen();
838 TEMP bool THIS::Controllable(
Idx index)
const {
839 EventAttr attr=BASE::EventAttribute(index);
840 return attr.Controllable();
844 TEMP bool THIS::Controllable(
const std::string& rName)
const {
845 EventAttr attr=BASE::EventAttribute(rName);
846 return attr.Controllable();
850 TEMP void THIS::InsControllableEvent(
Idx index) {
851 FD_DG(
"TcGenerator(" <<
this <<
")::InsControllableEvent(" << index <<
")");
853 attr.SetControllable();
854 BASE::InsEvent(index,attr);
858 TEMP Idx THIS::InsControllableEvent(
const std::string& rName) {
859 FD_DG(
"TcGenerator(" <<
this <<
")::InsControllableEvent(" << rName <<
")");
861 attr.SetControllable();
862 return BASE::InsEvent(rName,attr);
866 TEMP void THIS::InsUncontrollableEvent(
Idx index) {
867 FD_DG(
"TcGenerator(" <<
this <<
")::InsUncontrollableEvent(" << index <<
")");
869 attr.ClrControllable();
870 BASE::InsEvent(index,attr);
874 TEMP Idx THIS::InsUncontrollableEvent(
const std::string& rName) {
875 FD_DG(
"TcGenerator(" <<
this <<
")::InsUncontrollableEvent(" << rName <<
")");
877 attr.ClrControllable();
878 return BASE::InsEvent(rName,attr);
883 FD_DG(
"TcGenerator(" <<
this <<
")::SetControllable(" << index <<
")");
884 EventAttr attr=BASE::EventAttribute(index);
885 attr.SetControllable();
886 BASE::pAlphabet->Attribute(index,attr);
890 TEMP void THIS::SetControllable(
const std::string& rName) {
891 FD_DG(
"TcGenerator(" <<
this <<
")::SetControllable(" << rName <<
")");
892 Idx index = BASE::EventIndex(rName);
893 SetControllable(index);
898 FD_DG(
"TcGenerator(" <<
this <<
")::SetControllable(rEvents)");
899 EventSet::Iterator it;
900 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
901 SetControllable(*it);
907 FD_DG(
"TcGenerator(" <<
this <<
")::ClrControllable(" << index <<
")");
908 EventAttr attr=BASE::EventAttribute(index);
909 attr.ClrControllable();
910 BASE::pAlphabet->Attribute(index,attr);
914 TEMP void THIS::ClrControllable(
const std::string& rName) {
915 FD_DG(
"TcGenerator(" <<
this <<
")::ClrControllable(" << rName <<
")");
916 Idx index = BASE::EventIndex(rName);
917 ClrControllable(index);
922 FD_DG(
"TcGenerator(" <<
this <<
")::ClrControllable(rEvents)");
923 EventSet::Iterator it;
924 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
925 ClrControllable(*it);
931 FD_DG(
"TcGenerator(" <<
this <<
")::ControllableEvents()");
933 EventSet::Iterator it;
934 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
935 if(Controllable(*it)) res.
Insert(*it);
943 FD_DG(
"TcGenerator(" <<
this <<
")::UncontrollableEvents()");
945 EventSet::Iterator it;
946 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
947 if(!Controllable(*it)) res.
Insert(*it);
954 EventAttr attr=BASE::EventAttribute(index);
955 return attr.Observable();
959 TEMP bool THIS::Observable(
const std::string& rName)
const {
960 EventAttr attr=BASE::EventAttribute(rName);
961 return attr.Observable();
965 TEMP void THIS::InsObservableEvent(
Idx index) {
966 FD_DG(
"TcGenerator(" <<
this <<
")::InsObservableEvent(" << index <<
")");
968 attr.SetObservable();
969 BASE::InsEvent(index,attr);
973 TEMP Idx THIS::InsObservableEvent(
const std::string& rName) {
974 FD_DG(
"TcGenerator(" <<
this <<
")::InsObservableEvent(" << rName <<
")");
976 attr.SetObservable();
977 return BASE::InsEvent(rName,attr);
981 TEMP void THIS::InsUnobservableEvent(
Idx index) {
982 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnobservableEvent(" << index <<
")");
984 attr.ClrObservable();
985 BASE::InsEvent(index,attr);
989 TEMP Idx THIS::InsUnobservableEvent(
const std::string& rName) {
990 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnobservableEvent(" << rName <<
")");
992 attr.ClrObservable();
993 return BASE::InsEvent(rName,attr);
998 FD_DG(
"TcGenerator(" <<
this <<
")::SetObservable(" << index <<
")");
999 EventAttr attr=BASE::EventAttribute(index);
1000 attr.SetObservable();
1001 BASE::pAlphabet->Attribute(index,attr);
1005 TEMP void THIS::SetObservable(
const std::string& rName) {
1006 FD_DG(
"TcGenerator(" <<
this <<
")::SetObservable(" << rName <<
")");
1007 Idx index = BASE::EventIndex(rName);
1008 SetObservable(index);
1013 FD_DG(
"TcGenerator(" <<
this <<
")::SetObservable(rEvents)");
1014 EventSet::Iterator it;
1015 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1022 FD_DG(
"TcGenerator(" <<
this <<
")::ClrObservable(" << index <<
")");
1023 EventAttr attr=BASE::EventAttribute(index);
1024 attr.ClrObservable();
1025 BASE::pAlphabet->Attribute(index,attr);
1029 TEMP void THIS::ClrObservable(
const std::string& rName) {
1030 FD_DG(
"TcGenerator(" <<
this <<
")::ClrObservable(" << rName <<
")");
1031 Idx index = BASE::EventIndex(rName);
1032 ClrObservable(index);
1037 FD_DG(
"TcGenerator(" <<
this <<
")::ClrObservable(rEvents)");
1038 EventSet::Iterator it;
1039 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1046 FD_DG(
"TcGenerator(" <<
this <<
")::ObservableEvents()");
1048 EventSet::Iterator it;
1049 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1050 if(Observable(*it)) res.
Insert(*it);
1058 FD_DG(
"TcGenerator(" <<
this <<
")::UnobservableEvents()");
1060 EventSet::Iterator it;
1061 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1062 if(!Observable(*it)) res.
Insert(*it);
1070 EventAttr attr=BASE::EventAttribute(index);
1071 return attr.Forcible();
1075 TEMP bool THIS::Forcible(
const std::string& rName)
const {
1076 EventAttr attr=BASE::EventAttribute(rName);
1077 return attr.Forcible();
1082 FD_DG(
"TcGenerator(" <<
this <<
")::InsForcibleEvent(" << index <<
")");
1085 BASE::InsEvent(index,attr);
1089 TEMP Idx THIS::InsForcibleEvent(
const std::string& rName) {
1090 FD_DG(
"TcGenerator(" <<
this <<
")::InsForcibleEvent(" << rName <<
")");
1093 return BASE::InsEvent(rName,attr);
1098 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnforcibleEvent(" << index <<
")");
1101 BASE::InsEvent(index,attr);
1105 TEMP Idx THIS::InsUnforcibleEvent(
const std::string& rName) {
1106 FD_DG(
"TcGenerator(" <<
this <<
")::InsUnforcibleEvent(" << rName <<
")");
1109 return BASE::InsEvent(rName,attr);
1114 FD_DG(
"TcGenerator(" <<
this <<
")::SetForcible(" << index <<
")");
1115 EventAttr attr=BASE::EventAttribute(index);
1117 BASE::pAlphabet->Attribute(index,attr);
1121 TEMP void THIS::SetForcible(
const std::string& rName) {
1122 FD_DG(
"TcGenerator(" <<
this <<
")::SetForcible(" << rName <<
")");
1123 Idx index = BASE::EventIndex(rName);
1129 FD_DG(
"TcGenerator(" <<
this <<
")::SetForcible(rEvents)");
1130 EventSet::Iterator it;
1131 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1138 FD_DG(
"TcGenerator(" <<
this <<
")::ClrForcible(" << index <<
")");
1139 EventAttr attr=BASE::EventAttribute(index);
1141 BASE::pAlphabet->Attribute(index,attr);
1145 TEMP void THIS::ClrForcible(
const std::string& rName) {
1146 FD_DG(
"TcGenerator(" <<
this <<
")::ClrForcible(" << rName <<
")");
1147 Idx index = BASE::EventIndex(rName);
1153 FD_DG(
"TcGenerator(" <<
this <<
")::ClrForcible(rEvents)");
1154 EventSet::Iterator it;
1155 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1162 FD_DG(
"TcGenerator(" <<
this <<
")::ForcibleEvents()");
1164 EventSet::Iterator it;
1165 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1166 if(Forcible(*it)) res.
Insert(*it);
1174 FD_DG(
"TcGenerator(" <<
this <<
")::UnforcibleEvents()");
1176 EventSet::Iterator it;
1177 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1178 if(!Forcible(*it)) res.
Insert(*it);
1186 EventAttr attr=BASE::EventAttribute(index);
1187 return attr.Highlevel();
1191 TEMP bool THIS::Highlevel(
const std::string& rName)
const {
1192 EventAttr attr=BASE::EventAttribute(rName);
1193 return attr.Highlevel();
1198 EventAttr attr=BASE::EventAttribute(index);
1199 return attr.Lowlevel();
1203 TEMP bool THIS::Lowlevel(
const std::string& rName)
const {
1204 EventAttr attr=BASE::EventAttribute(rName);
1205 return attr.Lowlevel();
1210 FD_DG(
"TcGenerator(" <<
this <<
")::InsHighlevelEvent(" << index <<
")");
1212 attr.SetHighlevel();
1213 BASE::InsEvent(index,attr);
1217 TEMP Idx THIS::InsHighlevelEvent(
const std::string& rName) {
1218 FD_DG(
"TcGenerator(" <<
this <<
")::InsHighlevelEvent(" << rName <<
")");
1220 attr.SetHighlevel();
1221 return BASE::InsEvent(rName,attr);
1226 FD_DG(
"TcGenerator(" <<
this <<
")::InsLowlevelEvent(" << index <<
")");
1229 BASE::InsEvent(index,attr);
1233 TEMP Idx THIS::InsLowlevelEvent(
const std::string& rName) {
1234 FD_DG(
"TcGenerator(" <<
this <<
")::InsLowlevelEvent(" << rName <<
")");
1237 return BASE::InsEvent(rName,attr);
1242 FD_DG(
"TcGenerator(" <<
this <<
")::SetHighlevel(" << index <<
")");
1243 EventAttr attr=BASE::EventAttribute(index);
1244 attr.SetHighlevel();
1245 BASE::pAlphabet->Attribute(index,attr);
1249 TEMP void THIS::SetHighlevel(
const std::string& rName) {
1250 FD_DG(
"TcGenerator(" <<
this <<
")::SetHighlevel(" << rName <<
")");
1251 Idx index = BASE::EventIndex(rName);
1252 SetHighlevel(index);
1257 FD_DG(
"TcGenerator(" <<
this <<
")::SetHighlevel(rEvents)");
1258 EventSet::Iterator it;
1259 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1266 FD_DG(
"TcGenerator(" <<
this <<
")::SetLowlevel(" << index <<
")");
1267 EventAttr attr=BASE::EventAttribute(index);
1269 BASE::pAlphabet->Attribute(index,attr);
1273 TEMP void THIS::SetLowlevel(
const std::string& rName) {
1274 FD_DG(
"TcGenerator(" <<
this <<
")::SetLowlevel(" << rName <<
")");
1275 Idx index = BASE::EventIndex(rName);
1281 FD_DG(
"TcGenerator(" <<
this <<
")::SetLowlevel(rEvents)");
1282 EventSet::Iterator it;
1283 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
1290 FD_DG(
"TcGenerator(" <<
this <<
")::HighlevelEvents()");
1292 EventSet::Iterator it;
1293 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1294 if(Highlevel(*it)) res.
Insert(*it);
1301 FD_DG(
"TcGenerator(" <<
this <<
")::LowlevelEvents()");
1303 EventSet::Iterator it;
1304 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1305 if(Lowlevel(*it)) res.
Insert(*it);
bool Insert(const Idx &rIndex)
virtual const Type * Cast(const Type *pOther) const
TaNameSet< AttributeCFlags > Alphabet
Iterator Begin(void) const
TBaseVector< System > SystemVector
TcGenerator< AttributeVoid, AttributeVoid, AttributeCFlags, AttributeVoid > System
TBaseVector< Alphabet > AlphaberVector
TcGenerator< AttributeVoid, AttributeVoid, AttributeCFlags, AttributeVoid > cGenerator
TBaseVector< cGenerator > cGeneratorVector
TaNameSet< AttributeCFlags > cEventSet
TBaseVector< cEventSet > cEventSetVector