果然,死的很惨啊,哈哈哈。
【问题】用固定长度的数组实现FIFO buffer,写个lib库。(毛线是lib库?)
事后重新写了一遍,估计还是有问题,但肯定比googleDoc上那个要完善的多。代码如下:
bool bufferIsFull = false;
bool bufferIsEmpty = false;
template<class T>
class CFifoBuffer {
public:
CFifoBuffer(int s);
~CFifoBuffer(){};
T get();
void put(T data);
void print();
private:
T* buffer;
int size;
int readPos;
int writePos;
};
template <class T>
CFifoBuffer<T>::CFifoBuffer(int s) {
size = s;
buffer = (T*)malloc(sizeof(T) * size);
readPos = 0;
writePos = 0;
}
//从队尾放入数据
template <class T>
void CFifoBuffer<T>::put(T data){
if ((writePos + 1)%size == readPos) {
bufferIsFull = true;
return;
}
buffer[writePos] = data;
writePos = (writePos + 1) % size;
}
//从队头取出数据
template <class T>
T CFifoBuffer<T>::get() {
if (writePos == readPos) {
bufferIsEmpty = true;
return 0;
}
T temp = buffer[readPos];
readPos = (readPos + 1) % size;
return temp;
}