sp_lpexecutor.h

Go to the documentation of this file.
00001 
00003 /* 
00004    FAU Discrete Event Systems Library (libfaudes)
00005 
00006    Copyright (C) 2007, 2008 Thomas Moor
00007    Copyright (C) 2007 Ruediger Berndt
00008    Exclusive copyright is granted to Klaus Schmidt
00009 
00010 */
00011 
00012 
00013 #ifndef FAUDES_LPEXECUTOR_H
00014 #define FAUDES_LPEXECUTOR_H
00015 
00016 
00017 #include "corefaudes.h"
00018 #include "tp_include.h"
00019 #include "sp_pexecutor.h"
00020 #include "sp_simconditionset.h"
00021 
00022 
00023 namespace faudes {
00024 
00071 class LoggingExecutor : public ParallelExecutor {    
00072 
00073  public:
00074 
00075   /*****************************************
00076    *****************************************
00077    *****************************************
00078    *****************************************/
00079 
00087   LoggingExecutor(void);
00088 
00102   LoggingExecutor(const std::string& rFileName);
00103 
00104 
00108   virtual ~LoggingExecutor(void);
00109 
00112   /*****************************************
00113    *****************************************
00114    *****************************************
00115    *****************************************/
00116 
00125   virtual void Clear(void);
00126 
00131   virtual void Reset(void);
00132 
00142    virtual bool Valid(void) const {return true;};
00143 
00154   virtual bool ExecuteTime(tpTime::Type duration);
00155 
00167   virtual bool ExecuteEvent(Idx event);
00168 
00169 
00174    tpTime::Type CurrentTime(void) const { return ParallelExecutor::CurrentTime();} ;
00175 
00185   void CurrentTime(tpTime::Type time);
00186 
00191   int CurrentStep(void) const { return ParallelExecutor::CurrentStep();};
00192 
00205   void CurrentStep(int step);
00206 
00217    bool CurrentParallelTimedState(const ParallelTimedState& ptstate);
00218 
00226   const ParallelTimedState& CurrentParallelTimedState(void) const
00227   { return ParallelExecutor::CurrentParallelTimedState();};
00228 
00231   /*****************************************
00232    *****************************************
00233    *****************************************
00234    *****************************************/
00235 
00240   const SimConditionSet& Conditions(void) const;
00241 
00243   void Conditions(const SimConditionSet&);
00244 
00246   const SimConditionAttribute& Condition(const std::string& rName) const;
00247 
00249   const SimConditionAttribute& Condition(Idx cond) const;
00250 
00252   Idx SetCondition(const std::string& rName, const SimConditionAttribute& rCondition);
00253 
00255   void SetCondition(Idx cond, const SimConditionAttribute& rCondition);
00256 
00258   void ClrCondition(const std::string& rName);
00259 
00261   void ClrCondition(Idx cond);
00262 
00264   void ConditionsWrite(TokenWriter& rTw, const std::string& rLabel="SimConditions") const;
00265 
00267   void ConditionsRead(TokenReader& rTr, const std::string& rLabel="SimConditions");
00268             
00270   typedef SimConditionSet::Iterator ConditionIterator;
00271 
00273   ConditionIterator ConditionsBegin(void) const;
00274 
00276   ConditionIterator ConditionsEnd(void) const;
00277 
00279   bool BreakCondition(void) const {return mBreakCondition;};
00280 
00283   /*****************************************
00284    *****************************************
00285    *****************************************
00286    *****************************************/
00287 
00292   typedef enum { Statistics=0x01, States=0x02, Events=0x04, Time=0x08} LogMode;
00293 
00295   void LogOpen(TokenWriter& rTw, int mode);   
00296 
00298   void LogOpen(const std::string& rFileName, int logmode, std::ios::openmode openmode = std::ios::out|std::ios::trunc);
00299 
00301   void LogClose(void);
00302 
00305   /*****************************************
00306    *****************************************
00307    *****************************************
00308    *****************************************/
00309 
00319   void TraceClear(int length=-2);
00320 
00322   typedef struct {
00323     ParallelTimedState mState;   
00324     Idx mStep;                   
00325     tpTime::Type mTime;          
00326     tpTime::Type mDuration;      
00327     Idx mEvent;                  
00328   } TraceSample;
00329 
00331   int TraceLength(void) const;
00332 
00334   typedef std::deque<TraceSample>::const_iterator TraceIterator;
00335 
00337   TraceIterator TraceBegin(void) const;
00338 
00340   TraceIterator TraceEnd(void) const;
00341 
00343   const TraceSample* TraceAtTime(tpTime::Type time) const;
00344 
00346   const TraceSample* TraceAtStep(int step) const;
00347 
00349   const TraceSample* TraceRecent(void) const;
00350 
00352   const TraceSample* TraceCurrent(void) const;
00353 
00355   void TraceWrite(TokenWriter& rTw, const TraceSample& sample) const;
00356 
00358   void TraceWrite(const TraceSample& sample) const;
00359 
00361   std::string TraceToString(const TraceSample& sample) const;
00362 
00364   void TraceWrite(void) const;
00365 
00367   virtual bool RevertToStep(Idx step);
00368   
00369 
00372 protected:
00373 
00375   virtual void Compile();
00376 
00377 private:
00378      
00379 
00381   SimConditionSet mConditions;
00382 
00384   std::vector<SimConditionAttribute*> mEnabledConditions;
00385 
00387   bool mBreakCondition;
00388 
00390   void CompileConditions(void);
00391 
00393   void ConditionsReset(void);
00394 
00396   void ConditionsProcess(void);
00397         
00399   TokenWriter* pLogTokenWriter;
00400 
00402   std::string mLogFile;
00403 
00405   int mLogMode;
00406   
00408   void LogWriteStatistics(void);
00409 
00411   void LogWriteState(void);
00412 
00414   void LogWriteEvent(void);
00415 
00417   void LogWriteTime(void);
00418 
00420   void LogWritePause(void);
00421 
00423   void LogWriteResume(void);
00424 
00426   int mTraceMax;
00427 
00429   int mTraceFirstStep;
00430 
00432   std::deque<TraceSample> mTraceBuffer;
00433 
00435   std::map<tpTime::Type,int> mTraceTimeToStep;
00436 
00438   void TraceAddSample(void);
00439 
00441   void TraceUpdateTime(void);
00442 
00444   void TraceUpdateTransition(Idx event);
00445 
00461   virtual void DoRead(TokenReader& rTr,  const std::string& rLabel = "", const Type* pContext=0);
00462  
00476   virtual void DoWrite(TokenWriter& rTw, const std::string& rLabel="", const Type* pContext=0) const;
00477 
00478 
00479 
00480 }; // end class LoggingExecutor
00481 
00482 
00483 
00484 } // namespace faudes
00485 
00486 
00487 #endif
00488 

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