00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef VGENERATOR_H
00025
00026 #include "definitions.h"
00027 #include "exception.h"
00028 #include "symboltable.h"
00029 #include "indexset.h"
00030 #include "nameset.h"
00031 #include "transset.h"
00032 #include "token.h"
00033 #include "tokenreader.h"
00034 #include "tokenwriter.h"
00035 #include <map>
00036 #include <set>
00037 #include <sstream>
00038 #include <cstdlib>
00039 #include <assert.h>
00040
00041 namespace faudes {
00042
00060 class vGenerator {
00061 public:
00062
00069 vGenerator(void);
00070
00071
00075 vGenerator(const vGenerator& rOtherGen);
00076
00080 virtual ~vGenerator(void) {};
00081
00090 virtual vGenerator* NewP(void) const = 0;
00091
00094
00095
00096
00097
00098
00109 void Name(const std::string& rName);
00110
00117 std::string Name(void) const;
00118
00125 Idx Id(void) const;
00126
00127
00128
00131
00132
00133
00134
00135
00148 static SymbolTable* GlobalEventSymbolTablep(void);
00149
00150
00164 SymbolTable* EventSymbolTablep(void) const;
00165
00174 virtual void EventSymbolTablep(SymbolTable* pSymTab);
00175
00185 virtual void EventSymbolTablep(const vGenerator& rOtherGen);
00186
00187
00194 EventSet NewEventSet(void) const;
00195
00202 EventSet* NewEventSetp(void) const;
00203
00213 Idx EventIndex(const std::string& rName) const;
00214
00224 std::string EventName(Idx index) const;
00225
00239 void EventName(Idx index, const std::string& rName);
00240
00248 std::string UniqueEventName(const std::string& rName) const;
00249
00250
00253
00254
00255
00256
00257
00268 const SymbolTable& StateSymbolTable(void) const;
00269
00280 void StateSymbolTable(const SymbolTable& rSymTab);
00281
00290 Idx StateIndex(const std::string& rName) const;
00291
00299 std::string StateName(Idx index) const;
00300
00313 void StateName(Idx index, const std::string& rName);
00314
00318 void ClearStateNames(void);
00319
00328 void ClrStateName(Idx index);
00329
00336 void ClrStateName(const std::string& rName);
00337
00348 bool StateNamesEnabled(void) const;
00349
00356 void StateNamesEnabled(bool flag);
00357
00361 void SetDefaultStateNames(void);
00362
00370 void EnforceStateNames(const std::string& rTemplate);
00371
00379 std::string UniqueStateName(const std::string& rName) const;
00380
00381
00384
00385
00386
00387
00388
00401 std::string EStr(Idx index) const;
00402
00412 std::string SStr(Idx index) const;
00413
00414
00424 std::string TStr(const Transition& rTrans) const;
00425
00426
00443 void GraphWrite(const std::string& rFileName, const std::string& rOutFormat="",
00444 const std::string& rDotExec="dot");
00445
00449 bool operator < (const vGenerator& rOtherGen) const {
00450 return (mId < rOtherGen.mId);
00451 }
00452
00453
00456
00457
00458
00459
00460
00465
00466
00467
00468
00469 virtual void Copy(vGenerator& rGen) const = 0;
00470 virtual void Move(vGenerator& rGen) = 0;
00471 virtual vGenerator& operator = (const vGenerator& rOtherGen) = 0;
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485 virtual void Write(void) const = 0;
00486 virtual std::string ToString(void) const = 0;
00487 virtual void Write(const char* pFileName,
00488 std::ios::openmode openmode = std::ios::out|std::ios::trunc) = 0;
00489 virtual void Write(TokenWriter& rTw) const = 0;
00490 virtual void DWrite(void) const = 0;
00491 virtual void WriteAlphabet(void) const = 0;
00492 virtual std::string AlphabetToString(void) const = 0;
00493 virtual void WriteAlphabet(TokenWriter& rTw) const = 0;
00494 virtual void WriteStateSet(const StateSet& rStateSet) const = 0;
00495 virtual std::string StateSetToString(const StateSet& rStateSet) const = 0;
00496 virtual void WriteStateSet(TokenWriter& rTw, const StateSet& rStateSet) const = 0;
00497 virtual void DWriteStateSet(TokenWriter& rTw, const StateSet& rStateSet) const = 0;
00498 virtual std::string StatesToString(void) const = 0;
00499 virtual std::string MarkedStatesToString(void) const = 0;
00500 virtual std::string InitStatesToString(void) const = 0;
00501 virtual void WriteTransRel(void) const = 0;
00502 virtual std::string TransRelToString(void) const = 0;
00503 virtual void WriteTransRel(TokenWriter& rTw) const = 0;
00504 virtual void DWriteTransRel(TokenWriter& rTw) const = 0;
00505 virtual void WriteStatistics(void) const = 0;
00506 virtual std::string StatisticsToString(void) const = 0;
00507 virtual void WriteStatistics(TokenWriter& rTw) const = 0;
00508 virtual void DotWrite(const std::string& rFileName) = 0;
00509 virtual void DDotWrite(const std::string& rFileName) const = 0;
00510
00511 virtual void Read(const char* pFileName) = 0;
00512 virtual void Read(TokenReader& rTr) = 0;
00513 virtual void ReadStateSet(TokenReader& rTr, const std::string& rLabel, StateSet& rStateSet) const = 0;
00514
00515
00516
00517
00518
00519 virtual bool Valid(void) = 0;
00520 virtual void Clear(void) = 0;
00521 virtual void ClearStates(void) = 0;
00522 virtual Idx Size(void) const = 0;
00523 virtual Idx AlphabetSize(void) const = 0;
00524 virtual Idx TransRelSize(void) const = 0;
00525 virtual Idx InitStatesSize(void) const = 0;
00526 virtual Idx MarkedStatesSize(void) const = 0;
00527 virtual bool Empty(void) const = 0;
00528 virtual bool AlphabetEmpty(void) const = 0;
00529 virtual bool TransRelEmpty(void) const = 0;
00530 virtual bool InitStatesEmpty(void) const = 0;
00531 virtual bool MarkedStatesEmpty(void) const = 0;
00532 virtual EventSet UsedEvents(void) const = 0;
00533 virtual EventSet UnusedEvents(void) const = 0;
00534 virtual EventSet ActiveEventSet(Idx x1) const = 0;
00535 virtual StateSet TransRelStateSpace(void) const = 0;
00536 virtual StateSet TransRelStateSpace(Idx x1) const = 0;
00537
00538
00539
00540
00541
00542 virtual EventSet::Iterator AlphabetBegin(void) const = 0;
00543 virtual EventSet::Iterator AlphabetEnd(void) const = 0;
00544 virtual bool ExistsEvent(Idx index) const = 0;
00545 virtual bool ExistsEvent(const std::string& rName) const = 0;
00546 virtual EventSet::Iterator FindEvent(Idx index) const = 0;
00547 virtual EventSet::Iterator FindEvent(const std::string& rName) const = 0;
00548 virtual const EventSet& Alphabet(void) const = 0;
00549
00550 virtual StateSet::Iterator StatesBegin(void) const = 0;
00551 virtual StateSet::Iterator StatesEnd(void) const = 0;
00552 virtual bool ExistsState(Idx index) const = 0;
00553 virtual bool ExistsState(const std::string& name) const = 0;
00554 virtual StateSet::Iterator FindState(Idx index) const = 0;
00555 virtual StateSet::Iterator FindState(const std::string& rName) const = 0;
00556 virtual const StateSet& States(void) const = 0;
00557
00558 virtual Idx InitState(void) const = 0;
00559 virtual StateSet::Iterator InitStatesBegin(void) const = 0;
00560 virtual StateSet::Iterator InitStatesEnd(void) const = 0;
00561 virtual bool ExistsInitState(Idx index) const = 0;
00562 virtual StateSet::Iterator FindInitState(Idx index) const = 0;
00563 virtual const StateSet& InitStates(void) const = 0;
00564
00565 virtual StateSet::Iterator MarkedStatesBegin(void) const = 0;
00566 virtual StateSet::Iterator MarkedStatesEnd(void) const = 0;
00567 virtual bool ExistsMarkedState(Idx index) const = 0;
00568 virtual StateSet::Iterator FindMarkedState(Idx index) const = 0;
00569 virtual const StateSet& MarkedStates(void) const = 0;
00570
00571 virtual TransSet::Iterator TransRelBegin(void) const = 0;
00572 virtual TransSet::Iterator TransRelEnd(void) const = 0;
00573 virtual TransSet::Iterator TransRelBegin(Idx x1) const = 0;
00574 virtual TransSet::Iterator TransRelEnd(Idx x1) const = 0;
00575 virtual TransSet::Iterator TransRelBegin(Idx x1, Idx ev) const = 0;
00576 virtual TransSet::Iterator TransRelEnd(Idx x1, Idx ev) const = 0;
00577 virtual TransSet::Iterator FindTransition(
00578 const std::string& rX1, const std::string& rEv, const std::string& rX2) const = 0;
00579 virtual TransSet::Iterator FindTransition(Idx x1, Idx ev, Idx x2) const = 0;
00580 virtual TransSet::Iterator FindTransition(const Transition& rTrans) const = 0;
00581 virtual bool ExistsTransition(
00582 const std::string& rX1, const std::string& rEv, const std::string& rX2) const = 0;
00583 virtual bool ExistsTransition(Idx x1, Idx ev, Idx x2) const = 0;
00584 virtual bool ExistsTransition(const Transition& rTrans) const = 0;
00585 virtual const TransSet& TransRel(void) const = 0;
00586 virtual void TransRel(TransSetX1EvX2& res) const = 0;
00587 virtual void TransRel(TransSetEvX1X2& res) const = 0;
00588 virtual void TransRel(TransSetEvX2X1& res) const = 0;
00589 virtual void TransRel(TransSetX2EvX1& res) const = 0;
00590 virtual void TransRel(TransSetX2X1Ev& res) const = 0;
00591 virtual void TransRel(TransSetX1X2Ev& res) const = 0;
00592
00593
00594
00595
00596
00597 virtual bool InsEvent(Idx index) = 0;
00598 virtual Idx InsEvent(const std::string& rName) = 0;
00599 virtual void InsEvents(const EventSet& events) = 0;
00600 virtual bool DelEvent(Idx index) = 0;
00601 virtual bool DelEvent(const std::string& rName) = 0;
00602 virtual void DelEvents(const EventSet& rEvents) = 0;
00603 virtual bool DelEventFromAlphabet(Idx index) = 0;
00604 virtual void InjectAlphabet(const EventSet& newalphabet) = 0;
00605
00606 virtual Idx InsState(void) = 0;
00607 virtual bool InsState(Idx index) = 0;
00608 virtual Idx InsState(const std::string& rName) = 0;
00609 virtual bool DelState(Idx index) = 0;
00610 virtual bool DelState(const std::string& rName) = 0;
00611 virtual void DelStates(const StateSet& rDelStates) = 0;
00612 virtual bool DelStateFromStates(Idx index) = 0;
00613 virtual StateSet::Iterator DelStateFromStates(StateSet::Iterator pos) = 0;
00614 virtual void InjectState(Idx index) = 0;
00615 virtual void InjectStates(const StateSet& rNewStates) = 0;
00616
00617 virtual Idx InsInitState(void) = 0;
00618 virtual Idx InsInitState(const std::string& rName) = 0;
00619 virtual void SetInitState(Idx index) = 0;
00620 virtual void SetInitState(const std::string& rName) = 0;
00621 virtual void ClrInitState(Idx index) = 0;
00622 virtual void ClrInitState(const std::string& rName) = 0;
00623 virtual void ClrInitState(StateSet::Iterator pos) = 0;
00624 virtual void ClearInitStates(void) = 0;
00625 virtual void InjectInitStates(const StateSet& rNewInitStates) = 0;
00626
00627 virtual Idx InsMarkedState(void) = 0;
00628 virtual Idx InsMarkedState(const std::string& rName) = 0;
00629 virtual void SetMarkedState(Idx index) = 0;
00630 virtual void SetMarkedState(const std::string& rName) = 0;
00631 virtual void ClrMarkedState(Idx index) = 0;
00632 virtual void ClrMarkedState(const std::string& rName) = 0;
00633 virtual void ClrMarkedState(StateSet::Iterator pos) = 0;
00634 virtual void ClearMarkedStates(void) = 0;
00635 virtual void InjectMarkedStates(const StateSet& rNewMarkedStates) = 0;
00636
00637 virtual bool SetTransition(Idx x1, Idx ev, Idx x2) = 0;
00638 virtual bool SetTransition(const std::string& rX1, const std::string& rEv,
00639 const std::string& rX2) = 0;
00640 virtual bool SetTransition(const Transition& rTransition) = 0;
00641 virtual void ClrTransition(Idx x1, Idx ev, Idx x2) = 0;
00642 virtual void ClrTransition(const Transition& rTrans) = 0;
00643 virtual TransSet::Iterator ClrTransition(TransSet::Iterator it) = 0;
00644 virtual void ClearTransRel(void) = 0;
00645 virtual void InjectTransition(const Transition& rTrans) = 0;
00646 virtual void InjectTransRel(const TransSet& newtransset) = 0;
00647
00648
00649
00650
00651
00652 virtual StateSet AccessibleSet(void) const = 0;
00653 virtual bool Accessible(void) = 0;
00654 virtual bool IsAccessible(void) const = 0;
00655 virtual StateSet CoaccessibleSet(void) const = 0;
00656 virtual bool Coaccessible(void) = 0;
00657 virtual bool IsCoaccessible(void) const = 0;
00658 virtual StateSet TrimSet(void) const = 0;
00659 virtual bool Trim(void) = 0;
00660 virtual bool IsTrim(void) const = 0;
00661
00662
00663
00664
00665 virtual bool IsDeterministic(void) const = 0;
00666 virtual void SetMinStateIndexMap(void) = 0;
00667 virtual void ClearMinStateIndexMap(void) = 0;
00668 virtual void MinimizeAlphabet(void) = 0;
00669
00673 protected:
00674
00676 std::string mMyName;
00677
00679 Idx mId;
00680
00682 static Idx msObjectCount;
00683
00685 SymbolTable mStateSymbolTable;
00686
00688 SymbolTable* mpStateSymbolTable;
00689
00691 SymbolTable* mpEventSymbolTable;
00692
00694 bool mStateNamesEnabled;
00695
00696 };
00697
00698 }
00699
00700
00701
00702 #define VGENERATOR_H
00703 #endif
00704