XCube Stream Reader SDK
x3c/include/packetReader/CPacketBuffer.h
00001 /*
00002  * CPacketBuffer.h
00003  *
00004  *      Description:    this file defines the class of packet buffer.
00005  *  Created on:         Nov 18, 2011
00006  *      Author:         mtaveniku
00007  *
00008  */
00009 
00010 #ifndef CPACKETBUFFER_H_
00011 #define CPACKETBUFFER_H_
00012 
00013 #include <stddef.h>
00014 #include <semaphore.h>
00015 #include <unistd.h>
00016 #include <vector>
00017 using namespace std;
00018 
00019 //#include "X3cPacketTypes.h"
00020 #include "X3cPacket.h"
00022 
00027 class CPacketBuffer {
00028 public:
00029 
00031 
00033         CPacketBuffer();
00034 
00036 
00037         virtual ~CPacketBuffer();
00038 
00040 
00046         bool initialize(size_t bufSz);
00047 
00049 
00057         bool isOkToWrite(size_t nByte, bool isBlock);
00058 
00060 
00061         char *getWrPtr();
00062 
00064 
00067         void addBytesWritten(size_t nBytes);
00068 
00070 
00072         void setEOF();
00073 
00075 
00077         bool hasEOF();
00078 
00080 
00083         size_t getFreeBytes();
00084 
00086 
00088         size_t getValidBytes();
00089 
00091 
00093         X3cPacket *getPacket();
00094 
00096 
00099         char *getBytes(size_t nbytes);
00100 
00102 
00109         void freeBytes(char *ptr, size_t nBytes);
00110 
00112         void reset();
00113 
00115         void waitForRead();
00116 
00118         void waitForWrite();
00119 
00120 
00121 private:
00122 
00124 
00128         void *allocSharedMemory(size_t bufSz);
00129 
00131         void *mShmSeg1;
00132 
00134         void *mShmSeg2;
00135 
00137         int   mShmId;
00138 
00140         size_t mBufSz;
00141 
00143         char *mPhyStart;
00144 
00146         size_t mWrIdx;
00147 
00149         size_t mRdIdx;
00150 
00152         size_t mFreeIdx;
00153 
00155         bool mIsOk;
00156 
00158         bool mIsEOF;
00159 
00161         unsigned long long mBytesWritten;
00162 
00164         unsigned long long mBytesRead;
00165 
00167         bool mIsFull;
00168 
00170         bool mWriterIsWaiting;
00171 
00173         sem_t mWrSem;
00174 
00176         bool mReaderIsWaiting;
00177 
00179         sem_t mRdSem;
00180 
00182         const static unsigned mRdWTo = 2;
00183 
00185         const static unsigned mWrWTo = 2;
00186 
00187         vector<int> mBadShrBuf;
00188         vector<void*> mAreas;
00189 };
00190 
00191 #endif /* CPACKETBUFFER_H_ */
 All Classes Files Functions Variables Typedefs Friends Defines