vgenerator.h

Go to the documentation of this file.
00001 
00003 /* FAU Discrete Event Systems Library (libfaudes)
00004 
00005 Copyright (C) 2006  Bernd Opitz
00006 Copyright (C) 2007  Thomas Moor
00007 Exclusive copyright is granted to Klaus Schmidt
00008 
00009 This library is free software; you can redistribute it and/or
00010 modify it under the terms of the GNU Lesser General Public
00011 License as published by the Free Software Foundation; either
00012 version 2.1 of the License, or (at your option) any later version.
00013 
00014 This library is distributed in the hope that it will be useful,
00015 but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE.  See the GNU
00017 Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public
00020 License along with this library; if not, write to the Free Software
00021 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
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    * copy methods
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   // reason Vor version not being defined:
00474   // * would need vGenerator version in TaGenerator (to lazy)
00475   // * should have attribute transparent movetransition, moveevent etc
00476   // * should have Version to operate on this. 
00477   //virtual void Version(Idx version, vGenerator& rResGen) = 0;
00478   //virtual void Version(const std::string& rVersion, vGenerator& rResGen) = 0;
00479 
00480 
00481 
00482   /*
00483    * io
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    * informative 
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    * read access to core members
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    * write access to core members
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    * reachability
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    * misc
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 } // namespace faudes
00699 
00700 
00701 
00702 #define VGENERATOR_H
00703 #endif
00704 

Generated on Fri May 9 11:26:47 2008 for libFAUDES 2.09b by  doxygen 1.4.4