|
|
Go to the documentation of this file.
24#ifndef FAUDES_AGENERATOR_H
25#define FAUDES_AGENERATOR_H
69template < class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
495 const std::string& rX2);
736 void GlobalAttribute( const Type& rAttr) { const GlobalAttr* ap= dynamic_cast<const GlobalAttr* >(&rAttr); if(ap) *pGlobalAttribute=*ap;};
796#define THIS TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
797#define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
798#define BASE vGenerator
813TEMP const GlobalAttr& THIS::GlobalTaGen( void) {
814 static GlobalAttr fls;;
824 FD_DG( "TaGenerator(" << this << ")::TaGenerator()");
828 FD_DG( "TaGenerator(" << this << ")::TaGenerator(): done");
836 FD_DG( "TaGenerator(" << this << ")::TaGenerator(" << &rOtherGen << ")");
850 FD_DG( "TaGenerator(" << this << ")::TaGenerator([v]" << &rOtherGen << ")");
856 FD_DG( "TaGenerator(" << this << ")::TaGenerator([v]" << &rOtherGen << "): ok");
860TEMP THIS::TaGenerator( const std::string& rFileName) :
864 FD_DG( "TaGenerator(" << this << ")::TaGenerator(" << rFileName << ")");
878 FD_DG( "TaGenerator(" << this << ")::NewCore()");
886 mpAlphabet= AlphabetTaGen().New();
887 mpStates=StatesTaGen().New();
888 mpTransRel=TransRelTaGen().New();
889 mpGlobalAttribute=GlobalTaGen().New();
895TEMP void THIS::UpdateCore( void) {
899 pGlobalAttribute = dynamic_cast< GlobalAttr* >(mpGlobalAttribute);
902 pTransRel = dynamic_cast< ATransSet* >(mpTransRel);
905 if(pGlobalAttribute==0 && mpGlobalAttribute!=0) tmm= true;
906 if(pAlphabet==0 && mpAlphabet!=0) tmm= true;
907 if(pStates==0 && mpStates!=0) tmm= true;
908 if(pTransRel==0 && mpTransRel!=0) tmm= true;
910 std::stringstream errstr;
911 errstr << "cannot cast attributes for generator type " << typeid(*this).name();
912 errstr << " ptrs " << pGlobalAttribute << "-" << pAlphabet << "-" << pStates << "-" << pTransRel;
913 throw Exception( "Generator::UpdateCore", errstr.str(), 63);
920 FD_DG( "TaGenerator(" << this << ")::DoCopy(" << &rGen << ")");
921 FD_DG( "TaGenerator(" << this << ")::DoCopy(..): types " << typeid(*this).name() << " <= " << typeid(rGen).name());
940#ifdef FAUDES_DEBUG_CODE
942 FD_DG( "TaGenerator()::DoCopy(): invalid generator");
947 FD_DG( "TaGenerator(" << this << ")::DoCopy(" << &rGen << "): done");
952 FD_DG( "TaGenerator(" << this << ")::Copy([type] " << &rSrc << ")");
953 FD_DG( "TaGenerator(" << this << ")::Copy(..): types \n" << typeid(*this).name() << " <= \n" << typeid(rSrc).name());
954 FD_DG( "TaGenerator(" << this << ")::Copy(..): match str " << ( typeid(*this).name() == typeid(rSrc).name()));
955 FD_DG( "TaGenerator(" << this << ")::Copy(..): match id " << ( typeid(* this) == typeid(rSrc)));
958 FD_DG( "TaGenerator(" << this << ")::Copy(..): agen " << agen);
960 if( this==agen) return * this;
963 FD_DG( "TaGenerator(" << this << ")::Copy([type] " << &rSrc << "):: call aGenerator DoCopy");
967 FD_DG( "TaGenerator(" << this << ")::Copy([type] " << &rSrc << "):: call vGenerator base");
976 FD_DG( "TaGenerator(" << this << ")::Move(" << &rSrc << ")");
986 FD_DG( "TaGenerator(" << this << ")::~TaGenerator()");
994 res->EventSymbolTablep(BASE::mpEventSymbolTable);
995 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
996 res->mReindexOnWrite=BASE::mReindexOnWrite;
1022 return dynamic_cast< const THIS* > (pOther);
1028 FD_DG( "TaGenerator(" << this << ")::operator = [v]" << &rOtherGen);
1029 return Copy(rOtherGen);
1034 FD_DG( "TaGenerator(" << this << ")::Valid()");
1035 if(!BASE::Valid()) return false;
1038 if( typeid( Alphabet().AttributeType())!= typeid( const EventAttr*)) tmm= true;
1039 if( typeid(States().AttributeType())!= typeid( const StateAttr*)) tmm= true;
1040 if( typeid(TransRel().AttributeType())!= typeid( const TransAttr*)) tmm= true;
1041 if( typeid(GlobalAttribute())!= typeid( const GlobalAttr&)) tmm= true;
1053 FD_DG( "TaGenerator(" << this << ")::Clear()");
1060 FD_DG( "TaGenerator::InjectAlphabet() " << rNewAlphabet. ToString());
1061 BASE::InjectAlphabet(rNewAlphabet);
1065TEMP void THIS::InjectAlphabet( const TaEventSet<EventAttr>& rNewAlphabet) {
1066 FD_DG( "TaGenerator::InjectAlphabet(TaEventSet<EventAttr>) " << rNewAlphabet.ToString());
1067#ifdef FAUDES_CHECKED
1068 if(rNewAlphabet.SymbolTablep()!=mpEventSymbolTable) {
1069 std::stringstream errstr;
1070 errstr << "symboltable mismatch aka not implemented" << std::endl;
1071 throw Exception( "TaGenerator::InjectAlphabet", errstr.str(), 88);
1074 *pAlphabet=rNewAlphabet;
1075 mpAlphabet->Name( "Alphabet");
1080 FD_DG( "TaGenerator(" << this << ")::InsEvent(" << index << ")");
1081 return pAlphabet->Insert(index);
1085TEMP Idx THIS::InsEvent( const std::string& rName) {
1086 FD_DG( "TaGenerator(" << this << ")::InsEvent(\"" << rName << "\")");
1087 return pAlphabet->Insert(rName);
1091TEMP bool THIS::InsEvent( Idx index, const EventAttr& attr) {
1092 FD_DG( "TaGenerator(" << this << ")::InsEvent(" << index << " " << attr.ToString() << ")");
1093 return pAlphabet->Insert(index, attr);
1097TEMP Idx THIS::InsEvent( const std::string& rName, const EventAttr& attr) {
1098 FD_DG( "TaGenerator(" << this << ")::InsEvent(\"" << rName << attr.ToString() << "\")");
1099 return pAlphabet->Insert(rName, attr);
1104 FD_DG( "TaGenerator(" << this << ")::InsState()");
1105 return pStates->Insert();
1110 FD_DG( "TaGenerator(" << this << ")::InsState(attr)");
1111 return pStates->Insert(attr);
1116 FD_DG( "TaGenerator(" << this << ")::InsState(" << index << ")");
1117 return pStates->Insert(index);
1121TEMP bool THIS::InsState( Idx index, const StateAttr& rAttr) {
1122 FD_DG( "TaGenerator(" << this << ")::InsState(" << index << ",rAttr)");
1123 return pStates->Insert(index,rAttr);
1127TEMP Idx THIS::InsState( const std::string& rName) {
1128 FD_DG( "TaGenerator(" << this << ")::InsState(\"" << rName << "\")");
1129 Idx index=pStates->Insert();
1130 StateName(index,rName);
1135TEMP Idx THIS::InsState( const std::string& rName, const StateAttr& attr) {
1136 FD_DG( "TaGenerator(" << this << ")::InsState(\"" << rName << "\", attr)");
1137 Idx index=pStates->Insert();
1138 StateName(index,rName);
1139 StateAttribute(index,attr);
1146 FD_DG( "TaGenerator(" << this << ")::InjectStates("
1148 BASE::InjectStates(rNewStates);
1153 FD_DG( "TaGenerator(" << this << ")::InjectStates("
1155 *pStates=rNewStates;
1156 pStates-> Name( "States");
1157 mpStateSymbolTable->RestrictDomain(*mpStates);
1164 FD_DG( "TaGenerator::InjectTransRel(...)");
1165 *pTransRel=rNewTransRel;
1170 FD_DG( "TaGenerator::InjectTransRel(...)");
1171 *pTransRel=rNewTransRel;
1176TEMP bool THIS::SetTransition( const std::string& rX1, const std::string& rEv, const std::string& rX2) {
1177 return BASE::SetTransition(rX1,rEv,rX2);
1188 FD_DG( "TaGenerator(" << this << ")::SetTransition(" << rTransition. X1 << ","
1189 << rTransition. Ev << "," << rTransition. X2 << ")");
1190#ifdef FAUDES_CHECKED
1191 if (! mpStates->Exists(rTransition. X1)) {
1192 std::stringstream errstr;
1193 errstr << "TaGenerator::SetTransition: state " << rTransition. X1
1194 << " not in stateset";
1195 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1197 if (! mpAlphabet->Exists(rTransition. Ev)) {
1198 std::stringstream errstr;
1199 errstr << "TaGenerator::SetTransition: event " << rTransition. Ev
1200 << " not in alphabet ";
1201 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1203 if (! mpStates->Exists(rTransition. X2)) {
1204 std::stringstream errstr;
1205 errstr << "TaGenerator::SetTransition: state " << rTransition. X2
1206 << " not in stateset";
1207 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1210 return pTransRel->Insert(rTransition);
1214TEMP bool THIS::SetTransition( const Transition& rTransition, const TransAttr& rAttr) {
1215 FD_DG( "TaGenerator(" << this << ")::SetTransition(" << rTransition. X1 << ","
1216 << rTransition. Ev << "," << rTransition. X2 << ", [attr:]" << rAttr.ToString() << ")");
1217#ifdef FAUDES_CHECKED
1218 if (! mpStates->Exists(rTransition. X1)) {
1219 std::stringstream errstr;
1220 errstr << "TaGenerator::SetTransition: state " << rTransition. X1
1221 << " not in stateset";
1222 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1224 if (! mpAlphabet->Exists(rTransition. Ev)) {
1225 std::stringstream errstr;
1226 errstr << "TaGenerator::SetTransition: event " << rTransition. Ev
1227 << " not in alphabet ";
1228 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1230 if (! mpStates->Exists(rTransition. X2)) {
1231 std::stringstream errstr;
1232 errstr << "TaGenerator::SetTransition: state " << rTransition. X2
1233 << " not in stateset";
1234 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1237 return pTransRel->Insert(rTransition,rAttr);
1242 FD_DG( "TaGenerator(" << this << ")::TransAttribute("
1243 << TStr(rTrans) << ",\"" << rAttr.ToString() << "\")");
1244 pTransRel->Attribute(rTrans, rAttr);
1249 FD_DG( "TaGenerator(" << this << ")::TransAttribute("
1250 << TStr(rTrans) << ",\"" << rAttr. ToString() << "\")");
1251 const TransAttr* attrp = dynamic_cast<const TransAttr* >(&rAttr);
1253 std::stringstream errstr;
1254 errstr << "cannot cast event attribute " << rAttr. ToString() << " for generator " << Name();
1255 throw Exception( "TaGenerator::TransAttribute", errstr.str(), 63);
1257 pTransRel->Attribute(rTrans, *attrp);
1262 return pTransRel->Attributep(rTrans);
1268 return pTransRel->Attribute(rTrans);
1272TEMP void THIS::EventAttribute( Idx index, const EventAttr& rAttr) {
1273 FD_DG( "TaGenerator(" << this << ")::EventAttribute("
1274 << EStr(index) << ",\"" << rAttr.ToString() << "\")");
1275 pAlphabet->Attribute(index, rAttr);
1280 FD_DG( "TaGenerator(" << this << ")::EventAttribute("
1281 << EStr(index) << ",\"" << rAttr. ToString() << "\")");
1282 const EventAttr* attrp = dynamic_cast<const EventAttr* >(&rAttr);
1284 std::stringstream errstr;
1285 errstr << "cannot cast event attribute " << rAttr. ToString() << " for generator " << Name();
1286 throw Exception( "TaGenerator::EventAttribute", errstr.str(), 63);
1288 pAlphabet->Attribute(index, *attrp);
1292TEMP const EventAttr& THIS::EventAttribute( Idx index) const {
1293 return pAlphabet->Attribute(index);
1298 return pAlphabet->Attributep(index);
1302TEMP const EventAttr& THIS::EventAttribute( const std::string& rName) const {
1303 return EventAttribute(EventIndex(rName));
1307TEMP EventAttr* THIS::EventAttributep( const std::string& rName) {
1308 return EventAttributep(EventIndex(rName));
1312TEMP void THIS::StateAttribute( Idx index, const StateAttr& rAttr) {
1313 FD_DG( "TaGenerator(" << this << ")::StateAttribute("
1314 << index << ",\"" << rAttr.ToString() << "\")");
1315 pStates->Attribute(index, rAttr);
1320 FD_DG( "TaGenerator(" << this << ")::StateAttribute("
1321 << SStr(index) << ",\"" << rAttr. ToString() << "\")");
1322 const StateAttr* attrp = dynamic_cast<const StateAttr* >(&rAttr);
1324 std::stringstream errstr;
1325 errstr << "cannot cast event attribute " << rAttr. ToString() << " for generator " << Name();
1326 throw Exception( "TaGenerator::StateAttribute", errstr.str(), 63);
1328 pStates->Attribute(index, *attrp);
1333TEMP const StateAttr& THIS::StateAttribute( Idx index) const {
1334 return pStates->Attribute(index);
1339 return pStates->Attributep(index);
1343TEMP const TaEventSet<EventAttr>& THIS::Alphabet( void) const {
1353TEMP const typename THIS::ATransSet& THIS::TransRel( void) const {
Classes IndexSet, TaIndexSet.
Classes NameSet, TaNameSet.
Classes Transition, TTransSet and TaTransSet.
const std::string & Name(void) const
TaNameSet< EventAttr > * pAlphabet
TaIndexSet< StateAttr > * pStates
const EventAttr & EventAttribute(const std::string &rName) const
void InjectStates(const StateSet &rNewStates)
void TransRel(TransSetEvX1X2 &res) const
TransAttr * TransAttributep(const Transition &rTrans)
void TransRel(TransSetX2X1Ev &res) const
bool SetTransition(const Transition &rTransition)
bool SetTransition(const Transition &rTransition, const TransAttr &rAttr)
void TransRel(TransSetEvX2X1 &res) const
bool SetTransition(const std::string &rX1, const std::string &rEv, const std::string &rX2)
void DoCopy(const TaGenerator &rGen)
TaTransSet< TransAttr > ATransSet
const TransAttr & TransAttribute(const Transition &rTrans) const
virtual ~TaGenerator(void)
virtual TaGenerator & Move(Type &rSrc)
void TransRel(TransSetX2EvX1 &res) const
void EventAttribute(Idx index, const EventAttr &rAttr)
void TransAttribute(const Transition &rTrans, const Type &rAttr)
virtual TaGenerator * New(void) const
virtual TaGenerator & Copy(const Type &rSrc)
Idx InsEvent(const std::string &rName, const EventAttr &rAttr)
Idx InsState(const std::string &rName)
void GlobalAttribute(const Type &rAttr)
TaGenerator(const TaGenerator &rOtherGen)
virtual TaGenerator * NewCpy(void) const
TaGenerator(const std::string &rFileName)
Idx InsEvent(const std::string &rName)
void TransAttribute(const Transition &rTrans, const TransAttr &rAttr)
EventAttr * EventAttributep(Idx index)
void InjectStates(const TaStateSet< StateAttr > &rNewStates)
const TaStateSet< StateAttr > & States(void) const
virtual const Type * Cast(const Type *pOther) const
const TaEventSet< EventAttr > & Alphabet(void) const
static const TaIndexSet< StateAttr > & StatesTaGen(void)
virtual void NewCore(void)
bool SetTransition(Idx x1, Idx ev, Idx x2)
void TransRel(TransSetX1EvX2 &res) const
virtual void UpdateCore(void)
void InjectTransRel(const ATransSet &rNewtransrel)
const StateAttr & StateAttribute(Idx index) const
void InjectTransRel(const TransSet &rNewtransrel)
GlobalAttr * GlobalAttributep(void)
Idx InsState(const StateAttr &attr)
const GlobalAttr & GlobalAttribute(void) const
void EventAttribute(Idx index, const Type &rAttr)
const ATransSet & TransRel(void) const
TaGenerator(const vGenerator &rOtherGen)
GlobalAttr * pGlobalAttribute
const EventAttr & EventAttribute(Idx index) const
bool InsEvent(Idx index, const EventAttr &rAttr)
void GlobalAttribute(const GlobalAttr &rAttr)
bool InsState(Idx index, const StateAttr &attr)
EventAttr * EventAttributep(const std::string &rName)
void InjectAlphabet(const TaEventSet< EventAttr > &rNewalphabet)
static const TaNameSet< EventAttr > & AlphabetTaGen(void)
void StateAttribute(Idx index, const StateAttr &rAttr)
static const GlobalAttr & GlobalTaGen(void)
void TransRel(TransSetX1X2Ev &res) const
static const ATransSet & TransRelTaGen(void)
Idx InsState(const std::string &rName, const StateAttr &attr)
void StateAttribute(Idx index, const Type &rAttr)
StateAttr * StateAttributep(Idx index)
void InjectAlphabet(const EventSet &rNewalphabet)
void Read(const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const
SymbolTable mStateSymbolTable
SymbolTable * mpEventSymbolTable
void ConfigureAttributeTypes(const AttributeVoid *pNewGlobalPrototype, const StateSet *pNewStatesPrototype, const EventSet *pNewAlphabetPrototype, const TransSet *pNewTransRelPrototype)
static bool msStateNamesEnabledDefault
std::map< Idx, Idx > mMinStateIndexMap
TaNameSet< AttributeCFlags > Alphabet
TTransSet< TransSort::X1X2Ev > TransSetX1X2Ev
libFAUDES 2.34d
--- 2026.03.10
--- c++ api documentaion by doxygen
|