Go to the documentation of this file.00001
00002
00003
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