Go to the documentation of this file.00001
00002
00003
00004
00005
00008
00009 #ifndef lgrLegacyUncheckpointedFormat_H_
00010 #define lgrLegacyUncheckpointedFormat_H_
00011
00012 #include "lgrFileFormatter.h"
00013 #include "filePosition.h"
00014 #include <vlutil/vlNetTypes.h>
00015 #include <vlutil/vlTime.h>
00016
00017 #include "memoryBuffer.h"
00018
00019 namespace MAKLogger
00020 {
00021 class DtPacket;
00022
00026 class DT_DLL_LGRCORE DtLgrLegacyUncheckpointedFormat : public DtLgrFileFormatter
00027 {
00028
00029 protected:
00030 DtLgrLegacyUncheckpointedFormat(DtLoggerFile*);
00031 virtual ~DtLgrLegacyUncheckpointedFormat();
00032
00033 private:
00035 DtLgrLegacyUncheckpointedFormat(const DtLgrLegacyUncheckpointedFormat&);
00037 DtLgrLegacyUncheckpointedFormat& operator=(const DtLgrLegacyUncheckpointedFormat&);
00038 public:
00039
00048 virtual void initializeSerialMode(DtFilePosition firstPacket = 0,
00049 DtFilePosition lastPacket = 0);
00050
00052 virtual void copyMetaData(const DtLgrFileFormatter* formatter);
00053
00055
00056
00058 virtual bool isEofValid() const;
00059
00068 virtual bool atEndOfFile();
00069
00074 virtual bool seekToFirstPacket();
00075
00080 virtual bool seekToFirstPacket(int type);
00081
00086 virtual bool seekToLastPacket();
00087
00092 virtual bool seekToLastPacket(int type);
00093
00098 virtual bool seekToFirstPacketBeforeTime(double time);
00099
00103 virtual bool seekToFirstPacketBeforeTime(int type,double time);
00104
00109 virtual bool seekToFirstPacketAfterTime(double time);
00110
00115 virtual bool seekToFirstPacketAfterTime(int type,double time);
00116
00120 virtual bool seekToNextPacket();
00121
00126 virtual bool seekToNextPacket(int type);
00127
00131 virtual bool seekToPreviousPacket();
00132
00137 virtual bool seekToPreviousPacket(int type);
00138
00141 virtual void seekToPosition(DtFilePosition);
00142
00145 virtual double currentPacketTime();
00146
00149 virtual int currentPacketType();
00150
00153 virtual size_t currentPacketSize();
00154
00157 virtual size_t currentPacketDataSize();
00158
00160 virtual DtFilePosition currentPosition();
00161
00163 virtual bool hasCheckpoints() const;
00164
00166 virtual void readMetaData(DtLoggerFileMetaData::DataPosition position);
00167
00172 virtual void readMetaData();
00173
00175 virtual void writeMetaData(DtLoggerFileMetaData::DataPosition position);
00176
00178 virtual char* readPacketIntoBuffer(char* cur, char* end, DtMessageBuffer& messages, DtMemoryBufferSP& buffer);
00179
00183 virtual void readPacketsUptoCount(DtMessageBuffer&,DtMemoryBufferSP,int packetCount);
00184
00187 virtual void readPacketsUptoSize(DtMessageBuffer&,DtMemoryBufferSP);
00188
00193 virtual void readPacketsUpToTime(DtMessageBuffer&,DtMemoryBufferSP,
00194 double time,bool inclusive = true);
00195
00198 virtual void writePackets(const DtMessageBuffer&);
00199
00202 virtual void writePacket(const DtPacket& packet);
00203
00208 virtual size_t writePacket(const DtPacket& packet,void* memory,size_t memorySize,
00209 int fileWriteBufferOffset = -1);
00210
00212 virtual void setDuration(double duration);
00213
00215 virtual double duration() const;
00216
00218
00220 virtual size_t headerSize() const;
00221
00223 virtual size_t tailSize() const;
00224
00225 protected:
00226
00227 struct NetPacketHeader
00228 {
00229 DtNetU32 numBytes;
00230 DtNetU32 flags;
00231 DtNetFloat64 arrivalTime;
00232 };
00233
00234 struct NetPacketTail
00235 {
00236 DtNetU32 numBytes;
00237 };
00238
00240 virtual DtFilePosition firstPacketPosition() const;
00241
00243 virtual DtFilePosition lastPacketPosition() const;
00244
00246 virtual double firstPacketTime() const;
00247
00249 virtual double lastPacketTime() const;
00250
00252 virtual size_t firstPacketSize() const;
00253
00255 virtual size_t lastPacketSize() const;
00256
00258 virtual size_t readPreviousPacketSize();
00259
00261 virtual void fillHeader(void* header, const DtPacket& packet);
00262
00264 virtual void writeHeader(int fd, const DtPacket& packet);
00265
00267 virtual DtNetU32 headerNumBytes(void* header);
00268
00270 virtual DtNetU32 headerFlags(void* header);
00271
00273 virtual DtNetFloat64 headerArrivalTime(void* header);
00274
00276 virtual void setFileEmpty();
00277
00279 virtual void setFirstPacket();
00280
00282 virtual void setLastPacket();
00283
00285 virtual void findFirstSerialPacket(DtFilePosition firstPacket);
00286
00288 virtual void findLastSerialPacket(DtFilePosition lastPacket);
00289
00291 virtual DtPacket* readPacket();
00292
00295 virtual void validateTime(double time);
00296
00299 virtual void initReadStartMetaData();
00300
00302 virtual void readStartMetaData();
00303
00306 virtual void initReadMiddleMetaData();
00307
00309 virtual void readMiddleMetaData();
00310
00313 virtual void initReadEndMetaData();
00314
00316 virtual void readEndMetaData();
00317
00319 virtual void writeStartMetaData();
00320
00322 virtual void writeMiddleMetaData();
00323
00325 virtual void writeEndMetaData();
00326
00330 int fd();
00331
00334
00335
00338 virtual void validateType(int type) = 0;
00339
00341 virtual int decodeTypeFromFlags(unsigned int flags) = 0;
00342
00344
00345
00346 protected:
00347
00348
00349
00350 DtFilePosition myEndOfStartMetadata;
00351
00352
00353 DtFilePosition myStartOfEndMetadata;
00354 DtFilePosition myFirstPacketPosition;
00355 DtFilePosition myLastPacketPosition;
00356 double myFirstPacketTime;
00357 double myLastPacketTime;
00358 size_t myFirstPacketSize;
00359 size_t myLastPacketSize;
00360 bool myIsEmptyFlag;
00361 double myPreviousArrivalTime;
00362 int myPreviousType;
00363
00364 DtClock myProfilingClock;
00365 };
00366 }
00367
00368 #endif