|
|
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>
506 const std::string& rX2);
747 void GlobalAttribute( const Type& rAttr) { const GlobalAttr* ap= dynamic_cast<const GlobalAttr* >(&rAttr); if(ap) *pGlobalAttribute=*ap;};
807#define THIS TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
808#define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
809#define BASE vGenerator
824TEMP const GlobalAttr& THIS::GlobalTaGen( void) {
825 static GlobalAttr fls;;
835 FD_DG( "TaGenerator(" << this << ")::TaGenerator()");
839 FD_DG( "TaGenerator(" << this << ")::TaGenerator(): done");
847 FD_DG( "TaGenerator(" << this << ")::TaGenerator(" << &rOtherGen << ")");
861 FD_DG( "TaGenerator(" << this << ")::TaGenerator([v]" << &rOtherGen << ")");
867 FD_DG( "TaGenerator(" << this << ")::TaGenerator([v]" << &rOtherGen << "): ok");
871TEMP THIS::TaGenerator( const std::string& rFileName) :
875 FD_DG( "TaGenerator(" << this << ")::TaGenerator(" << rFileName << ")");
889 FD_DG( "TaGenerator(" << this << ")::NewCore()");
897 mpAlphabet= AlphabetTaGen().New();
898 mpStates=StatesTaGen().New();
899 mpTransRel=TransRelTaGen().New();
900 mpGlobalAttribute=GlobalTaGen().New();
906TEMP void THIS::UpdateCore( void) {
910 pGlobalAttribute = dynamic_cast< GlobalAttr* >(mpGlobalAttribute);
913 pTransRel = dynamic_cast< ATransSet* >(mpTransRel);
916 if(pGlobalAttribute==0 && mpGlobalAttribute!=0) tmm= true;
917 if(pAlphabet==0 && mpAlphabet!=0) tmm= true;
918 if(pStates==0 && mpStates!=0) tmm= true;
919 if(pTransRel==0 && mpTransRel!=0) tmm= true;
921 std::stringstream errstr;
922 errstr << "cannot cast attributes for generator type " << typeid(*this).name();
923 errstr << " ptrs " << pGlobalAttribute << "-" << pAlphabet << "-" << pStates << "-" << pTransRel;
924 throw Exception( "Generator::UpdateCore", errstr.str(), 63);
931 FD_DG( "TaGenerator(" << this << ")::DoAssign(" << &rGen << ")");
932 FD_DG( "TaGenerator(" << this << ")::DoAssign(..): types " << typeid(*this).name() << " <= " << typeid(rGen).name());
951#ifdef FAUDES_DEBUG_CODE
953 FD_DG( "TaGenerator()::DoAssign(): invalid generator");
958 FD_DG( "TaGenerator(" << this << ")::DoAssign(" << &rGen << "): done");
963 FD_DG( "TaGenerator(" << this << ")::Assign([type] " << &rSrc << ")");
964 FD_DG( "TaGenerator(" << this << ")::Assign(..): types \n" << typeid(*this).name() << " <= \n" << typeid(rSrc).name());
965 FD_DG( "TaGenerator(" << this << ")::Assign(..): match str " << ( typeid(*this).name() == typeid(rSrc).name()));
966 FD_DG( "TaGenerator(" << this << ")::Assign(..): match id " << ( typeid(* this) == typeid(rSrc)));
969 FD_DG( "TaGenerator(" << this << ")::Assign(..): agen " << agen);
971 if( this==agen) return * this;
974 FD_DG( "TaGenerator(" << this << ")::Assign([type] " << &rSrc << "):: call aGenerator DoAssign");
978 FD_DG( "TaGenerator(" << this << ")::Assign([type] " << &rSrc << "):: call vGenerator base");
987 FD_DG( "TaGenerator(" << this << ")::Move(" << &rGen << ")");
995 FD_DG( "TaGenerator(" << this << ")::Move([v]" << &rGen << ")");
1002 FD_DG( "TaGenerator(" << this << ")::~TaGenerator()");
1010 res->EventSymbolTablep(BASE::mpEventSymbolTable);
1011 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
1012 res->mReindexOnWrite=BASE::mReindexOnWrite;
1028 res.EventSymbolTablep(BASE::mpEventSymbolTable);
1029 res.StateNamesEnabled(BASE::mStateNamesEnabled);
1030 res.ReindexOnWrite(BASE::mReindexOnWrite);
1037 return dynamic_cast< const THIS* > (pOther);
1043 FD_DG( "TaGenerator(" << this << ")::operator = [v]" << &rOtherGen);
1044 return Assign(rOtherGen);
1049 FD_DG( "TaGenerator(" << this << ")::Valid()");
1050 if(!BASE::Valid()) return false;
1053 if( typeid( Alphabet().AttributeType())!= typeid( const EventAttr*)) tmm= true;
1054 if( typeid(States().AttributeType())!= typeid( const StateAttr*)) tmm= true;
1055 if( typeid(TransRel().AttributeType())!= typeid( const TransAttr*)) tmm= true;
1056 if( typeid(GlobalAttribute())!= typeid( const GlobalAttr&)) tmm= true;
1068 FD_DG( "TaGenerator(" << this << ")::Clear()");
1075 FD_DG( "TaGenerator::InjectAlphabet() " << rNewAlphabet. ToString());
1076 BASE::InjectAlphabet(rNewAlphabet);
1080TEMP void THIS::InjectAlphabet( const TaEventSet<EventAttr>& rNewAlphabet) {
1081 FD_DG( "TaGenerator::InjectAlphabet(TaEventSet<EventAttr>) " << rNewAlphabet.ToString());
1082#ifdef FAUDES_CHECKED
1083 if(rNewAlphabet.SymbolTablep()!=mpEventSymbolTable) {
1084 std::stringstream errstr;
1085 errstr << "symboltable mismatch aka not implemented" << std::endl;
1086 throw Exception( "TaGenerator::InjectAlphabet", errstr.str(), 88);
1089 *pAlphabet=rNewAlphabet;
1090 mpAlphabet->Name( "Alphabet");
1095 FD_DG( "TaGenerator(" << this << ")::InsEvent(" << index << ")");
1096 return pAlphabet->Insert(index);
1100TEMP Idx THIS::InsEvent( const std::string& rName) {
1101 FD_DG( "TaGenerator(" << this << ")::InsEvent(\"" << rName << "\")");
1102 return pAlphabet->Insert(rName);
1106TEMP bool THIS::InsEvent( Idx index, const EventAttr& attr) {
1107 FD_DG( "TaGenerator(" << this << ")::InsEvent(" << index << " " << attr.ToString() << ")");
1108 return pAlphabet->Insert(index, attr);
1112TEMP Idx THIS::InsEvent( const std::string& rName, const EventAttr& attr) {
1113 FD_DG( "TaGenerator(" << this << ")::InsEvent(\"" << rName << attr.ToString() << "\")");
1114 return pAlphabet->Insert(rName, attr);
1119 FD_DG( "TaGenerator(" << this << ")::InsState()");
1120 return pStates->Insert();
1125 FD_DG( "TaGenerator(" << this << ")::InsState(attr)");
1126 return pStates->Insert(attr);
1131 FD_DG( "TaGenerator(" << this << ")::InsState(" << index << ")");
1132 return pStates->Insert(index);
1136TEMP bool THIS::InsState( Idx index, const StateAttr& rAttr) {
1137 FD_DG( "TaGenerator(" << this << ")::InsState(" << index << ",rAttr)");
1138 return pStates->Insert(index,rAttr);
1142TEMP Idx THIS::InsState( const std::string& rName) {
1143 FD_DG( "TaGenerator(" << this << ")::InsState(\"" << rName << "\")");
1144 Idx index=pStates->Insert();
1145 StateName(index,rName);
1150TEMP Idx THIS::InsState( const std::string& rName, const StateAttr& attr) {
1151 FD_DG( "TaGenerator(" << this << ")::InsState(\"" << rName << "\", attr)");
1152 Idx index=pStates->Insert();
1153 StateName(index,rName);
1154 StateAttribute(index,attr);
1161 FD_DG( "TaGenerator(" << this << ")::InjectStates("
1163 BASE::InjectStates(rNewStates);
1168 FD_DG( "TaGenerator(" << this << ")::InjectStates("
1170 *pStates=rNewStates;
1171 pStates-> Name( "States");
1172 mpStateSymbolTable->RestrictDomain(*mpStates);
1179 FD_DG( "TaGenerator::InjectTransRel(...)");
1180 *pTransRel=rNewTransRel;
1185 FD_DG( "TaGenerator::InjectTransRel(...)");
1186 *pTransRel=rNewTransRel;
1191TEMP bool THIS::SetTransition( const std::string& rX1, const std::string& rEv, const std::string& rX2) {
1192 return BASE::SetTransition(rX1,rEv,rX2);
1203 FD_DG( "TaGenerator(" << this << ")::SetTransition(" << rTransition. X1 << ","
1204 << rTransition. Ev << "," << rTransition. X2 << ")");
1205#ifdef FAUDES_CHECKED
1206 if (! mpStates->Exists(rTransition. X1)) {
1207 std::stringstream errstr;
1208 errstr << "TaGenerator::SetTransition: state " << rTransition. X1
1209 << " not in stateset";
1210 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1212 if (! mpAlphabet->Exists(rTransition. Ev)) {
1213 std::stringstream errstr;
1214 errstr << "TaGenerator::SetTransition: event " << rTransition. Ev
1215 << " not in alphabet ";
1216 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1218 if (! mpStates->Exists(rTransition. X2)) {
1219 std::stringstream errstr;
1220 errstr << "TaGenerator::SetTransition: state " << rTransition. X2
1221 << " not in stateset";
1222 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1225 return pTransRel->Insert(rTransition);
1229TEMP bool THIS::SetTransition( const Transition& rTransition, const TransAttr& rAttr) {
1230 FD_DG( "TaGenerator(" << this << ")::SetTransition(" << rTransition. X1 << ","
1231 << rTransition. Ev << "," << rTransition. X2 << ", [attr:]" << rAttr.ToString() << ")");
1232#ifdef FAUDES_CHECKED
1233 if (! mpStates->Exists(rTransition. X1)) {
1234 std::stringstream errstr;
1235 errstr << "TaGenerator::SetTransition: state " << rTransition. X1
1236 << " not in stateset";
1237 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1239 if (! mpAlphabet->Exists(rTransition. Ev)) {
1240 std::stringstream errstr;
1241 errstr << "TaGenerator::SetTransition: event " << rTransition. Ev
1242 << " not in alphabet ";
1243 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1245 if (! mpStates->Exists(rTransition. X2)) {
1246 std::stringstream errstr;
1247 errstr << "TaGenerator::SetTransition: state " << rTransition. X2
1248 << " not in stateset";
1249 throw Exception( "TaGenerator::SetTransition(..)", errstr.str(), 95);
1252 return pTransRel->Insert(rTransition,rAttr);
1257 FD_DG( "TaGenerator(" << this << ")::TransAttribute("
1258 << TStr(rTrans) << ",\"" << rAttr.ToString() << "\")");
1259 pTransRel->Attribute(rTrans, rAttr);
1264 FD_DG( "TaGenerator(" << this << ")::TransAttribute("
1265 << TStr(rTrans) << ",\"" << rAttr. ToString() << "\")");
1266 const TransAttr* attrp = dynamic_cast<const TransAttr* >(&rAttr);
1268 std::stringstream errstr;
1269 errstr << "cannot cast event attribute " << rAttr. ToString() << " for generator " << Name();
1270 throw Exception( "TaGenerator::TransAttribute", errstr.str(), 63);
1272 pTransRel->Attribute(rTrans, *attrp);
1277 return pTransRel->Attributep(rTrans);
1283 return pTransRel->Attribute(rTrans);
1287TEMP void THIS::EventAttribute( Idx index, const EventAttr& rAttr) {
1288 FD_DG( "TaGenerator(" << this << ")::EventAttribute("
1289 << EStr(index) << ",\"" << rAttr.ToString() << "\")");
1290 pAlphabet->Attribute(index, rAttr);
1295 FD_DG( "TaGenerator(" << this << ")::EventAttribute("
1296 << EStr(index) << ",\"" << rAttr. ToString() << "\")");
1297 const EventAttr* attrp = dynamic_cast<const EventAttr* >(&rAttr);
1299 std::stringstream errstr;
1300 errstr << "cannot cast event attribute " << rAttr. ToString() << " for generator " << Name();
1301 throw Exception( "TaGenerator::EventAttribute", errstr.str(), 63);
1303 pAlphabet->Attribute(index, *attrp);
1307TEMP const EventAttr& THIS::EventAttribute( Idx index) const {
1308 return pAlphabet->Attribute(index);
1313 return pAlphabet->Attributep(index);
1317TEMP const EventAttr& THIS::EventAttribute( const std::string& rName) const {
1318 return EventAttribute(EventIndex(rName));
1322TEMP EventAttr* THIS::EventAttributep( const std::string& rName) {
1323 return EventAttributep(EventIndex(rName));
1327TEMP void THIS::StateAttribute( Idx index, const StateAttr& rAttr) {
1328 FD_DG( "TaGenerator(" << this << ")::StateAttribute("
1329 << index << ",\"" << rAttr.ToString() << "\")");
1330 pStates->Attribute(index, rAttr);
1335 FD_DG( "TaGenerator(" << this << ")::StateAttribute("
1336 << SStr(index) << ",\"" << rAttr. ToString() << "\")");
1337 const StateAttr* attrp = dynamic_cast<const StateAttr* >(&rAttr);
1339 std::stringstream errstr;
1340 errstr << "cannot cast event attribute " << rAttr. ToString() << " for generator " << Name();
1341 throw Exception( "TaGenerator::StateAttribute", errstr.str(), 63);
1343 pStates->Attribute(index, *attrp);
1348TEMP const StateAttr& THIS::StateAttribute( Idx index) const {
1349 return pStates->Attribute(index);
1354 return pStates->Attributep(index);
1358TEMP const TaEventSet<EventAttr>& THIS::Alphabet( void) const {
1368TEMP 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
virtual TaGenerator NewAGen(void) 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)
TaTransSet< TransAttr > ATransSet
const TransAttr & TransAttribute(const Transition &rTrans) const
virtual ~TaGenerator(void)
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
Idx InsEvent(const std::string &rName, const EventAttr &rAttr)
Idx InsState(const std::string &rName)
void GlobalAttribute(const Type &rAttr)
TaGenerator(const TaGenerator &rOtherGen)
TaGenerator(const std::string &rFileName)
Idx InsEvent(const std::string &rName)
void TransAttribute(const Transition &rTrans, const TransAttr &rAttr)
EventAttr * EventAttributep(Idx index)
virtual TaGenerator & Assign(const Type &rSrc)
void InjectStates(const TaStateSet< StateAttr > &rNewStates)
const TaStateSet< StateAttr > & States(void) const
virtual const Type * Cast(const Type *pOther) const
virtual void Move(TaGenerator &rGen)
const TaEventSet< EventAttr > & Alphabet(void) const
static const TaIndexSet< StateAttr > & StatesTaGen(void)
virtual void NewCore(void)
bool SetTransition(Idx x1, Idx ev, Idx x2)
virtual TaGenerator * Copy(void) const
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)
virtual void Move(Generator &rGen)
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 DoAssign(const TaGenerator &rGen)
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.33k
--- 2025.09.16
--- c++ api documentaion by doxygen
|