messageState.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 
00008 
00009 #ifndef messageState_H_
00010 #define messageState_H_
00011 
00012 #include "lgrCore.h"
00013 #include "observeEvent.h"
00014 #include <vlutil/vlMachineTypes.h>
00015 #include <list>
00016 #include <map>
00017 
00018 namespace MAKLogger
00019 {
00020    class DtMessageBuffer;
00021    class DtStateObject;
00022    class DtPacket;
00023    class DtMessageIOInfo;
00024    class DtAbsoluteTime;
00025 
00030    class DT_DLL_LGRCORE DtMessageState
00031    {
00032    public:
00033 
00034       enum CheckpointProcessing
00035       {
00036          IgnoreCheckpoints,
00037          ProcessAllCheckpoints,
00038          ProcessFirstCheckpoint
00039       };
00040 
00043       virtual ~DtMessageState();
00044 
00046       DtAbsoluteTime convertTime(DtAbsoluteTime inputCurrentTime,
00047          DtAbsoluteTime inputTime,DtAbsoluteTime outputCurrentTime);
00048 
00050       virtual void startDiff();
00051 
00053       virtual void generateDiff(DtMessageBuffer& stateBuffer,
00054          const DtAbsoluteTime& time);
00055 
00057       virtual void endDiff();
00058 
00067       void updateState(DtMessageBuffer& stateBuffer);
00068 
00069 
00079       void updateState(DtPacket* packet);
00080 
00082       virtual void postUpdate();
00083 
00092       void setState(DtMessageBuffer& completeStateBuffer,const DtAbsoluteTime& time);
00093 
00099       virtual void clearState(DtMessageBuffer& emptyBuffer,
00100          const DtAbsoluteTime& time);
00101 
00106       virtual void getState(DtMessageBuffer& emptyBuffer,const DtAbsoluteTime& time);
00107 
00108 
00110       virtual void activate();
00111 
00113       virtual void deactivate();
00114 
00116 
00117 
00118       virtual DtStateObject* findObject(DtU64 uniqueId);
00119       virtual const DtStateObject* findObject(DtU64 uniqueId) const;
00121 
00123 
00124 
00126       virtual void setInputInfo(const DtMessageIOInfo* info);
00127 
00129       virtual void setOutputInfo(const DtMessageIOInfo* info);
00130 
00132       virtual void decodeCheckpoint(const DtPacket& packet,DtMessageBuffer& buffer) = 0;
00133 
00135       virtual DtPacket* generateCheckpoint(const DtAbsoluteTime& timestamp) = 0;
00136 
00138 
00140       virtual const std::list<DtStateObject*>& stateObjectList() const;
00141 
00143 
00144 
00145       DtObserveEvent<DtMessageState>* inputChangedEvent();
00146       DtObserveEvent<DtMessageState>* outputChangedEvent();
00147       DtObserveEvent<DtMessageState>* stateModifiedEvent();
00148       DtObserveEvent<DtMessageState>* stateActivatedEvent();
00149       DtObserveEvent<DtMessageState>* stateDeactivatedEvent();
00150       DtObserveEvent<DtMessageState>* endDiffEvent();
00151       DtObserveEvent<DtStateObject>* objectAddedEvent();
00152       DtObserveEvent<DtStateObject>* objectToBeRemovedEvent();
00153       DtObserveEvent<DtStateObject>* objectUpdatedEvent();
00155 
00157       virtual void clearState();
00158 
00160       virtual CheckpointProcessing processCheckpoints();
00161 
00163       virtual void setProcessCheckpoints(CheckpointProcessing value);
00164 
00170       virtual void modifyMessages(DtMessageBuffer& messages);
00171 
00176       virtual void modifyMessage(DtPacket& packet) = 0;
00177 
00180       virtual bool isCheckpointMessage(const DtPacket& packet) const;
00181 
00183       virtual bool isUpdateMessage(const DtPacket& packet) const = 0;
00184 
00186       virtual bool isRemovalMessage(const DtPacket& packet) const = 0;
00187 
00188    protected:
00189 
00191       virtual void activateState() = 0;
00192 
00194       virtual void deactivateState() = 0;
00195 
00197       DtMessageState();
00198 
00200       DtMessageState(const DtMessageState&);
00201 
00203       DtMessageState& operator=(const DtMessageState&);
00204 
00211       virtual bool updateStateObjects(DtPacket& packet);
00212 
00214       virtual void createUpdate(DtStateObject& object,
00215                                 const DtAbsoluteTime& time, std::list<DtPacket*>& packetlist ) = 0;
00216 
00218       virtual DtPacket* createRemoval(DtStateObject& object,
00219          const DtAbsoluteTime& time)  = 0;
00220 
00221 
00225       virtual DtStateObject* createStateObject(DtPacket& packet);
00226 
00230       virtual DtStateObject* updateStateObject(DtPacket& packet);
00231 
00235       virtual DtStateObject* findStateObject(DtPacket& packet);
00236 
00240       virtual bool removeStateObject(DtPacket& packet);
00241 
00243       void removeStateObject( DtStateObject* object );
00244 
00246       typedef std::list<DtStateObject*> DtStateObjectList;
00247 
00249       typedef std::map<DtU64,DtStateObject*> DtStateObjectMap;
00250 
00252       DtStateObjectList myObjects;
00253 
00255       DtStateObjectMap myObjectLookupMap;
00256 
00258       DtStateObjectList mySnapshotOfObjects;
00259 
00261 
00262       DtObserveEvent<DtMessageState> myInputChangedEvent;
00263       DtObserveEvent<DtMessageState> myOutputChangedEvent;
00264       DtObserveEvent<DtMessageState> myStateModifiedEvent;
00265       DtObserveEvent<DtMessageState> myStateActivatedEvent;
00266       DtObserveEvent<DtMessageState> myStateDeactivetedEvent;
00267       DtObserveEvent<DtMessageState> myEndDiffEvent;
00268       DtObserveEvent<DtStateObject> myObjectAddedEvent;
00269       DtObserveEvent<DtStateObject> myObjectToBeRemovedEvent;
00270       DtObserveEvent<DtStateObject> myObjectUpdatedEvent;
00272 
00273       CheckpointProcessing myCheckpointProcessing;
00274 
00275       bool myStateChanged;
00276    };
00277 
00278 }
00279 
00280 #endif

Document ID: Generated on Tue Oct 11 19:41:03 EDT 2011 from SVN revision 107422
Copyright © 2005-2011 VT MÄK Inc. All Rights Reserved (www.mak.com)