|
|
Go to the documentation of this file.
6#ifndef DIAG_GENERATOR_H
7#define DIAG_GENERATOR_H
25template < class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
85 FD_DG( "TdiagGenerator(" << this << ")::~TdiagGenerator()");
112 Idx InsFailureTypeMapping( const std::string& failureType, const EventSet& rfailureEvents);
119 void InsFailureTypeMap( const std::map<std::string,EventSet>& rFailureMap);
128 Idx GetFailureType( Idx failureEvent) const;
135 EventSet GetAllFailureEvents( void) const;
146 void InsStateLabelMapping( Idx dStateIndex, Idx gStateIndex, Idx labelIndex);
175 std::string SAStr( Idx dStateIndex) const;
188 void DotWrite( const std::string& rFileName) const;
201#ifdef FAUDES_COMPATIBILITY
221#define THIS TdiagGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
222#define BASE TcGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
223#define TEMP template<class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
228 FD_DG( "TdiagGenerator(" << this << ")::TdiagGenerator()");
230 BASE::mReindexOnWrite= false;
235 FD_DG( "TdiagGenerator(" << this << ")::TdiagGenerator(rOtherGen)");
237 BASE::mReindexOnWrite= false;
242 FD_DG( "TdiagGenerator(" << this << ")::TdiagGenerator(rOtherGen)");
244 BASE::mReindexOnWrite= false;
248TEMP THIS::TdiagGenerator( const std::string& rFileName) : BASE() {
249 FD_DG( "TDiagGenerator(" << this << ")::TdiagGenerator(rFilename) : done");
251 BASE::mReindexOnWrite= false;
252 BASE::Read(rFileName);
260 res->EventSymbolTablep(BASE::mpEventSymbolTable);
261 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
262 res->mReindexOnWrite=BASE::mReindexOnWrite;
264 res->mpLabelSymbolTable=mpLabelSymbolTable;
278TEMP Idx THIS::InsFailureTypeMapping( const std::string& failureType, const EventSet& rfailureEvents) {
279 return BASE::pGlobalAttribute->AddFailureTypeMapping(failureType, rfailureEvents);
283TEMP void THIS::InsFailureTypeMap( const std::map<std::string,EventSet>& rFailureMap) {
284 BASE::pGlobalAttribute->AddFailureTypeMap(rFailureMap);
290 return BASE::pGlobalAttribute->FailureType(failureEvent);
295 return BASE::pGlobalAttribute->AllFailureEvents();
299TEMP void THIS::InsStateLabelMapping( Idx dStateIndex, Idx gStateIndex, Idx labelIndex) {
300 BASE::StateAttributep(dStateIndex)->AddStateLabelMapping(gStateIndex, labelIndex);
306 BASE::StateAttributep(dStateIndex)->AddStateLabelMap(gState, labels);
312 BASE::StateAttribute(dStateIndex,newAttr);
316TEMP std::string THIS::SAStr( Idx dStateIndex) const {
317 return BASE::StateAttribute(dStateIndex).Str();
321TEMP void THIS::DotWrite( const std::string& rFileName) const {
322 FD_DG( "TdiagGenerator(" << this << ")::DotWrite(" << rFileName << ")");
323 BASE::SetMinStateIndexMap();
324 StateSet::Iterator lit;
325 typename BASE::ATransSet::Iterator tit;
327 std::ofstream stream;
328 stream.exceptions(std::ios::badbit|std::ios::failbit);
329 stream.open(rFileName.c_str());
330 stream << "digraph \"" << BASE::Name() << "\" {" << std::endl;
331 stream << " rankdir=LR" << std::endl;
332 stream << " node [shape=box];" << std::endl;
334 stream << " // initial states" << std::endl;
336 for (lit = BASE::InitStatesBegin(); lit != BASE::InitStatesEnd(); ++lit) {
338 std::string xname = SAStr(*lit);
340 stream << " dot_dummyinit_" << i << " [shape=none, label=\"\" ];" << std::endl;
341 stream << " dot_dummyinit_" << i << " -> \"" << xname << "\";" << std::endl;
345 stream << " // marked states" << std::endl;
346 for (lit = BASE::MarkedStatesBegin(); lit != BASE::MarkedStatesEnd(); ++lit) {
348 std::string xname = SAStr(*lit);
350 stream << " \"" << xname << "\" [shape=doubleoctagon];" << std::endl;
353 stream << " // rest of stateset" << std::endl;
354 for (lit = BASE::StatesBegin(); lit != BASE::StatesEnd(); ++lit) {
355 if (! (BASE::ExistsInitState(*lit) || BASE::ExistsMarkedState(*lit)) ) {
357 std::string xname = SAStr(*lit);
359 stream << " \"" << xname << "\";" << std::endl;
364 stream << " // transition relation" << std::endl;
365 for (tit = BASE::TransRelBegin(); tit != BASE::TransRelEnd(); ++tit) {
367 std::string x1name = SAStr(tit->X1);
370 std::string x2name = SAStr(tit->X2);
372 stream << " \"" << x1name << "\" -> \"" << x2name
373 << "\" [label=\"" << BASE::EventName(tit->Ev) << "\"];" << std::endl;
375 stream << "}" << std::endl;
378 catch (std::ios::failure&) {
379 throw Exception( "TdiagGenerator::DotWrite",
380 "Exception opening/writing dotfile \""+rFileName+ "\"", 2);
382 BASE::ClearMinStateIndexMap();
static SymbolTable * StaticLabelSymbolTablep(void)
SymbolTable * mpLabelSymbolTable
TdiagGenerator< AttributeFailureTypeMap, AttributeDiagnoserState, AttributeCFlags, AttributeVoid > Diagnoser
TdiagGenerator< AttributeFailureTypeMap, AttributeDiagnoserState, AttributeCFlags, AttributeVoid > diagGenerator
std::string ToStringInteger(Int number)
libFAUDES 2.33k
--- 2025.09.16
--- c++ api documentaion by doxygen
|