00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef FAUDES_VGENERATOR_H
00025 #define FAUDES_VGENERATOR_H
00026
00027 #include "definitions.h"
00028 #include "exception.h"
00029 #include "interface.h"
00030 #include "symboltable.h"
00031 #include "indexset.h"
00032 #include "nameset.h"
00033 #include "transset.h"
00034 #include "token.h"
00035 #include "tokenreader.h"
00036 #include "tokenwriter.h"
00037 #include <map>
00038 #include <set>
00039 #include <sstream>
00040 #include <cstdlib>
00041 #include <cassert>
00042
00043 namespace faudes {
00044
00062 class vGenerator : FAUDES_TYPE {
00063
00064 public:
00065
00072 vGenerator(void);
00073
00074
00078 vGenerator(const vGenerator& rOtherGen);
00079
00083 virtual ~vGenerator(void) {};
00084
00093 virtual vGenerator* NewP(void) const = 0;
00094
00097
00098
00099
00100
00101
00112 void Name(const std::string& rName);
00113
00120 std::string Name(void) const;
00121
00128 Idx Id(void) const;
00129
00130
00131
00134
00135
00136
00137
00138
00151 static SymbolTable* GlobalEventSymbolTablep(void);
00152
00153
00167 SymbolTable* EventSymbolTablep(void) const;
00168
00177 virtual void EventSymbolTablep(SymbolTable* pSymTab);
00178
00188 virtual void EventSymbolTablep(const vGenerator& rOtherGen);
00189
00190
00197 EventSet NewEventSet(void) const;
00198
00205 EventSet* NewEventSetp(void) const;
00206
00216 Idx EventIndex(const std::string& rName) const;
00217
00227 std::string EventName(Idx index) const;
00228
00242 void EventName(Idx index, const std::string& rName);
00243
00251 std::string UniqueEventName(const std::string& rName) const;
00252
00253
00256
00257
00258
00259
00260
00271 const SymbolTable& StateSymbolTable(void) const;
00272
00283 void StateSymbolTable(const SymbolTable& rSymTab);
00284
00293 Idx StateIndex(const std::string& rName) const;
00294
00302 std::string StateName(Idx index) const;
00303
00316 void StateName(Idx index, const std::string& rName);
00317
00321 void ClearStateNames(void);
00322
00331 void ClrStateName(Idx index);
00332
00339 void ClrStateName(const std::string& rName);
00340
00351 bool StateNamesEnabled(void) const;
00352
00359 void StateNamesEnabled(bool flag);
00360
00364 void SetDefaultStateNames(void);
00365
00373 void EnforceStateNames(const std::string& rTemplate);
00374
00382 std::string UniqueStateName(const std::string& rName) const;
00383
00384
00387
00388
00389
00390
00391
00404 std::string EStr(Idx index) const;
00405
00415 std::string SStr(Idx index) const;
00416
00417
00427 std::string TStr(const Transition& rTrans) const;
00428
00429
00446 void GraphWrite(const std::string& rFileName, const std::string& rOutFormat="",
00447 const std::string& rDotExec="dot");
00448
00452 bool operator < (const vGenerator& rOtherGen) const {
00453 return (mId < rOtherGen.mId);
00454 }
00455
00456
00459
00460
00461
00462
00463
00468
00469
00470
00471
00472 virtual void Copy(vGenerator& rGen) const = 0;
00473 virtual void Move(vGenerator& rGen) = 0;
00474 virtual vGenerator& operator = (const vGenerator& rOtherGen) = 0;
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488 virtual void WriteAlphabet(void) const = 0;
00489 virtual std::string AlphabetToString(void) const = 0;
00490 virtual void WriteAlphabet(TokenWriter& rTw) const = 0;
00491 virtual void WriteStateSet(const StateSet& rStateSet) const = 0;
00492 virtual std::string StateSetToString(const StateSet& rStateSet) const = 0;
00493 virtual void WriteStateSet(TokenWriter& rTw, const StateSet& rStateSet) const = 0;
00494 virtual void DWriteStateSet(TokenWriter& rTw, const StateSet& rStateSet) const = 0;
00495 virtual std::string StatesToString(void) const = 0;
00496 virtual std::string MarkedStatesToString(void) const = 0;
00497 virtual std::string InitStatesToString(void) const = 0;
00498 virtual void WriteTransRel(void) const = 0;
00499 virtual std::string TransRelToString(void) const = 0;
00500 virtual void WriteTransRel(TokenWriter& rTw) const = 0;
00501 virtual void DWriteTransRel(TokenWriter& rTw) const = 0;
00502 virtual void WriteStatistics(void) const = 0;
00503 virtual std::string StatisticsToString(void) const = 0;
00504 virtual void WriteStatistics(TokenWriter& rTw) const = 0;
00505 virtual void DotWrite(const std::string& rFileName) = 0;
00506 virtual void DDotWrite(const std::string& rFileName) const = 0;
00507
00508 virtual void ReadStateSet(TokenReader& rTr, const std::string& rLabel, StateSet& rStateSet) const = 0;
00509
00510
00511
00512
00513
00514 virtual bool Valid(void) = 0;
00515 virtual void Clear(void) = 0;
00516 virtual void ClearStates(void) = 0;
00517 virtual Idx Size(void) const = 0;
00518 virtual Idx AlphabetSize(void) const = 0;
00519 virtual Idx TransRelSize(void) const = 0;
00520 virtual Idx InitStatesSize(void) const = 0;
00521 virtual Idx MarkedStatesSize(void) const = 0;
00522 virtual bool Empty(void) const = 0;
00523 virtual bool AlphabetEmpty(void) const = 0;
00524 virtual bool TransRelEmpty(void) const = 0;
00525 virtual bool InitStatesEmpty(void) const = 0;
00526 virtual bool MarkedStatesEmpty(void) const = 0;
00527 virtual EventSet UsedEvents(void) const = 0;
00528 virtual EventSet UnusedEvents(void) const = 0;
00529 virtual EventSet ActiveEventSet(Idx x1) const = 0;
00530 virtual TransSet ActiveTransSet(Idx x1) const = 0;
00531 virtual StateSet TransRelStateSpace(void) const = 0;
00532 virtual StateSet TransRelStateSpace(Idx x1) const = 0;
00533
00534
00535
00536
00537
00538 virtual EventSet::Iterator AlphabetBegin(void) const = 0;
00539 virtual EventSet::Iterator AlphabetEnd(void) const = 0;
00540 virtual bool ExistsEvent(Idx index) const = 0;
00541 virtual bool ExistsEvent(const std::string& rName) const = 0;
00542 virtual EventSet::Iterator FindEvent(Idx index) const = 0;
00543 virtual EventSet::Iterator FindEvent(const std::string& rName) const = 0;
00544 virtual const EventSet& Alphabet(void) const = 0;
00545
00546 virtual StateSet::Iterator StatesBegin(void) const = 0;
00547 virtual StateSet::Iterator StatesEnd(void) const = 0;
00548 virtual bool ExistsState(Idx index) const = 0;
00549 virtual bool ExistsState(const std::string& name) const = 0;
00550 virtual StateSet::Iterator FindState(Idx index) const = 0;
00551 virtual StateSet::Iterator FindState(const std::string& rName) const = 0;
00552 virtual const StateSet& States(void) const = 0;
00553
00554 virtual Idx InitState(void) const = 0;
00555 virtual StateSet::Iterator InitStatesBegin(void) const = 0;
00556 virtual StateSet::Iterator InitStatesEnd(void) const = 0;
00557 virtual bool ExistsInitState(Idx index) const = 0;
00558 virtual StateSet::Iterator FindInitState(Idx index) const = 0;
00559 virtual const StateSet& InitStates(void) const = 0;
00560
00561 virtual StateSet::Iterator MarkedStatesBegin(void) const = 0;
00562 virtual StateSet::Iterator MarkedStatesEnd(void) const = 0;
00563 virtual bool ExistsMarkedState(Idx index) const = 0;
00564 virtual StateSet::Iterator FindMarkedState(Idx index) const = 0;
00565 virtual const StateSet& MarkedStates(void) const = 0;
00566
00567 virtual TransSet::Iterator TransRelBegin(void) const = 0;
00568 virtual TransSet::Iterator TransRelEnd(void) const = 0;
00569 virtual TransSet::Iterator TransRelBegin(Idx x1) const = 0;
00570 virtual TransSet::Iterator TransRelEnd(Idx x1) const = 0;
00571 virtual TransSet::Iterator TransRelBegin(Idx x1, Idx ev) const = 0;
00572 virtual TransSet::Iterator TransRelEnd(Idx x1, Idx ev) const = 0;
00573 virtual TransSet::Iterator FindTransition(
00574 const std::string& rX1, const std::string& rEv, const std::string& rX2) const = 0;
00575 virtual TransSet::Iterator FindTransition(Idx x1, Idx ev, Idx x2) const = 0;
00576 virtual TransSet::Iterator FindTransition(const Transition& rTrans) const = 0;
00577 virtual bool ExistsTransition(
00578 const std::string& rX1, const std::string& rEv, const std::string& rX2) const = 0;
00579 virtual bool ExistsTransition(Idx x1, Idx ev, Idx x2) const = 0;
00580 virtual bool ExistsTransition(const Transition& rTrans) const = 0;
00581 virtual const TransSet& TransRel(void) const = 0;
00582 virtual void TransRel(TransSetX1EvX2& res) const = 0;
00583 virtual void TransRel(TransSetEvX1X2& res) const = 0;
00584 virtual void TransRel(TransSetEvX2X1& res) const = 0;
00585 virtual void TransRel(TransSetX2EvX1& res) const = 0;
00586 virtual void TransRel(TransSetX2X1Ev& res) const = 0;
00587 virtual void TransRel(TransSetX1X2Ev& res) const = 0;
00588
00589
00590
00591
00592
00593 virtual bool InsEvent(Idx index) = 0;
00594 virtual Idx InsEvent(const std::string& rName) = 0;
00595 virtual void InsEvents(const EventSet& events) = 0;
00596 virtual bool DelEvent(Idx index) = 0;
00597 virtual bool DelEvent(const std::string& rName) = 0;
00598 virtual void DelEvents(const EventSet& rEvents) = 0;
00599 virtual bool DelEventFromAlphabet(Idx index) = 0;
00600 virtual void InjectAlphabet(const EventSet& newalphabet) = 0;
00601
00602 virtual Idx InsState(void) = 0;
00603 virtual bool InsState(Idx index) = 0;
00604 virtual Idx InsState(const std::string& rName) = 0;
00605 virtual bool DelState(Idx index) = 0;
00606 virtual bool DelState(const std::string& rName) = 0;
00607 virtual void DelStates(const StateSet& rDelStates) = 0;
00608 virtual bool DelStateFromStates(Idx index) = 0;
00609 virtual StateSet::Iterator DelStateFromStates(StateSet::Iterator pos) = 0;
00610 virtual void InjectState(Idx index) = 0;
00611 virtual void InjectStates(const StateSet& rNewStates) = 0;
00612
00613 virtual Idx InsInitState(void) = 0;
00614 virtual Idx InsInitState(const std::string& rName) = 0;
00615 virtual void SetInitState(Idx index) = 0;
00616 virtual void SetInitState(const std::string& rName) = 0;
00617 virtual void ClrInitState(Idx index) = 0;
00618 virtual void ClrInitState(const std::string& rName) = 0;
00619 virtual void ClrInitState(StateSet::Iterator pos) = 0;
00620 virtual void ClearInitStates(void) = 0;
00621 virtual void InjectInitStates(const StateSet& rNewInitStates) = 0;
00622
00623 virtual Idx InsMarkedState(void) = 0;
00624 virtual Idx InsMarkedState(const std::string& rName) = 0;
00625 virtual void SetMarkedState(Idx index) = 0;
00626 virtual void SetMarkedState(const std::string& rName) = 0;
00627 virtual void ClrMarkedState(Idx index) = 0;
00628 virtual void ClrMarkedState(const std::string& rName) = 0;
00629 virtual void ClrMarkedState(StateSet::Iterator pos) = 0;
00630 virtual void ClearMarkedStates(void) = 0;
00631 virtual void InjectMarkedStates(const StateSet& rNewMarkedStates) = 0;
00632
00633 virtual bool SetTransition(Idx x1, Idx ev, Idx x2) = 0;
00634 virtual bool SetTransition(const std::string& rX1, const std::string& rEv,
00635 const std::string& rX2) = 0;
00636 virtual bool SetTransition(const Transition& rTransition) = 0;
00637 virtual void ClrTransition(Idx x1, Idx ev, Idx x2) = 0;
00638 virtual void ClrTransition(const Transition& rTrans) = 0;
00639 virtual TransSet::Iterator ClrTransition(TransSet::Iterator it) = 0;
00640 virtual void ClearTransRel(void) = 0;
00641 virtual void InjectTransition(const Transition& rTrans) = 0;
00642 virtual void InjectTransRel(const TransSet& newtransset) = 0;
00643
00644
00645
00646
00647
00648 virtual StateSet AccessibleSet(void) const = 0;
00649 virtual bool Accessible(void) = 0;
00650 virtual bool IsAccessible(void) const = 0;
00651 virtual StateSet CoaccessibleSet(void) const = 0;
00652 virtual bool Coaccessible(void) = 0;
00653 virtual bool IsCoaccessible(void) const = 0;
00654 virtual StateSet TrimSet(void) const = 0;
00655 virtual bool Trim(void) = 0;
00656 virtual bool IsTrim(void) const = 0;
00657 virtual StateSet BlockingSet(void) const = 0;
00658
00659
00660
00661
00662 virtual bool IsDeterministic(void) const = 0;
00663 virtual void SetMinStateIndexMap(void) const = 0;
00664 virtual void ClearMinStateIndexMap(void) const = 0;
00665 virtual Idx MinStateIndex(Idx index) const =0;
00666 virtual const std::map<Idx,Idx>& MinStateIndexMap(void) const=0;
00667 virtual void MinimizeAlphabet(void) = 0;
00668
00672 protected:
00673
00675 std::string mMyName;
00676
00678 Idx mId;
00679
00681 static Idx msObjectCount;
00682
00684 SymbolTable mStateSymbolTable;
00685
00687 SymbolTable* mpStateSymbolTable;
00688
00690 SymbolTable* mpEventSymbolTable;
00691
00693 bool mStateNamesEnabled;
00694
00695 };
00696
00697 }
00698
00699
00700
00701 #endif
00702