XCube Stream Reader SDK
|
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_ */