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 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    * copy methods
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   // reason for version not being defined:
00477   // * would need vGenerator version in TaGenerator (to lazy)
00478   // * should have attribute transparent movetransition, moveevent etc
00479   // * should have Version to operate on this. 
00480   //virtual void Version(Idx version, vGenerator& rResGen) = 0;
00481   //virtual void Version(const std::string& rVersion, vGenerator& rResGen) = 0;
00482 
00483 
00484 
00485   /*
00486    * io
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    * informative 
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    * read access to core members
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    * write access to core members
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    * reachability
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    * misc
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 } // namespace faudes
00698 
00699 
00700 
00701 #endif
00702 

Generated on Mon Nov 10 08:13:15 2008 for libFAUDES 2.11v by  doxygen 1.4.4