下面是一个简易的FIFO的C++实现。主要实现了FIFO的读写,判空判满以及设置FIFO的大小。读FIFO时可以选择弹出读取的项或者不弹出。
#ifndef CC_FIFO_H
#define CC_FIFO_H
#include <queue>
#include <cstdint>
#include <assert.h>
typedef unsigned int u32;
template<class T>
class cc_fifo {
private:
std::queue<T> data;
u32 size;
public:
cc_fifo() {
this->size = UINT32_MAX;
}
cc_fifo(u32 size) {
this->size = size;
}
bool is_full() {
return (data.size() >= size);
}
bool is_empty() {
return data.empty();
}
T read(bool pop = true) {
assert(!data.empty());
T d = data.front();
if (pop)
data.pop();
return d;
}
void write(T d) {
assert(data.size() < size);
data.push(d);
}
};
#endif //CC_FIFO_H
写一个小的测试程序如下,
#include <stdio.h>
#include "cc_fifo.h"
int main(int argc, char *argv[]) {
cc_fifo<int> ff;
ff.write(1);
ff.write(-1);
ff.write(2);
printf("%d\n", ff.read(false));
printf("%d\n", ff.read());
printf("%d\n", ff.read());
return 0;
}
输出结果如下,
1
1
-1